Explorar el Código

Merge branch 'gpt_prepare_pay'

zoujiajian hace 3 años
padre
commit
5d5ae5bec1
Se han modificado 20 ficheros con 314 adiciones y 33 borrados
  1. 8 2
      netflix-dao/src/main/java/com/cyksj/model/dto/AuthRedirect.java
  2. 18 0
      netflix-dao/src/main/java/com/cyksj/model/entity/GoodsDon.java
  3. 26 0
      netflix-dao/src/main/java/com/cyksj/model/entity/GroupsRelation.java
  4. 6 0
      netflix-dao/src/main/java/com/cyksj/model/entity/OrderDon.java
  5. 3 0
      netflix-dao/src/main/java/com/cyksj/model/manage/request/ReqGoodsSpuInsert.java
  6. 4 0
      netflix-dao/src/main/java/com/cyksj/model/manage/views/OrderDonView.java
  7. 4 0
      netflix-dao/src/main/java/com/cyksj/model/views/GoodsFrontListView.java
  8. 4 0
      netflix-dao/src/main/java/com/cyksj/model/views/GoodsHomePageView.java
  9. 74 0
      netflix-dao/src/main/java/com/cyksj/model/views/GroupsRelationRechargeView.java
  10. 14 0
      netflix-dao/src/main/java/com/cyksj/model/views/RenewalView.java
  11. 7 2
      netflix-dao/src/main/resources/mapper/GroupRelationMapper.xml
  12. 2 1
      netflix-dao/src/main/resources/mapper/OrderDonMapper.xml
  13. 3 0
      netflix-service/src/main/java/com/cyksj/service/mange/impl/CmsOrderDonServiceImpl.java
  14. 6 10
      netflix-service/src/main/java/com/cyksj/service/order/impl/OrderCommonServiceImpl.java
  15. 9 1
      netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java
  16. 0 10
      netflix-service/src/main/java/com/cyksj/service/relation/impl/GroupRelationClearServiceImpl.java
  17. 17 1
      netflix-web/src/main/java/com/cyksj/web/controller/group/GroupRelationController.java
  18. 3 0
      netflix-web/src/main/java/com/cyksj/web/controller/manage/goods/CmsGoodsDonController.java
  19. 101 1
      netflix-web/src/main/java/com/cyksj/web/controller/manage/group/CmsGroupRelationController.java
  20. 5 5
      netflix-web/src/main/java/com/cyksj/web/controller/user/AuthorizationController.java

+ 8 - 2
netflix-dao/src/main/java/com/cyksj/model/dto/AuthRedirect.java

@@ -43,7 +43,13 @@ public class AuthRedirect {
      */
     private String dsCode;
 
-    private String callback;
+    /**
+     * callback
+     */
+    private String ck;
 
-    private String callbackType;
+    /**
+     * 回传类型
+     */
+    private String ct;
 }

+ 18 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/GoodsDon.java

@@ -1,8 +1,10 @@
 package com.cyksj.model.entity;
 
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.ejlchina.searcher.bean.DbIgnore;
 import com.ejlchina.searcher.bean.SearchBean;
+import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -125,6 +127,12 @@ public class GoodsDon extends BaseEntity {
      */
     private String payDesc;
 
+    /**
+     * 特殊类型
+     */
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    private GoodsDon.SpecialType specialType;
+
     @TableField(exist = false)
     @DbIgnore
     private BigDecimal price;
@@ -136,4 +144,14 @@ public class GoodsDon extends BaseEntity {
     @TableField(exist = false)
     @DbIgnore
     private Integer accountCount;
+
+    @AllArgsConstructor
+    @Getter
+    public enum SpecialType {
+        recharge("代充"),
+        ;
+
+        private String desc;
+
+    }
 }

+ 26 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/GroupsRelation.java

@@ -38,6 +38,20 @@ public class GroupsRelation extends BaseEntity {
      * 账号
      */
     private String account;
+
+    /**
+     * 密码
+     */
+    private String password;
+
+    private Date submitTime;
+
+    private Date sendTime;
+
+    private String operator;
+
+    private RechargeStatus rechargeStatus;
+
     /**
      * 续费意愿处理状态
      */
@@ -86,4 +100,16 @@ public class GroupsRelation extends BaseEntity {
         private String desc;
 
     }
+
+    @AllArgsConstructor
+    @Getter
+    public enum RechargeStatus{
+        waiting("待充值"),
+        complete("已完成"),
+        error("账号错误"),
+        ;
+
+        private String desc;
+
+    }
 }

+ 6 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/OrderDon.java

@@ -194,6 +194,12 @@ public class OrderDon extends BaseEntity implements Serializable {
     @TableField(exist = false)
     private String payDesc;
 
+    /**
+     * 虚拟平台特殊类型
+     */
+    @TableField(exist = false)
+    private GoodsDon.SpecialType specialType;
+
 
     public enum Status {
         /**

+ 3 - 0
netflix-dao/src/main/java/com/cyksj/model/manage/request/ReqGoodsSpuInsert.java

@@ -1,5 +1,6 @@
 package com.cyksj.model.manage.request;
 
+import com.cyksj.model.entity.GoodsDon;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -102,4 +103,6 @@ public class ReqGoodsSpuInsert {
      * 付款说明
      */
     private String payDesc;
+
+    private GoodsDon.SpecialType specialType;
 }

+ 4 - 0
netflix-dao/src/main/java/com/cyksj/model/manage/views/OrderDonView.java

@@ -1,5 +1,6 @@
 package com.cyksj.model.manage.views;
 
+import com.cyksj.model.entity.GoodsDon;
 import com.cyksj.model.entity.OrderDon;
 import com.cyksj.model.entity.OrderDonWaybill;
 import com.cyksj.model.views.GoodsDonSkuView;
@@ -136,6 +137,9 @@ public class OrderDonView {
     @DbField("odt.address")
     private String address;
 
+    @DbField("g.special_type")
+    private GoodsDon.SpecialType specialType;
+
     @DbIgnore
     private OrderDonWaybill waybill;
 

+ 4 - 0
netflix-dao/src/main/java/com/cyksj/model/views/GoodsFrontListView.java

@@ -1,5 +1,6 @@
 package com.cyksj.model.views;
 
+import com.cyksj.model.entity.GoodsDon;
 import com.cyksj.model.entity.GoodsDonSpec;
 import com.ejlchina.searcher.bean.DbField;
 import com.ejlchina.searcher.bean.DbIgnore;
@@ -66,6 +67,9 @@ public class GoodsFrontListView {
 	@DbField("g.second_type")
 	private Integer secondType;
 
+	@DbField("g.special_type")
+	private GoodsDon.SpecialType specialType;
+
 	/**
 	 * 最低规格价格
 	 */

+ 4 - 0
netflix-dao/src/main/java/com/cyksj/model/views/GoodsHomePageView.java

@@ -1,5 +1,6 @@
 package com.cyksj.model.views;
 
+import com.cyksj.model.entity.GoodsDon;
 import com.ejlchina.searcher.bean.DbField;
 import com.ejlchina.searcher.bean.DbIgnore;
 import com.ejlchina.searcher.bean.SearchBean;
@@ -86,6 +87,9 @@ public class GoodsHomePageView {
 	@JsonIgnore
 	private Integer virtualSold;
 
+	@DbField("g.special_type")
+	private GoodsDon.SpecialType specialType;
+
 	/**
 	 * 购买通知信息
 	 */

+ 74 - 0
netflix-dao/src/main/java/com/cyksj/model/views/GroupsRelationRechargeView.java

@@ -0,0 +1,74 @@
+package com.cyksj.model.views;
+
+import com.cyksj.model.entity.GoodsDon;
+import com.cyksj.model.entity.GroupsRelation;
+import com.ejlchina.searcher.bean.DbField;
+import com.ejlchina.searcher.bean.SearchBean;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/*
+ *项目名: netflix
+ *文件名: GroupsRelationRechargeView
+ *创建者: JavaZou
+ *创建时间:2023/7/13 13:38
+ *
+ */
+@Getter
+@Setter
+@SearchBean(tables = "groups_relation gr left join groups_trips gt on gt.id = gr.groups_id" +
+		" left join goods_don_sku gdk on gdk.id = gt.sku_id " +
+		" left join goods_don g on g.id = gdk.goods_id" +
+		" left join user u on u.id = gr.user_id")
+public class GroupsRelationRechargeView {
+
+	@DbField("gr.id")
+	private Long relationId;
+
+	@DbField("gr.user_id")
+	private Long userId;
+
+	@DbField("gr.status")
+	private GroupsRelation.Status status;
+
+	@DbField("u.nickname")
+	private String nickname;
+
+	@DbField("gr.account")
+	private String account;
+
+	@DbField("gr.password")
+	private String password;
+
+	@DbField("gr.operator")
+	private String operator;
+
+	@DbField("gr.submit_time")
+	private Date submitTime;
+
+	@DbField("gr.send_time")
+	private Date sendTime;
+
+	@DbField("gr.expiry_time")
+	private Date expiryTime;
+
+	@DbField("gr.recharge_status")
+	private GroupsRelation.RechargeStatus rechargeStatus;
+
+	@DbField("g.id")
+	private Long goodsId;
+
+	@DbField("g.title")
+	private String title;
+
+	@DbField("gdk.id")
+	private Long skuId;
+
+	@DbField("gdk.spec_val")
+	private String specVal;
+
+	@DbField("g.special_type")
+	private GoodsDon.SpecialType specialType;
+}

+ 14 - 0
netflix-dao/src/main/java/com/cyksj/model/views/RenewalView.java

@@ -1,5 +1,7 @@
 package com.cyksj.model.views;
 
+import com.cyksj.model.entity.GoodsDon;
+import com.cyksj.model.entity.GroupsRelation;
 import com.ejlchina.searcher.bean.DbField;
 import com.ejlchina.searcher.bean.DbIgnore;
 import com.ejlchina.searcher.bean.SearchBean;
@@ -69,6 +71,9 @@ public class RenewalView {
     @DbField("g.second_type")
     private Integer secondType;
 
+    @DbField("g.special_type")
+    private GoodsDon.SpecialType specialType;
+
     @DbField("gr.user_id")
     @JsonIgnore
     private Long userId;
@@ -100,6 +105,15 @@ public class RenewalView {
     @DbField("a.secret")
     private String secret;
 
+    @DbField("gr.account")
+    private String grAccount;
+
+    @DbField("gr.password")
+    private String grPassword;
+
+    @DbField("gr.recharge_status")
+    private GroupsRelation.RechargeStatus rechargeStatus;
+
     @DbIgnore
     private GoodsDonViews goodsDonViews;
 }

+ 7 - 2
netflix-dao/src/main/resources/mapper/GroupRelationMapper.xml

@@ -10,9 +10,14 @@
         renew_status = #{entity.renewStatus},
         is_handle = #{entity.isHandle},
         user_id = #{entity.userId},
-        account = #{entity.account},
+        account = null,
         customer_service = null,
-        verify_code = null
+        verify_code = null,
+        password = null,
+        recharge_status = null,
+        send_time = null,
+        submit_time = null,
+        operator = null
         where id = #{entity.id}
         <if test="expireTime != null">
             and expiry_time = #{expireTime}

+ 2 - 1
netflix-dao/src/main/resources/mapper/OrderDonMapper.xml

@@ -78,7 +78,8 @@
                gd.logo,
                gd.second_type,
                gd.type as goodsDonType,
-               gd.pay_desc
+               gd.pay_desc,
+               gd.special_type
         from `order_don` od
                  left join `goods_don_sku` gdk on gdk.id = od.sku_id
                  left join `goods_don` gd on gd.id = od.goods_id

+ 3 - 0
netflix-service/src/main/java/com/cyksj/service/mange/impl/CmsOrderDonServiceImpl.java

@@ -331,6 +331,9 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
         if (source == null) source = UserTicketClearedRecord.Source.change_ticket;
         GroupsRelation relation = relationMapper.selectById(relationId);
         Assert.notNull(relation, "车票已不存在");
+        if (relation.getRechargeStatus() != null) {
+            throw BusinessRuntimeException.getInstance("代充账号车票无法更换车票");
+        }
         Long userId = relation.getUserId();
         OrderDon orderDon = orderDonMapper.selectOne(Wrappers.lambdaQuery(OrderDon.class)
                 .eq(OrderDon::getUserId, userId)

+ 6 - 10
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderCommonServiceImpl.java

@@ -106,16 +106,12 @@ public class OrderCommonServiceImpl implements OrderCommonService {
 					if (relation.getStatus() != GroupsRelation.Status.outside) {
 						relation.setStatus(GroupsRelation.Status.none);
 					}
-					if (expiryTime != null) {
-						relation.setStartTime(null);
-						relation.setExpiryTime(null);
-						relation.setIsHandle(false);
-						relation.setRenewStatus(false);
-						relation.setAccount(null);
-						groupsRelationMapper.updateExpiryTime(relation, expiryTime);
-					} else {
-						groupsRelationMapper.updateById(relation);
-					}
+					relation.setStartTime(null);
+					relation.setExpiryTime(null);
+					relation.setIsHandle(false);
+					relation.setRenewStatus(false);
+					relation.setAccount(null);
+					groupsRelationMapper.updateExpiryTime(relation, expiryTime);
 					if (relation.getStatus() != GroupsRelation.Status.outside) {
 						delRelation(relation.getId());
 					}

+ 9 - 1
netflix-service/src/main/java/com/cyksj/service/order/impl/OrderDonServiceImpl.java

@@ -328,7 +328,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 				}
 			}
 		}
-
+		orderDon.setSpecialType(goodsDon.getSpecialType());
 		return orderDon;
 	}
 
@@ -653,6 +653,10 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 		if (goodsDon.getType() == 2) {
 			throw new BusinessRuntimeException("实物不支持续费");
 		}
+
+		if (goodsDon.getSpecialType() != null && goodsDon.getSpecialType() == GoodsDon.SpecialType.recharge) {
+			throw new BusinessRuntimeException("代充账号不允许续费");
+		}
 		//用户车票规格
 		Long tripsSkuId = groupsTrips.getSkuId();
 		GoodsDonSkuView goodsDonSkuView = beanSearcher.searchFirst(GoodsDonSkuView.class, MapUtils.builder().field(GoodsDonSkuView::getGoodsId, goodsDon.getId())
@@ -1140,6 +1144,10 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
 				//续费后,下一次续费意愿状态为false
 				relation.setRenewStatus(false);
 				relation.setIsHandle(false);
+				if (goodsDon.getSpecialType() != null && goodsDon.getSpecialType() == GoodsDon.SpecialType.recharge) {
+					relation.setRechargeStatus(GroupsRelation.RechargeStatus.waiting);
+					relation.setSubmitTime(DateTime.now());
+				}
 				if (GroupsTrips.Status.validity.equals(groupsTrips.getStatus()) || GroupsTrips.Status.down.equals(groupsTrips.getStatus())) {
 					//如果续费增加时间,如果首次则设置当前时间为初始时间
 					Date expiryTime = Optional.ofNullable(relation.getExpiryTime()).orElse(new Date());

+ 0 - 10
netflix-service/src/main/java/com/cyksj/service/relation/impl/GroupRelationClearServiceImpl.java

@@ -2,13 +2,10 @@ package com.cyksj.service.relation.impl;
 
 import com.cyksj.mapper.GroupsMapper;
 import com.cyksj.mapper.GroupsRelationMapper;
-import com.cyksj.mapper.GroupsTripsDeleteRecordMapper;
 import com.cyksj.mapper.UserTicketClearedRecordMapper;
 import com.cyksj.model.entity.GroupsRelation;
 import com.cyksj.model.entity.UserTicketClearedRecord;
 import com.cyksj.model.manage.views.GroupsRelationView;
-import com.cyksj.service.mange.CmsAccountService;
-import com.cyksj.service.mange.CmsGroupService;
 import com.cyksj.service.relation.GroupRelationClearService;
 import com.ejlchina.searcher.BeanSearcher;
 import com.ejlchina.searcher.util.MapUtils;
@@ -37,13 +34,6 @@ public class GroupRelationClearServiceImpl implements GroupRelationClearService
 
 	private final UserTicketClearedRecordMapper userTicketClearedRecordMapper;
 
-	private final CmsGroupService groupService;
-
-	private final CmsAccountService accountService;
-
-	private final GroupsTripsDeleteRecordMapper groupsTripsDeleteRecordMapper;
-
-
 	@Override
 	@Transactional(rollbackFor = Throwable.class)
 	public void clearTicket(GroupsRelation relation, UserTicketClearedRecord.Source source) {

+ 17 - 1
netflix-web/src/main/java/com/cyksj/web/controller/group/GroupRelationController.java

@@ -7,6 +7,7 @@ import cn.hutool.core.thread.ThreadUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.extra.servlet.ServletUtil;
 import cn.hutool.json.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.annotation.NoSubmit;
 import com.cyksj.common.exception.BusinessRuntimeException;
@@ -123,7 +124,22 @@ public class GroupRelationController {
         if (re == null) {
             throw new BusinessRuntimeException("该车票不存在,请联系客服.");
         }
-        relationMapper.update(relation, Wrappers.lambdaUpdate(GroupsRelation.class).set(GroupsRelation::getAccount, relation.getAccount()).eq(GroupsRelation::getId, relation.getId()));
+        LambdaUpdateWrapper<GroupsRelation> updateWrapper = Wrappers.lambdaUpdate(GroupsRelation.class)
+                .set(GroupsRelation::getAccount, relation.getAccount())
+                .set(GroupsRelation::getPassword, relation.getPassword())
+                .eq(GroupsRelation::getId, relation.getId());
+        if (re.getRechargeStatus() != null) {
+            if (re.getRechargeStatus() == GroupsRelation.RechargeStatus.complete) {
+                throw BusinessRuntimeException.getInstance("代充账号已充值");
+            }
+            if (StrUtil.isEmpty(relation.getAccount()) || StrUtil.isEmpty(relation.getPassword())) {
+                throw BusinessRuntimeException.getInstance("请输入正确的账号密码信息");
+            }
+            if (re.getRechargeStatus() == GroupsRelation.RechargeStatus.error) {
+                updateWrapper.set(GroupsRelation::getRechargeStatus, GroupsRelation.RechargeStatus.waiting);
+            }
+        }
+        relationMapper.update(relation, updateWrapper);
         return GatewayResponse.SUCCESS.newBuilder().toResult();
     }
 

+ 3 - 0
netflix-web/src/main/java/com/cyksj/web/controller/manage/goods/CmsGoodsDonController.java

@@ -98,6 +98,9 @@ public class CmsGoodsDonController {
     public Result<String> spuUpdate(@Validated @RequestBody ReqGoodsSpuInsert spu) throws Exception{
         GoodsDon goods = new GoodsDon();
         BeanUtil.copyProperties(spu,goods);
+        if (spu.getSpecialType() == null) {
+            goods.setSpecialType(null);
+        }
         goodsDonService.updateById(goods);
         Set<String> keys = redisService.keys(RedisService.key.YH_HOME_PAGHE_CACHE.getName() + "*");
         redisService.del(keys.toArray(String[]::new));

+ 101 - 1
netflix-web/src/main/java/com/cyksj/web/controller/manage/group/CmsGroupRelationController.java

@@ -1,16 +1,30 @@
 package com.cyksj.web.controller.manage.group;
 
+import cn.dev33.satoken.stp.StpUtil;
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.lang.Assert;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.annotation.NoSubmit;
+import com.cyksj.common.constant.Constant;
+import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
-import com.cyksj.model.entity.GroupsRelation;
+import com.cyksj.mapper.GoodsDonSkuMapper;
+import com.cyksj.mapper.GroupsRelationMapper;
+import com.cyksj.mapper.OrderDonMapper;
+import com.cyksj.mapper.manage.cms.CmsUserMapper;
+import com.cyksj.model.entity.*;
 import com.cyksj.model.manage.views.GroupsRelationView;
+import com.cyksj.model.views.GroupsRelationRechargeView;
 import com.cyksj.service.scheduler.SchedulerService;
 import com.ejlchina.searcher.BeanSearcher;
+import com.ejlchina.searcher.SearchResult;
 import com.ejlchina.searcher.param.Operator;
 import com.ejlchina.searcher.util.MapUtils;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
@@ -32,6 +46,14 @@ public class CmsGroupRelationController {
 
     private final SchedulerService schedulerService;
 
+    private final GroupsRelationMapper groupsRelationMapper;
+
+    private final CmsUserMapper cmsUserMapper;
+
+    private final OrderDonMapper orderDonMapper;
+
+    private final GoodsDonSkuMapper goodsDonSkuMapper;
+
     @GetMapping("/get")
     public Result<List<GroupsRelationView>> get(){
         List<GroupsRelationView> search = beanSearcher.searchAll(GroupsRelationView.class, MapUtils.flatBuilder(request.getParameterMap())
@@ -50,4 +72,82 @@ public class CmsGroupRelationController {
         schedulerService.assignUserGroupsRelation(groupsId);
         return GatewayResponse.SUCCESS.newBuilder().toResult("车队账号禁用成功");
     }
+
+    /**
+     * 代充平台 用户账号车票列表
+     */
+    @GetMapping("/get/recharge")
+    public Result<SearchResult<GroupsRelationRechargeView>> getRechargeList() {
+        SearchResult<GroupsRelationRechargeView> search = beanSearcher.search(GroupsRelationRechargeView.class, MapUtils.flatBuilder(request.getParameterMap())
+                .field(GroupsRelationRechargeView::getStatus, List.of(GroupsRelation.Status.validity.name(), GroupsRelation.Status.outside.name())).op(Operator.InList)
+                .field(GroupsRelationRechargeView::getSpecialType, GoodsDon.SpecialType.recharge.name())
+                .build());
+        return GatewayResponse.SUCCESS.newBuilder().toResult(search);
+    }
+
+    /**
+     * 代充账号 状态变更
+     */
+    @PostMapping("/set/recharge")
+    @Transactional(rollbackFor = Throwable.class)
+    public Result<String> updateRechargeStatus(@RequestBody GroupsRelationRechargeView rechargeView) {
+        long adminId = StpUtil.getLoginIdAsLong();
+        Long relationId = rechargeView.getRelationId();
+        GroupsRelation relation = groupsRelationMapper.selectById(relationId);
+        Assert.notNull(relation, "代充车票不存在");
+        if (relation.getRenewStatus() == null || relation.getRechargeStatus() == GroupsRelation.RechargeStatus.complete) {
+            throw BusinessRuntimeException.getInstance("");
+        }
+        CmsUser cmsUser = cmsUserMapper.selectById(adminId);
+        GroupsRelation.RechargeStatus relation_rechargeStatus = relation.getRechargeStatus();
+        GroupsRelation.RechargeStatus rechargeStatus = rechargeView.getRechargeStatus();
+        if (relation_rechargeStatus == rechargeStatus) {
+            throw BusinessRuntimeException.getInstance("状态重复");
+        }
+        relation.setRechargeStatus(rechargeStatus);
+        relation.setOperator(cmsUser.getNickname());
+        if (rechargeStatus == GroupsRelation.RechargeStatus.complete) {
+            relation.setSendTime(DateTime.now());
+            OrderDon orderDon = orderDonMapper.selectOne(Wrappers.lambdaQuery(OrderDon.class)
+                    .eq(OrderDon::getUserId, relation.getUserId())
+                    .eq(OrderDon::getRelationId, relationId)
+                    .notIn(OrderDon::getStatus, Constant.noOrderStatus)
+                    .orderByDesc(OrderDon::getId)
+                    .last("limit 1"));
+            if (orderDon == null) throw BusinessRuntimeException.getInstance("该代充订单不存在");
+            if (orderDon.getStatus() == OrderDon.Status.refund){
+                throw BusinessRuntimeException.getInstance("该代充订单已退款");
+            }
+            orderDon.setStatus(OrderDon.Status.complete);
+
+            orderDonMapper.updateById(orderDon);
+
+            relation.setStartTime(DateTime.now());
+            GoodsDonSku sku = goodsDonSkuMapper.selectById(orderDon.getSkuId());
+            DateTime expiryTime;
+            if (sku.getDays() != null && sku.getDays() > 0) {
+                expiryTime = DateUtil.offsetDay(relation.getStartTime(), sku.getDays());
+            } else {
+                expiryTime = DateUtil.offsetMonth(relation.getStartTime(), sku.getMonths());
+            }
+            relation.setExpiryTime(expiryTime);
+        }
+        groupsRelationMapper.updateById(relation);
+        return GatewayResponse.SUCCESS.newBuilder().toResult("状态修改成功");
+    }
+
+    /**
+     * 代充账号 待处理列表
+     */
+    @GetMapping("/get/recharge/waiting")
+    public Result<Boolean> getRechargeWaiting() {
+        Number number = beanSearcher.searchCount(GroupsRelationRechargeView.class, MapUtils.flatBuilder(request.getParameterMap())
+                .field(GroupsRelationRechargeView::getSpecialType, GoodsDon.SpecialType.recharge.name())
+                .field(GroupsRelationRechargeView::getRechargeStatus, GroupsRelation.RechargeStatus.waiting.name())
+                .build());
+        if (number.intValue() > 0) {
+            return GatewayResponse.SUCCESS.newBuilder().toResult(true);
+        }
+        return GatewayResponse.SUCCESS.newBuilder().toResult(false);
+    }
 }

+ 5 - 5
netflix-web/src/main/java/com/cyksj/web/controller/user/AuthorizationController.java

@@ -102,8 +102,8 @@ public class AuthorizationController {
             dsCode = dsCode.trim();
         }
         AuthRedirect redirect = new AuthRedirect().setMappingId(mappingId).setSharedId(sharedId).setDsType(dsType).setPid(popularizeId).setDsCode(dsCode)
-                .setCallback(callback)
-                .setCallbackType(callbackType);
+                .setCk(callback)
+                .setCt(callbackType);
         String state = Codec.DoBase64.custom().setData(Jsons.toJson(redirect)).encodeAsText();
 
         response.sendRedirect(authorizationService.createUrl(state, authType));
@@ -214,8 +214,8 @@ public class AuthorizationController {
             dsCode = dsCode.trim();
         }
         AuthRedirect redirect = new AuthRedirect().setMappingId(mappingId).setSharedId(sharedId).setDsType(dsType).setPid(popularizeId).setDsCode(dsCode)
-                .setCallback(callback)
-                .setCallbackType(callbackType);
+                .setCk(callback)
+                .setCt(callbackType);
         String state = Codec.DoBase64.custom().setData(Jsons.toJson(redirect)).encodeAsText();
         if (StrUtil.isEmpty(wxAuthUrl)) {
             wxAuthUrl = authorizationService.createWxAuthLoginUrl(state, false);
@@ -482,7 +482,7 @@ public class AuthorizationController {
         String json = Codec.DoBase64.custom().setData(state).decodeAsText();
         AuthRedirect re = Jsons.parseObject(json, AuthRedirect.class);
         //保存用户信息
-        User user = userService.saveAuth(userinfo, re.getSharedId(), re.getDsType(), re.getPid(), registerEnv, re.getDsCode(), re.getCallback(), re.getCallbackType());
+        User user = userService.saveAuth(userinfo, re.getSharedId(), re.getDsType(), re.getPid(), registerEnv, re.getDsCode(), re.getCk(), re.getCt());
         if (user == null) {
             throw BusinessRuntimeException.getInstance("系统错误,请重新授权");
         }