he2802 2 жил өмнө
parent
commit
fb7bdf212d

+ 29 - 5
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseServiceImpl.java

@@ -34,9 +34,11 @@ import com.zhongzheng.modules.goods.bo.GoodsBatchDelBo;
 import com.zhongzheng.modules.goods.domain.Goods;
 import com.zhongzheng.modules.goods.domain.GoodsCourse;
 import com.zhongzheng.modules.goods.domain.GoodsQuestionRel;
+import com.zhongzheng.modules.goods.domain.QuestionMerchant;
 import com.zhongzheng.modules.goods.service.IGoodsCourseService;
 import com.zhongzheng.modules.goods.service.IGoodsQuestionRelService;
 import com.zhongzheng.modules.goods.service.IGoodsService;
+import com.zhongzheng.modules.goods.service.IQuestionMerchantService;
 import com.zhongzheng.modules.goods.vo.GoodsPeriodStatusVo;
 import com.zhongzheng.modules.goods.vo.GoodsPeriodVo;
 import com.zhongzheng.modules.goods.vo.GoodsUserVo;
@@ -137,6 +139,8 @@ public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> impleme
     private IGoodsService iGoodsService;
     @Autowired
     private IGoodsQuestionRelService iGoodsQuestionRelService;
+    @Autowired
+    private IQuestionMerchantService iQuestionMerchantService;
 
 
 
@@ -610,22 +614,42 @@ public class CourseServiceImpl extends ServiceImpl<CourseMapper, Course> impleme
                         goodsUserVo.setBeforeEndTime(examBefore.getBeforeEndTime());
                     }
                 }
+            }
+
+            //预约考试是否可以购买题库(该商品没有关联题库且预约考试的时间提前8天)
 
-                //预约考试是否可以购买题库(该商品没有关联题库且预约考试的时间提前8天)
+            UserSubscribe userSubscribeTwo = iUserSubscribeService.getOne(new LambdaQueryWrapper<UserSubscribe>()
+            .eq(UserSubscribe::getOrderGoodsId,goodsUserVo.getOrderGoodsId())
+            .eq(UserSubscribe::getSubscribeStatus,1)
+            .eq(UserSubscribe::getExamStatus,0)
+            .last("limit 1"));
+            if (ObjectUtils.isNotNull(userSubscribeTwo)){
                 Goods goods = iGoodsService.getById(goodsUserVo.getGoodsId());
                 if (ObjectUtils.isNull(goods.getQuestionGoodsId())){
                     //没有关联题库 是否购买过题库
                     int count = iGoodsQuestionRelService.count(new LambdaQueryWrapper<GoodsQuestionRel>()
-                            .eq(GoodsQuestionRel::getOrderGoodsId, userSubscribe.getOrderGoodsId())
-                            .eq(GoodsQuestionRel::getQuestionGoodsId, goods.getQuestionGoodsId())
+                            .eq(GoodsQuestionRel::getOrderGoodsId, userSubscribeTwo.getOrderGoodsId())
                             .eq(GoodsQuestionRel::getStatus, 1)
                             .gt(GoodsQuestionRel::getQuestionDoNum, 0));
                     if (count <= 0){
                         //考试时间往前推8天
-                        Long appointTime = DateUtils.getDayBefore(userSubscribe.getApplySiteExamTime(), 8);
+                        Long appointTime = DateUtils.getDayBefore(userSubscribeTwo.getApplySiteExamTime(), 8);
                         if (DateUtils.getNowTime() < appointTime){
                             goodsUserVo.setOpenQuestion(1);
-                            goodsUserVo.setQuestionGoodsId(goods.getQuestionGoodsId());
+                            //获取默认题库商家商品
+                            QuestionMerchant one = iQuestionMerchantService.getOne(new LambdaQueryWrapper<QuestionMerchant>()
+                                    .eq(QuestionMerchant::getSign, 1)
+                                    .eq(QuestionMerchant::getStatus, 1)
+                                    .last("limit 1"));
+                            if (ObjectUtils.isNotNull(one)){
+                                Goods goodsOne = iGoodsService.getOne(new LambdaQueryWrapper<Goods>()
+                                        .eq(Goods::getQuestionMerchantId, one.getMerchantId())
+                                        .eq(Goods::getStatus, 1)
+                                        .last("limit 1"));
+                                if (ObjectUtils.isNotNull(goodsOne)){
+                                    goodsUserVo.setQuestionGoodsId(goodsOne.getGoodsId());
+                                }
+                            }
                         }
                     }
                 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/domain/QuestionMerchant.java

@@ -35,5 +35,7 @@ private static final long serialVersionUID=1L;
     /** 更新时间 */
     private Long updateTime;
     private Long tenantId;
+    /**  是否默认商家标记:1是 0否 */
+    private Integer sign;
 
 }

+ 1 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/settle/domian/TopInstSettle.java

@@ -44,7 +44,7 @@ public class TopInstSettle implements Serializable {
     private Long instTpId;
     /** 供应商成本分类id */
     private Long costCatId;
-    /** 审核状态:1待提交 2审核中 3未通过 4待支付 5支付失败 6已结算*/
+    /** 审核状态:1待提交 2审核中 3未通过 4待支付 5支付失败 6已结算 8支付中*/
     private Integer checkStatus;
     /** 1有效 0草稿 */
     private Integer status;

+ 78 - 18
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/settle/service/impl/ITopInstSettleServiceImpl.java

@@ -310,7 +310,8 @@ public class ITopInstSettleServiceImpl extends ServiceImpl<TopInstSettleMapper,
                                 //订单金额
                                 Long orderGoodsId = orderGoodsIds.stream().filter(item -> {
                                     TopOldOrderGoods one = topOldOrderGoodsService.getById(item);
-                                    return EncryptHandler.decrypt(one.getUserCard()).equals(bo.getUserCard()) && one.getUserName().equals(bo.getUserName());
+                                    String decrypt = EncryptHandler.decrypt(one.getUserCard());
+                                    return decrypt.equals(bo.getUserCard()) && one.getUserName().equals(bo.getUserName());
                                 }).findFirst().orElse(null);
                                 if (ObjectUtils.isNotNull(orderGoodsId)){
                                     TopOldOrderGoods orderGoods = topOldOrderGoodsService.getById(orderGoodsId);
@@ -403,6 +404,11 @@ public class ITopInstSettleServiceImpl extends ServiceImpl<TopInstSettleMapper,
     }
 
     private void createCheckLog(String settleSn,Long loginId,String loginName){
+        //当前创建人的角色
+        List<TopSysUserRole> userRoles = topSysUserRoleService
+                .list(new LambdaQueryWrapper<TopSysUserRole>()
+                        .eq(TopSysUserRole::getUserId, loginId));
+
         List<TopOldOrderCheckLog> checkLogListTwo = topOldOrderCheckLogService
                 .list(new LambdaQueryWrapper<TopOldOrderCheckLog>()
                 .eq(TopOldOrderCheckLog::getOrderSn, settleSn)
@@ -410,19 +416,35 @@ public class ITopInstSettleServiceImpl extends ServiceImpl<TopInstSettleMapper,
         if (CollectionUtils.isNotEmpty(checkLogListTwo)){
             //重新提交重置审核流程
             checkLogListTwo.forEach(item -> {
-                if (item.getType() == 8){
-                    item.setCheckStatus(2);
+                if (userRoles.stream().anyMatch(x -> x.getRoleId().equals(item.getRoleId())) && item.getType() == 7){
+                    //创建人包含审核角色(跳过审核)
+                    item.setCheckStatus(1);
+                    item.setCheckTime(DateUtils.getNowTime());
+                    item.setCheckUsername(loginName);
                 }else {
-                    item.setCheckStatus(0);
+                    item.setCheckStatus(item.getType() == 7?0:2);
                 }
             });
             topOldOrderCheckLogService.updateBatchById(checkLogListTwo);
+            //当前审核标签
+            TopOldOrderCheckLog checkLog = checkLogListTwo.stream()
+                    .filter(x -> x.getCheckStatus() != 1).sorted(Comparator.comparing(TopOldOrderCheckLog::getCheckSort)).findFirst().orElse(null);
+            checkLog.setCheckSign(1);
+            topOldOrderCheckLogService.updateById(checkLog);
+            //订单审核状态
+            Integer checkStatus = 2;//审核流程
+            for (TopOldOrderCheckLog item : checkLogListTwo) {
+                if (item.getId().equals(checkLog.getId()) && item.getType() == 8 ){
+                    checkStatus = 4;//待支付
+                }
+            }
             update(new LambdaUpdateWrapper<TopInstSettle>()
-                    .eq(TopInstSettle::getSettleSn,settleSn)
-                    .set(TopInstSettle::getCheckStatus,2)//审核流程
-                    .eq(TopInstSettle::getStatus,1));
+                    .set(TopInstSettle::getCheckStatus,checkStatus)
+                    .set(TopInstSettle::getStatus,1)
+                    .eq(TopInstSettle::getSettleSn,settleSn));
             return;
         }
+
         //获取审核和支付流程
         List<TopOldOrderCheck> list = topOldOrderCheckService
                 .list(new LambdaQueryWrapper<TopOldOrderCheck>()
@@ -432,10 +454,7 @@ public class ITopInstSettleServiceImpl extends ServiceImpl<TopInstSettleMapper,
         if (CollectionUtils.isEmpty(list)){
             throw new CustomException("请先配置供应商结算的审核流程!");
         }
-        //当前创建人的角色
-        List<TopSysUserRole> userRoles = topSysUserRoleService
-                .list(new LambdaQueryWrapper<TopSysUserRole>()
-                        .eq(TopSysUserRole::getUserId, loginId));
+
         List<TopOldOrderCheckLog> checkLogList = new ArrayList<>();
         for (TopOldOrderCheck orderCheck : list) {
             TopOldOrderCheckLog checkLog = new TopOldOrderCheckLog();
@@ -519,6 +538,7 @@ public class ITopInstSettleServiceImpl extends ServiceImpl<TopInstSettleMapper,
         if (CollectionUtils.isEmpty(settleVos)){
             return new ArrayList<>();
         }
+        List<TopSysUserRole> roleListTwo = topSysUserRoleService.list(new LambdaQueryWrapper<TopSysUserRole>().eq(TopSysUserRole::getUserId, bo.getLoginId()));
         //审核角色和审核时间
         settleVos.forEach(item -> {
             if (item.getCheckStatus() == 3){
@@ -534,6 +554,7 @@ public class ITopInstSettleServiceImpl extends ServiceImpl<TopInstSettleMapper,
                     TopSysRole role = topSysRoleService.getById(refundLog.getRoleId());
                     item.setCheckRole(role.getRoleName());
                     item.setCheckTime(refundLog.getCheckTime());
+                    item.setCheckReason(refundLog.getCheckReason());
                 }
             }else {
                 TopOldOrderCheckLog checkLog = topOldOrderCheckLogService
@@ -558,8 +579,11 @@ public class ITopInstSettleServiceImpl extends ServiceImpl<TopInstSettleMapper,
                             item.setCheckTime(checkLogTwo.getCheckTime());
                         }
                     }
-                    if (CollectionUtils.isNotEmpty(bo.getRoleIds()) && bo.getRoleIds().contains(checkLog.getRoleId())){
-                        item.setCheckStatus(7);
+                    if (CollectionUtils.isNotEmpty(roleListTwo) && checkLog.getCheckStatus() != 2){
+                        List<Long> collect = roleListTwo.stream().map(TopSysUserRole::getRoleId).collect(Collectors.toList());
+                        if (CollectionUtils.isNotEmpty(collect) && collect.contains(checkLog.getRoleId())){
+                            item.setCheckStatus(7);
+                        }
                     }
                 }
             }
@@ -882,6 +906,8 @@ public class ITopInstSettleServiceImpl extends ServiceImpl<TopInstSettleMapper,
         if (ObjectUtils.isNull(settle)){
             throw new CustomException("结算单信息获取失败!");
         }
+        //支付权限校验
+        settlePayCheck(bo,settle);
         if (ObjectUtils.isNotNull(settle.getSettleMoney()) && settle.getSettleMoney().compareTo(BigDecimal.ZERO) > 0){
             TopInstitution institution = topInstitutionService.getById(settle.getInstId());
             //打款
@@ -920,17 +946,21 @@ public class ITopInstSettleServiceImpl extends ServiceImpl<TopInstSettleMapper,
             String path = OLD_SYS_HOST + "/WitSystem/BussinessApi/NeedToPay";
             try {
                 respone = HttpUtils.postFormBody(path, params);
-                if (!respone.contains("\"Status\":true")) {
+                if (respone.contains("\"Status\":true")) {
+                    //支付中
+                    settle.setCheckStatus(8);
+                    updateById(settle);
+                }else {
                     //支付失败
                     settle.setCheckStatus(5);
                     updateById(settle);
-                    throw new CustomException("供应商结算支付请求错误" + respone);
+                    log.error("供应商结算支付请求错误" + respone);
                 }
             } catch (IOException e) {
                 //支付失败
                 settle.setCheckStatus(5);
                 updateById(settle);
-                throw new CustomException("供应商结算支付请求错误" + e.getMessage());
+                log.error("供应商结算支付请求错误" + respone);
             }
             topOrderBankPayService.save(add);
             return true;
@@ -941,6 +971,30 @@ public class ITopInstSettleServiceImpl extends ServiceImpl<TopInstSettleMapper,
         return updateById(settle);
     }
 
+    private void settlePayCheck(SettlePayBo bo,TopInstSettle settle) {
+        TopOldOrderCheckLog checkLog = topOldOrderCheckLogService.getOne(new LambdaQueryWrapper<TopOldOrderCheckLog>()
+                .eq(TopOldOrderCheckLog::getOrderSn, settle.getSettleSn())
+                .eq(TopOldOrderCheckLog::getStatus, 1)
+                .eq(TopOldOrderCheckLog::getCheckSign, 1)
+                .last("limit 1"));
+        if (ObjectUtils.isNull(checkLog)){
+            throw new CustomException("当前订单不在支付流程中,请检查!");
+        }
+        if (ObjectUtils.isNull(checkLog.getCheckStatus()) && checkLog.getCheckStatus() != 2){
+            throw new CustomException("当前订单不在支付流程中,请检查!");
+        }
+        List<TopSysUserRole> roleList = topSysUserRoleService
+                .list(new LambdaQueryWrapper<TopSysUserRole>()
+                .eq(TopSysUserRole::getUserId, bo.getLoginId()));
+        if (CollectionUtils.isEmpty(roleList)){
+            throw new CustomException("当前账号没有审核权限!");
+        }
+        List<Long> collect = roleList.stream().map(TopSysUserRole::getRoleId).collect(Collectors.toList());
+        if (!collect.contains(checkLog.getRoleId())){
+            throw new CustomException("当前账号没有审核权限!");
+        }
+    }
+
     @Override
     public SettleReceiptsVo getSettleReceipts(Long settleId) {
         TopInstSettle instSettle = getById(settleId);
@@ -1107,12 +1161,18 @@ public class ITopInstSettleServiceImpl extends ServiceImpl<TopInstSettleMapper,
             Order order = orderService.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderSn, bo.getOrderSn()));
             User user = userService.getById(order.getUserId());
             if (!EncryptHandler.decrypt(user.getIdCard()).equals(bo.getUserCard())){
-                throw new CustomException(String.format("订单【%s】和学员【%s】不匹配,请检查!",bo.getOrderSn(),bo.getUserName()));
+                throw new CustomException(String.format("订单【%s】和学员【%s】身份证不匹配,请检查!",bo.getOrderSn(),bo.getUserName()));
+            }
+            if (!user.getRealname().equals(bo.getUserName())){
+                throw new CustomException(String.format("订单【%s】和学员【%s】名称不匹配,请检查!",bo.getOrderSn(),bo.getUserName()));
             }
         }else {
             List<TopOldOrderGoods> list = topOldOrderGoodsService.list(new LambdaQueryWrapper<TopOldOrderGoods>().eq(TopOldOrderGoods::getOrderSn, bo.getOrderSn()));
             if (list.stream().noneMatch(item -> EncryptHandler.decrypt(item.getUserCard()).equals(bo.getUserCard()))){
-                throw new CustomException(String.format("订单【%s】和学员【%s】不匹配,请检查!",bo.getOrderSn(),bo.getUserName()));
+                throw new CustomException(String.format("订单【%s】和学员【%s】身份证不匹配,请检查!",bo.getOrderSn(),bo.getUserName()));
+            }
+            if (list.stream().noneMatch(item -> item.getUserName().equals(bo.getUserName()))){
+                throw new CustomException(String.format("订单【%s】和学员【%s】名称不匹配,请检查!",bo.getOrderSn(),bo.getUserName()));
             }
         }
 

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/settle/vo/SettleVo.java

@@ -63,6 +63,9 @@ public class SettleVo implements Serializable {
     @ApiModelProperty("审核时间")
     private Long checkTime;
 
+    @ApiModelProperty("审核意见")
+    private String checkReason;
+
     @ApiModelProperty("备注")
     private String remark;