he2802 2 years ago
parent
commit
d761cccf9c
17 changed files with 551 additions and 19 deletions
  1. 51 3
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/settle/TopInstSettleController.java
  2. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/Order.java
  3. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/domain/TopOldOrder.java
  4. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/mapper/TopOldOrderMapper.java
  5. 89 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/service/impl/TopOldOrderServiceImpl.java
  6. 1 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/domain/TopOrderBankPay.java
  7. 1 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/settle/bo/CheckSettleBo.java
  8. 23 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/settle/bo/SettlePayBo.java
  9. 1 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/settle/bo/TimeSettleBo.java
  10. 3 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/settle/domian/TopInstSettle.java
  11. 10 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/settle/service/ITopInstSettleService.java
  12. 278 10
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/settle/service/impl/ITopInstSettleServiceImpl.java
  13. 70 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/settle/vo/SettleReceiptsVo.java
  14. 6 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/settle/vo/SettleVo.java
  15. 1 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/settle/vo/TimeSettleDetailVo.java
  16. 1 1
      zhongzheng-system/src/main/resources/mapper/modules/settle/ExamActivityMapper.xml
  17. 4 0
      zhongzheng-system/src/main/resources/mapper/modules/top/TopOldOrderMapper.xml

+ 51 - 3
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/settle/TopInstSettleController.java

@@ -11,11 +11,9 @@ import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.utils.ServletUtils;
 import com.zhongzheng.common.utils.poi.ExcelUtil;
 import com.zhongzheng.framework.web.service.TopTokenService;
-import com.zhongzheng.modules.top.goods.vo.TopOldOrderVo;
 import com.zhongzheng.modules.top.settle.bo.*;
 import com.zhongzheng.modules.top.settle.service.ITopInstSettleService;
 import com.zhongzheng.modules.top.settle.vo.*;
-import com.zhongzheng.modules.user.bo.UserImportAddBo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
@@ -23,7 +21,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
-import javax.validation.Valid;
 import java.math.BigDecimal;
 import java.util.Collections;
 import java.util.List;
@@ -195,4 +192,55 @@ public class TopInstSettleController extends BaseController {
         return toAjax(ITopInstSettleService.checkSettle(bo) ? 1 : 0);
     }
 
+    /**
+     * 结算单总金额
+     */
+    @ApiOperation("结算单总金额")
+    @PostMapping("/total/money")
+    public AjaxResult<BigDecimal> getSettleTotalMoney(SettleQueryBo bo) {
+        TopLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setLoginId(loginUser.getUser().getUserId());
+        bo.setLoginName(loginUser.getUser().getUserName());
+        return AjaxResult.success(ITopInstSettleService.getSettleTotalMoney(bo));
+    }
+
+    /**
+     * 结算单支付信息
+     */
+    @ApiOperation("结算单支付信息")
+    @GetMapping("/pay/info/{settleId}")
+    public AjaxResult<SettleVo> getSettlePayInfo(@PathVariable("settleId") Long settleId) {
+        return AjaxResult.success(ITopInstSettleService.getSettlePayInfo(settleId));
+    }
+
+    /**
+     * 结算单支付
+     */
+    @ApiOperation("结算单支付")
+    @PostMapping("/pay")
+    public AjaxResult<Void> settlePay(@RequestBody SettlePayBo bo) {
+        TopLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        bo.setLoginId(loginUser.getUser().getUserId());
+        bo.setLoginName(loginUser.getUser().getUserName());
+        return toAjax(ITopInstSettleService.settlePay(bo) ? 1 : 0);
+    }
+
+    /**
+     * 结算单据打印信息
+     */
+    @ApiOperation("结算单据打印信息")
+    @GetMapping("/receipts/{settleId}")
+    public AjaxResult<SettleReceiptsVo> getSettleReceipts(@PathVariable("settleId") Long settleId) {
+        return AjaxResult.success(ITopInstSettleService.getSettleReceipts(settleId));
+    }
+
+    /**
+     * 结算单据打印明细信息
+     */
+    @ApiOperation("结算单据打印明细信息")
+    @GetMapping("/receipts/detail/{settleId}")
+    public AjaxResult<List<NumSettleOrderVo>> getSettleReceiptsDetail(@PathVariable("settleId") Long settleId) {
+        return AjaxResult.success(ITopInstSettleService.getSettleReceiptsDetail(settleId));
+    }
+
 }

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/Order.java

@@ -180,5 +180,9 @@ private static final long serialVersionUID=1L;
     /** 旧机构ID */
     private String oldInstitutionId;
     private String oldCustomerId;
+    /** 供应商成本 */
+    private BigDecimal instCost;
+    /** 运营类型:1代运营 2独立运营 */
+    private Integer operationType;
 
 }

+ 5 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/domain/TopOldOrder.java

@@ -154,4 +154,9 @@ private static final long serialVersionUID=1L;
 
     /** 业务员备注 */
     private String financeRemark;
+
+    /** 供应商成本 */
+    private BigDecimal instCost;
+    /** 运营类型:1代运营 2独立运营 */
+    private Integer operationType;
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/mapper/TopOldOrderMapper.java

@@ -50,4 +50,7 @@ public interface TopOldOrderMapper extends BaseMapper<TopOldOrder> {
     List<TopOldOrderRefundVo> getRefundOrder(@Param("orderSn") String orderSn);
 
     List<TopOldOrderRefundVo> getRefundOrderByBo(RefundOrderBo refundOrderBo);
+
+    List<Long> getOrderSnByBusiness(@Param("businessName")String businessName);
+
 }

+ 89 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/service/impl/TopOldOrderServiceImpl.java

@@ -60,6 +60,10 @@ import com.zhongzheng.modules.top.order.vo.TopOldOrderCommissionExportVo;
 import com.zhongzheng.modules.top.order.vo.TopOldOrderCompanyExportVo;
 import com.zhongzheng.modules.top.order.vo.TopOldOrderExportVo;
 import com.zhongzheng.modules.top.order.vo.TopOldOrderSellerExportVo;
+import com.zhongzheng.modules.top.settle.domian.TopInstSettle;
+import com.zhongzheng.modules.top.settle.domian.TopInstSettleRelaiton;
+import com.zhongzheng.modules.top.settle.service.ITopInstSettleRelationService;
+import com.zhongzheng.modules.top.settle.service.ITopInstSettleService;
 import com.zhongzheng.modules.top.user.domain.TopSysUserRole;
 import com.zhongzheng.modules.top.user.service.ITopSysConfigService;
 import com.zhongzheng.modules.top.user.service.ITopSysRoleService;
@@ -134,6 +138,9 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
     @Autowired
     private ITopOldOrderRefundService topOldOrderRefundService;
 
+    @Autowired
+    private ITopOldOrderService topOldOrderService;
+
     @Autowired
     private IOrderService orderService;
 
@@ -200,6 +207,12 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
     @Autowired
     private ITopNuoMplatformLogService topNuoMplatformLogService;
 
+    @Autowired
+    private ITopInstSettleService topInstSettleService;
+
+    @Autowired
+    private ITopInstSettleRelationService topInstSettleRelationService;
+
     @Value("${oldOrder.studyRecord}")
     private String ORDER_STUDY;
 
@@ -3375,6 +3388,82 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
             iTopOrderBankPayService.updateById(bankPay);
             iTopDivideLogService.updateById(divideLog);
             return true;
+        }else if (bankPay.getType() == 3){
+            //供应商结算
+            TopInstSettle settle = topInstSettleService.getOne(new LambdaQueryWrapper<TopInstSettle>().eq(TopInstSettle::getSettleSn, bankPay.getOrderSn()));
+            if (ObjectUtils.isNull(settle)){
+                log.error("结算单网银支付回调错误:结算单获取有误,"+settle.getSettleSn());
+                throw new CustomException("结算单获取有误");
+            }
+            switch (settle.getSettleType()){
+                case 1://数量供应商结算单
+                    List<TopInstSettleRelaiton> relaitonList = topInstSettleRelationService
+                            .list(new LambdaQueryWrapper<TopInstSettleRelaiton>()
+                            .eq(TopInstSettleRelaiton::getSettleId, settle.getSettleId())
+                            .eq(TopInstSettleRelaiton::getStatus, 1));
+                    if (CollectionUtils.isNotEmpty(relaitonList)){
+                        relaitonList.forEach(item -> {
+                            if (item.getOrderFrom() == 1){
+                                Order order = orderService.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderSn, item.getOrderSn()));
+                                order.setInstCost(order.getInstCost().add(item.getSettleMoney()));
+                                orderService.updateById(order);
+                            }else {
+                                TopOldOrder oldOrder = topOldOrderService.getOne(new LambdaQueryWrapper<TopOldOrder>().eq(TopOldOrder::getOrderSn, item.getOrderSn()));
+                                oldOrder.setInstCost(oldOrder.getInstCost().add(item.getSettleMoney()));
+                                topOldOrderService.updateById(oldOrder);
+                            }
+                        });
+                    }
+                    settle.setPayTime(DateUtils.getNowTime());
+                    settle.setCheckStatus(6);//已结算
+                    topInstSettleService.updateById(settle);
+                    break;
+                case 2://时间供应商结算单
+                    TopCourseEducationType educationType = topCourseEducationTypeService.getById(settle.getEducationTypeId());
+                    TopCourseProjectType projectType = topCourseProjectTypeService.getById(settle.getProjectId());
+                    TopCourseBusiness business = topCourseBusinessService.getById(settle.getBusinessId());
+                    String businessName = educationType.getEducationName()+business.getBusinessName()+projectType.getProjectName();
+                    List<Long> orderSns = baseMapper.getOrderSnByBusiness(businessName);
+                    if (CollectionUtils.isNotEmpty(orderSns)){
+                        List<TopOldOrder> oldOrderList = topOldOrderService
+                                .list(new LambdaQueryWrapper<TopOldOrder>()
+                                .in(TopOldOrder::getOrderSn, orderSns)
+                                .eq(ObjectUtils.isNotNull(settle.getSettleOrderType()) && settle.getSettleOrderType() != 3,
+                                        TopOldOrder::getOperationType, settle.getSettleOrderType())
+                                .eq(TopOldOrder::getStatus, 1)
+                                .eq(TopOldOrder::getCheckStatus, 1)
+                                .ge(TopOldOrder::getCheckTime, settle.getSignStartTime())
+                                .le(TopOldOrder::getCheckTime, settle.getSignEndTime()));
+
+                        List<Order> orderList = orderService
+                                .list(new LambdaQueryWrapper<Order>()
+                                        .in(Order::getOrderSn, orderSns)
+                                        .eq(ObjectUtils.isNotNull(settle.getSettleOrderType()) && settle.getSettleOrderType() != 3,
+                                                Order::getOperationType, settle.getSettleOrderType())
+                                        .eq(Order::getStatus, 1)
+                                        .eq(Order::getCheckStatus, 1)
+                                        .ge(Order::getAccomplishTime, settle.getSignStartTime())
+                                        .le(Order::getAccomplishTime, settle.getSignEndTime()));
+
+                       Integer num = oldOrderList.size() + orderList.size();
+                       if (num > 0){
+                           //平摊结算金额
+                           BigDecimal money = settle.getSettleMoney().divide(new BigDecimal(num));
+                           if (CollectionUtils.isNotEmpty(oldOrderList)){
+                               oldOrderList.forEach(x -> x.setInstCost(x.getInstCost().add(money)));
+                               topOldOrderService.updateBatchById(oldOrderList);
+                           }
+                           if (CollectionUtils.isNotEmpty(orderList)){
+                               orderList.forEach(x -> x.setInstCost(x.getInstCost().add(money)));
+                               orderService.updateBatchById(orderList);
+                           }
+                       }
+                    }
+                    settle.setPayTime(DateUtils.getNowTime());
+                    settle.setCheckStatus(6);//已结算
+                    topInstSettleService.updateById(settle);
+                    break;
+            }
         }
 
         return true;

+ 1 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/domain/TopOrderBankPay.java

@@ -30,7 +30,7 @@ private static final long serialVersionUID=1L;
     private String paySn;
     /** 订单号 */
     private String orderSn;
-    /** 类型:1分成,2退款 */
+    /** 类型:1分成,2退款,3供应商结算 */
     private Integer type;
     /** 银行账号 */
     private String toBankAcount;

+ 1 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/settle/bo/CheckSettleBo.java

@@ -21,7 +21,7 @@ public class CheckSettleBo implements Serializable {
     private Integer checkResult;
 
     @ApiModelProperty("审核意见")
-    private Integer checkReason;
+    private String checkReason;
 
     private Long loginId;
 

+ 23 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/settle/bo/SettlePayBo.java

@@ -0,0 +1,23 @@
+package com.zhongzheng.modules.top.settle.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2023年07月26日 17:49
+ */
+@Data
+@ApiModel("结算单支付Bo")
+public class SettlePayBo implements Serializable {
+
+    @ApiModelProperty("结算单ID")
+    private Long settleId;
+
+    private Long loginId;
+
+    private String loginName;
+}

+ 1 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/settle/bo/TimeSettleBo.java

@@ -62,7 +62,7 @@ public class TimeSettleBo implements Serializable {
     @ApiModelProperty("签约结束时间")
     private Long signEndTime;
 
-    @ApiModelProperty("结算订单类型:1全部 2代运营订单 3独立订单")
+    @ApiModelProperty("结算订单类型:1代运营订单 2独立订单 3全部")
     private Integer settleOrderType;
 
 }

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

@@ -62,8 +62,10 @@ public class TopInstSettle implements Serializable {
     private Long signStartTime;
     /** 签约结束时间 */
     private Long signEndTime;
-    /** 结算订单类型:1全部 2代运营订单 3独立订单 */
+    /** 结算订单类型:1代运营订单 2独立订单 3全部 */
     private Integer settleOrderType;
+    /** 支付时间 */
+    private Long payTime;
 
 
 }

+ 10 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/settle/service/ITopInstSettleService.java

@@ -35,4 +35,14 @@ public interface ITopInstSettleService extends IService<TopInstSettle> {
     boolean batchDeleteSettle(List<Long> settleIds);
 
     boolean checkSettle(CheckSettleBo bo);
+
+    BigDecimal getSettleTotalMoney(SettleQueryBo bo);
+
+    SettleVo getSettlePayInfo(Long settleId);
+
+    boolean settlePay(SettlePayBo bo);
+
+    SettleReceiptsVo getSettleReceipts(Long settleId);
+
+    List<NumSettleOrderVo> getSettleReceiptsDetail(Long settleId);
 }

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

@@ -1,7 +1,9 @@
 package com.zhongzheng.modules.top.settle.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
@@ -11,6 +13,8 @@ import com.zhongzheng.common.core.domain.entity.TopSysRole;
 import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.type.EncryptHandler;
 import com.zhongzheng.common.utils.DateUtils;
+import com.zhongzheng.common.utils.ToolsUtils;
+import com.zhongzheng.common.utils.http.HttpUtils;
 import com.zhongzheng.modules.goods.domain.Goods;
 import com.zhongzheng.modules.goods.service.IGoodsService;
 import com.zhongzheng.modules.order.domain.Order;
@@ -23,6 +27,8 @@ import com.zhongzheng.modules.top.financial.service.ITopCostInstTpItemService;
 import com.zhongzheng.modules.top.financial.service.ITopCostInstTpService;
 import com.zhongzheng.modules.top.goods.domain.*;
 import com.zhongzheng.modules.top.goods.service.*;
+import com.zhongzheng.modules.top.order.domain.TopOrderBankPay;
+import com.zhongzheng.modules.top.order.service.ITopOrderBankPayService;
 import com.zhongzheng.modules.top.settle.bo.*;
 import com.zhongzheng.modules.top.settle.domian.TopInstSettle;
 import com.zhongzheng.modules.top.settle.domian.TopInstSettleRelaiton;
@@ -40,14 +46,13 @@ import com.zhongzheng.modules.top.user.service.ITopSysUserRoleService;
 import com.zhongzheng.modules.user.domain.User;
 import com.zhongzheng.modules.user.service.IUserService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.io.IOException;
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -93,6 +98,10 @@ public class ITopInstSettleServiceImpl extends ServiceImpl<TopInstSettleMapper,
     private ITopInstitutionService topInstitutionService;
     @Autowired
     private ITopInstCategoryService topInstCategoryService;
+    @Autowired
+    private ITopOrderBankPayService topOrderBankPayService;
+    @Value("${oldSys.host}")
+    private String OLD_SYS_HOST;
 
 
     @Override
@@ -140,7 +149,8 @@ public class ITopInstSettleServiceImpl extends ServiceImpl<TopInstSettleMapper,
             //旧系统订单
             List<TopOldOrderGoods> list = topOldOrderGoodsService
                     .list(new LambdaQueryWrapper<TopOldOrderGoods>()
-                    .eq(TopOldOrderGoods::getOrderSn, bo.getOrderSn()));
+                    .eq(TopOldOrderGoods::getOrderSn, bo.getOrderSn())
+                    .eq(TopOldOrderGoods::getStatus,1));
             if (CollectionUtils.isNotEmpty(list)){
                 List<TopOrderStudyInfoVo> infoVoList = list.stream().map(item -> {
                     TopOrderStudyInfoVo studyInfoVo = new TopOrderStudyInfoVo();
@@ -347,6 +357,17 @@ public class ITopInstSettleServiceImpl extends ServiceImpl<TopInstSettleMapper,
         entity.setCreateTime(DateUtils.getNowTime());
         entity.setUpdateTime(DateUtils.getNowTime());
         entity.setCheckStatus(1);
+        entity.setCreateBy(bo.getLoginName());
+        entity.setCreateUserId(bo.getLoginId());
+        //供应商默认结算成本模板
+        TopCostInstTp costInstTp = topCostInstTpService
+                .getOne(new LambdaQueryWrapper<TopCostInstTp>()
+                .eq(TopCostInstTp::getInstId, bo.getInstId())
+                .eq(TopCostInstTp::getDefaultStatus, 1)
+                .eq(TopCostInstTp::getStatus, 1));
+        if (ObjectUtils.isNotNull(costInstTp)){
+            entity.setInstTpId(costInstTp.getTpId());
+        }
         save(entity);
         //结算订单信息
         if (CollectionUtils.isNotEmpty(bo.getSettleOrders())){
@@ -387,7 +408,7 @@ public class ITopInstSettleServiceImpl extends ServiceImpl<TopInstSettleMapper,
             checkLog.setRoleId(orderCheck.getCheckRole());
             checkLog.setType(orderCheck.getCheckType());
             checkLog.setCheckSort(orderCheck.getCheckSort());
-            checkLog.setCheckFrom(5);//供应商结算
+            checkLog.setCheckFrom(4);//供应商结算
             checkLog.setOrderSn(settleSn);
             checkLog.setCreateTime(DateUtils.getNowTime());
             checkLog.setUpdateTime(DateUtils.getNowTime());
@@ -434,6 +455,17 @@ public class ITopInstSettleServiceImpl extends ServiceImpl<TopInstSettleMapper,
         entity.setCreateTime(DateUtils.getNowTime());
         entity.setUpdateTime(DateUtils.getNowTime());
         entity.setCheckStatus(1);
+        entity.setCreateBy(bo.getLoginName());
+        entity.setCreateUserId(bo.getLoginId());
+        //供应商默认结算成本模板
+        TopCostInstTp costInstTp = topCostInstTpService
+                .getOne(new LambdaQueryWrapper<TopCostInstTp>()
+                        .eq(TopCostInstTp::getInstId, bo.getInstId())
+                        .eq(TopCostInstTp::getDefaultStatus, 1)
+                        .eq(TopCostInstTp::getStatus, 1));
+        if (ObjectUtils.isNotNull(costInstTp)){
+            entity.setInstTpId(costInstTp.getTpId());
+        }
         save(entity);
         if (bo.getStatus() == 1){
             //提交审核
@@ -634,7 +666,7 @@ public class ITopInstSettleServiceImpl extends ServiceImpl<TopInstSettleMapper,
             //提交审核
             createCheckLog(entity.getSettleSn(),bo.getLoginId(),bo.getLoginName());
         }
-        return false;
+        return true;
     }
 
     @Override
@@ -669,12 +701,12 @@ public class ITopInstSettleServiceImpl extends ServiceImpl<TopInstSettleMapper,
                 relaitonList.forEach(x -> x.setStatus(-1));
                 topInstSettleRelationService.updateBatchById(relaitonList);
             }
-
         }
-        return false;
+        return true;
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public boolean checkSettle(CheckSettleBo bo) {
         //审核校验
         TopInstSettle settle = getById(bo.getSettleId());
@@ -700,14 +732,250 @@ public class ITopInstSettleServiceImpl extends ServiceImpl<TopInstSettleMapper,
         if (roleIds.stream().noneMatch(x -> x.equals(checkLog.getRoleId())) && !"admin".equals(bo.getLoginName())){
             throw new CustomException("当前账号没有审核权限!");
         }
+
+        //创建结算单的角色
+        List<TopSysUserRole> settleRoleList = topSysUserRoleService
+                .list(new LambdaQueryWrapper<TopSysUserRole>().eq(TopSysUserRole::getUserId, settle.getCreateUserId()));
+
         switch (bo.getCheckResult()){
             case 1://审核通过
+                checkLog.setCheckStatus(1);
+                checkLog.setCheckTime(DateUtils.getNowTime());
+                checkLog.setCheckSign(0);
+                checkLog.setCheckUsername(bo.getLoginName());
+                //获取下一个审核节点
+                TopOldOrderCheckLog checkLogTwo = getNextCheck(settleRoleList,checkLog.getCheckSort() + 1,settle.getSettleSn());
+                checkLogTwo.setCheckSign(1);
+                topOldOrderCheckLogService.updateById(checkLogTwo);
+                if (checkLogTwo.getType() == 8){
+                    //结算支付流程
+                    settle.setCheckStatus(4);//待支付
+                    updateById(settle);
+                }
+                break;
+            case 2://不通过
+                checkLog.setCheckStatus(-1);
+                checkLog.setCheckTime(DateUtils.getNowTime());
+                checkLog.setCheckSign(0);
+                checkLog.setCheckUsername(bo.getLoginName());
+                checkLog.setCheckReason(bo.getCheckReason());
+                //获取初始审核节点
+                TopOldOrderCheckLog initCheckLog = getNextCheck(settleRoleList,1,settle.getSettleSn());
+                initCheckLog.setCheckSign(1);
+                topOldOrderCheckLogService.updateById(initCheckLog);
+                settle.setCheckStatus(3);//未通过
+                updateById(settle);
+                break;
+            default :
+                break;
+        }
+        return true;
+    }
+
+    @Override
+    public BigDecimal getSettleTotalMoney(SettleQueryBo bo) {
+        if (ObjectUtil.isNotNull(bo.getCheckStatus())
+                && (bo.getCheckStatus() == 2 || bo.getCheckStatus() == 7) && !bo.getLoginName().equals("admin")){
+            List<TopSysUserRole> roleList = topSysUserRoleService.list(new LambdaQueryWrapper<TopSysUserRole>().eq(TopSysUserRole::getUserId, bo.getLoginId()));
+            if (CollectionUtils.isNotEmpty(roleList)){
+                bo.setRoleIds(roleList.stream().map(TopSysUserRole::getRoleId).collect(Collectors.toList()));
+            }
+        }
+        List<SettleVo> settleVos = baseMapper.getSettleList(bo);
+        if (CollectionUtils.isEmpty(settleVos)){
+            return BigDecimal.ZERO;
+        }
+        return settleVos.stream().filter(x -> ObjectUtil.isNotNull(x.getSettleMoney())).map(SettleVo::getSettleMoney).reduce(BigDecimal.ZERO,BigDecimal::add);
+    }
+
+    @Override
+    public SettleVo getSettlePayInfo(Long settleId) {
+        TopInstSettle instSettle = getById(settleId);
+        if (ObjectUtil.isNull(instSettle)){
+            throw new CustomException("数据不存在!");
+        }
+        SettleVo detailVo = BeanUtil.toBean(instSettle, SettleVo.class);
+        //供应商信息
+        TopInstitution institution = topInstitutionService.getById(instSettle.getInstId());
+        detailVo.setInstName(institution.getInstName());
+        detailVo.setBankAccount(institution.getBankAccount());
+        detailVo.setBankName(institution.getBankName());
+        detailVo.setBank(institution.getBank());
+
+        TopInstCategory category = topInstCategoryService.getById(detailVo.getCostCatId());
+        detailVo.setCostCatName(category.getCategoryName());
+
+        //业务层次
+        TopCourseEducationType educationType = topCourseEducationTypeService.getById(instSettle.getEducationTypeId());
+        TopCourseProjectType projectType = topCourseProjectTypeService.getById(instSettle.getProjectId());
+        TopCourseBusiness business = topCourseBusinessService.getById(instSettle.getBusinessId());
+        detailVo.setEducationName(educationType.getEducationName());
+        detailVo.setBusinessName(business.getBusinessName()+projectType.getProjectName());
+        return detailVo;
+    }
+
+    @Override
+    public boolean settlePay(SettlePayBo bo) {
+        TopInstSettle settle = getById(bo.getSettleId());
+        if (ObjectUtils.isNull(settle)){
+            throw new CustomException("结算单信息获取失败!");
+        }
+        if (ObjectUtils.isNotNull(settle.getSettleMoney()) && settle.getSettleMoney().compareTo(BigDecimal.ZERO) > 0){
+            TopInstitution institution = topInstitutionService.getById(settle.getInstId());
+            //打款
+            BigDecimal settleMoney = settle.getSettleMoney();
+            String paySn = DateUtils.getTagOrderSn("CP");
+            TopOrderBankPay add = new TopOrderBankPay();
+            add.setPaySn(paySn);
+            add.setOrderSn(settle.getSettleSn());
+            add.setToBankAcount(institution.getBankAccount());
+            add.setToBankName(institution.getBankName());
+            add.setToBankTypeName(institution.getBank());
+            add.setTrainOrgId("1");//祥粤
+            add.setTenantId("867735392558919680");
+            add.setCreateTime(DateUtils.getNowTime());
+            add.setUpdateTime(DateUtils.getNowTime());
+            add.setResultStatus(0);
+            add.setPayUsername(bo.getLoginName());
+            add.setType(3);//供应商结算
+            add.setMoney(settleMoney);
+            add.setPayUsername(bo.getLoginName());
+            Map<String, String> params = new HashMap<>();
+            Long nowTime = DateUtils.getNowTime();
+            String sign = ToolsUtils.EncoderByMd5(paySn + nowTime.toString() + "pubilc2022");
+            params.put("stamp", nowTime.toString());
+            params.put("sign", sign);
+            params.put("MainUniqueId", paySn);
+            params.put("ToBankAcount",institution.getBankAccount());
+            params.put("ToBankName", institution.getBankName());
+            params.put("ToBankTypeName", institution.getBank());
+            params.put("Money", settleMoney.toString());
+            params.put("TrainOrgId", "1");
+
+            String respone = "";
+            String paramStr = JSON.toJSONString(params);
+            add.setParamJson(paramStr);
+            String path = OLD_SYS_HOST + "/WitSystem/BussinessApi/NeedToPay";
+            try {
+                respone = HttpUtils.postFormBody(path, params);
+                if (!respone.contains("\"Status\":true")) {
+                    //支付失败
+                    settle.setCheckStatus(5);
+                    updateById(settle);
+                    throw new CustomException("供应商结算支付请求错误" + respone);
+                }
+            } catch (IOException e) {
+                //支付失败
+                settle.setCheckStatus(5);
+                updateById(settle);
+                throw new CustomException("供应商结算支付请求错误" + e.getMessage());
+            }
+            topOrderBankPayService.save(add);
+            return true;
+        }
+        //结算金额小于0元
+        //支付成功
+        settle.setCheckStatus(6);
+        return updateById(settle);
+    }
 
+    @Override
+    public SettleReceiptsVo getSettleReceipts(Long settleId) {
+        TopInstSettle instSettle = getById(settleId);
+        if (ObjectUtil.isNull(instSettle)){
+            throw new CustomException("数据不存在!");
+        }
+        SettleReceiptsVo detailVo = BeanUtil.toBean(instSettle, SettleReceiptsVo.class);
+        //供应商信息
+        TopInstitution institution = topInstitutionService.getById(instSettle.getInstId());
+        detailVo.setInstName(institution.getInstName());
+        detailVo.setBankAccount(institution.getBankAccount());
+        detailVo.setBankName(institution.getBankName());
+        detailVo.setBank(institution.getBank());
+
+        TopInstCategory category = topInstCategoryService.getById(instSettle.getCostCatId());
+        detailVo.setCostCatName(category.getCategoryName());
+
+        //业务层次
+        TopCourseEducationType educationType = topCourseEducationTypeService.getById(instSettle.getEducationTypeId());
+        TopCourseProjectType projectType = topCourseProjectTypeService.getById(instSettle.getProjectId());
+        TopCourseBusiness business = topCourseBusinessService.getById(instSettle.getBusinessId());
+        detailVo.setEducationName(educationType.getEducationName());
+        detailVo.setBusinessName(business.getBusinessName()+projectType.getProjectName());
+        if (instSettle.getSettleType() == 1){
+            int count = topInstSettleRelationService
+                    .count(new LambdaQueryWrapper<TopInstSettleRelaiton>()
+                    .eq(TopInstSettleRelaiton::getSettleId, settleId)
+                    .eq(TopInstSettleRelaiton::getStatus, 1));
+            detailVo.setSettleNum(count);
+        }
+
+        //审核流程角色
+        List<TopOldOrderCheck> checkList = topOldOrderCheckService
+                .list(new LambdaQueryWrapper<TopOldOrderCheck>()
+                .in(TopOldOrderCheck::getCheckType, Arrays.asList(7, 8))
+                .eq(TopOldOrderCheck::getStatus, 1)
+                .orderByAsc(TopOldOrderCheck::getCheckSort));
+        if (CollectionUtils.isNotEmpty(checkList)){
+            List<String> collect = checkList.stream().map(item -> {
+                TopSysRole sysRole = topSysRoleService.getById(item.getCheckRole());
+                return sysRole.getRoleName();
+            }).collect(Collectors.toList());
+            detailVo.setCheckRoles(collect);
+        }
+        return detailVo;
+    }
 
+    @Override
+    public List<NumSettleOrderVo> getSettleReceiptsDetail(Long settleId) {
+        List<NumSettleOrderVo> result = new ArrayList<>();
+        List<TopInstSettleRelaiton> relaitonList = topInstSettleRelationService
+                .list(new LambdaQueryWrapper<TopInstSettleRelaiton>()
+                        .eq(TopInstSettleRelaiton::getSettleId, settleId)
+                        .eq(TopInstSettleRelaiton::getStatus, 1));
+        if (CollectionUtils.isNotEmpty(relaitonList)){
+            result = relaitonList.stream().map(item -> {
+                NumSettleOrderVo orderVo = new NumSettleOrderVo();
+                orderVo.setSettleId(item.getSettleId());
+                orderVo.setOrderSn(item.getOrderSn());
+                orderVo.setSubmitDataTime(item.getSubmitDataTime());
+                orderVo.setSettleMoney(item.getSettleMoney());
+                if (item.getOrderFrom() == 1) {
+                    Order order = orderService.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderSn, item.getOrderSn()));
+                    User user = userService.getById(order.getUserId());
+                    orderVo.setUserName(user.getRealname());
+                    orderVo.setUserCard(EncryptHandler.decrypt(user.getIdCard()));
+                } else {
+                    TopOldOrder oldOrder = topOldOrderService.getOne(new LambdaQueryWrapper<TopOldOrder>().eq(TopOldOrder::getOrderSn, item.getOrderSn()));
+                    orderVo.setCreateNo(oldOrder.getCreateNo());
+                    orderVo.setCreateUsername(oldOrder.getCreateUsername());
+                    orderVo.setClientName(oldOrder.getPurchaseOrg());
+                    TopOldOrderGoods orderGoods = topOldOrderGoodsService.getById(item.getOrderGoodsId());
+                    orderVo.setUserName(orderGoods.getUserName());
+                    orderVo.setUserCard(EncryptHandler.decrypt(orderGoods.getUserCard()));
+                }
+                return orderVo;
+            }).collect(Collectors.toList());
         }
-        return false;
+        return result;
     }
 
+    private TopOldOrderCheckLog getNextCheck(List<TopSysUserRole> settleRoleList, Integer sort,String settleSn) {
+        TopOldOrderCheckLog checkLog = topOldOrderCheckLogService
+                .getOne(new LambdaQueryWrapper<TopOldOrderCheckLog>()
+                        .eq(TopOldOrderCheckLog::getOrderSn, settleSn)
+                        .eq(TopOldOrderCheckLog::getCheckSort, sort)
+                        .eq(TopOldOrderCheckLog::getStatus, 1)
+                        .eq(TopOldOrderCheckLog::getCheckFrom, 4));
+        if (CollectionUtils.isEmpty(settleRoleList)){
+            return checkLog;
+        }
+        List<Long> roleIds = settleRoleList.stream().map(TopSysUserRole::getRoleId).collect(Collectors.toList());
+        if (roleIds.stream().anyMatch(x -> x.equals(checkLog.getRoleId()))){
+            getNextCheck(settleRoleList,sort + 1,settleSn);
+        }
+        return checkLog;
+    }
 
 
     private void updateSettleCheck(Long settleId, Long loginId,String loginName) {

+ 70 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/settle/vo/SettleReceiptsVo.java

@@ -0,0 +1,70 @@
+package com.zhongzheng.modules.top.settle.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * @author yangdamao
+ * @date 2023年07月25日 17:57
+ */
+@Data
+@ApiModel("结算列表")
+public class SettleReceiptsVo implements Serializable {
+
+    private Long settleId;
+
+    private String settleSn;
+
+    @ApiModelProperty("标题")
+    private String title;
+
+    @ApiModelProperty("结算方式:1数量 2时间")
+    private Integer settleType;
+
+    @ApiModelProperty("供应商名称")
+    private String instName;
+
+    @ApiModelProperty("成本分类")
+    private String costCatName;
+
+    @ApiModelProperty("开户名")
+    private String bankName;
+
+    @ApiModelProperty("开户行")
+    private String bank;
+
+    @ApiModelProperty("开户账号")
+    private String bankAccount;
+
+    @ApiModelProperty("教育类型")
+    private String educationName;
+
+    @ApiModelProperty("业务层次")
+    private String businessName;
+
+    @ApiModelProperty("结算金额")
+    private BigDecimal settleMoney;
+
+    @ApiModelProperty("审核角色")
+    private List<String> checkRoles;
+
+    @ApiModelProperty("备注")
+    private String remark;
+
+    @ApiModelProperty("签约开始时间")
+    private Long signStartTime;
+
+    @ApiModelProperty("签约结束时间")
+    private Long signEndTime;
+
+    @ApiModelProperty("支付时间")
+    private Long payTime;
+
+    @ApiModelProperty("结算数量")
+    private Integer settleNum;
+}

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

@@ -33,6 +33,9 @@ public class SettleVo implements Serializable {
     @ApiModelProperty("供应商成本分类id")
     private String costCatId;
 
+    @ApiModelProperty("成本分类")
+    private String costCatName;
+
     @ApiModelProperty("开户名")
     private String bankName;
 
@@ -65,4 +68,7 @@ public class SettleVo implements Serializable {
 
     @ApiModelProperty("添加时间")
     private Long createTime;
+
+    @ApiModelProperty("结算总金额")
+    private BigDecimal totalMoney;
 }

+ 1 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/settle/vo/TimeSettleDetailVo.java

@@ -73,7 +73,7 @@ public class TimeSettleDetailVo implements Serializable {
     @ApiModelProperty("签约结束时间")
     private Long signEndTime;
 
-    @ApiModelProperty("结算订单类型:1全部 2代运营订单 3独立订单")
+    @ApiModelProperty("结算订单类型:1代运营订单 2独立订单 3全部")
     private Integer settleOrderType;
 
     @ApiModelProperty("审核状态:1待提交 2审核中 3未通过 4待支付 5支付失败 6已结算")

+ 1 - 1
zhongzheng-system/src/main/resources/mapper/modules/settle/ExamActivityMapper.xml

@@ -33,7 +33,7 @@
                       ( SELECT project_name FROM top_course_project_type WHERE id = ct.project_id )
                    )
         FROM
-            top_cost_tp_item ct
+            top_cost_inst_tp_item ct
         WHERE
             ct.tp_id = #{id}
     </select>

+ 4 - 0
zhongzheng-system/src/main/resources/mapper/modules/top/TopOldOrderMapper.xml

@@ -544,4 +544,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </if>
     </select>
 
+    <select id="getOrderSnByBusiness" parameterType="java.lang.String" resultType="java.lang.Long">
+        SELECT DISTINCT order_sn FROM v_top_order_business WHERE INSTR(business_full_name,#{businessName}) > 0
+    </select>
+
 </mapper>