|
@@ -0,0 +1,478 @@
|
|
|
+package com.zhongzheng.modules.top.settle.service.impl;
|
|
|
+
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.zhongzheng.common.exception.CustomException;
|
|
|
+import com.zhongzheng.common.type.EncryptHandler;
|
|
|
+import com.zhongzheng.common.utils.DateUtils;
|
|
|
+import com.zhongzheng.modules.goods.domain.Goods;
|
|
|
+import com.zhongzheng.modules.goods.service.IGoodsService;
|
|
|
+import com.zhongzheng.modules.order.domain.Order;
|
|
|
+import com.zhongzheng.modules.order.domain.OrderGoods;
|
|
|
+import com.zhongzheng.modules.order.service.IOrderGoodsService;
|
|
|
+import com.zhongzheng.modules.order.service.IOrderService;
|
|
|
+import com.zhongzheng.modules.top.financial.domain.TopCostInstTp;
|
|
|
+import com.zhongzheng.modules.top.financial.domain.TopCostInstTpItem;
|
|
|
+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.settle.bo.*;
|
|
|
+import com.zhongzheng.modules.top.settle.domian.TopInstSettle;
|
|
|
+import com.zhongzheng.modules.top.settle.domian.TopInstSettleRelaiton;
|
|
|
+import com.zhongzheng.modules.top.settle.mapper.TopInstSettleMapper;
|
|
|
+import com.zhongzheng.modules.top.settle.service.ITopInstSettleRelationService;
|
|
|
+import com.zhongzheng.modules.top.settle.service.ITopInstSettleService;
|
|
|
+import com.zhongzheng.modules.top.settle.vo.SettleOrderImportVo;
|
|
|
+import com.zhongzheng.modules.top.settle.vo.SettleVo;
|
|
|
+import com.zhongzheng.modules.top.settle.vo.TopOrderInfoVo;
|
|
|
+import com.zhongzheng.modules.top.settle.vo.TopOrderStudyInfoVo;
|
|
|
+import com.zhongzheng.modules.top.user.domain.TopSysUserRole;
|
|
|
+import com.zhongzheng.modules.top.user.service.ITopSysUserRoleService;
|
|
|
+import com.zhongzheng.modules.top.user.service.ITopSysUserService;
|
|
|
+import com.zhongzheng.modules.user.domain.User;
|
|
|
+import com.zhongzheng.modules.user.service.IUserService;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Arrays;
|
|
|
+import java.util.Comparator;
|
|
|
+import java.util.List;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author yangdamao
|
|
|
+ * @date 2023年07月24日 11:13
|
|
|
+ */
|
|
|
+@Service
|
|
|
+public class ITopInstSettleServiceImpl extends ServiceImpl<TopInstSettleMapper, TopInstSettle> implements ITopInstSettleService {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ITopOldOrderService topOldOrderService;
|
|
|
+ @Autowired
|
|
|
+ private ITopOldOrderGoodsService topOldOrderGoodsService;
|
|
|
+ @Autowired
|
|
|
+ private IOrderGoodsService orderGoodsService;
|
|
|
+ @Autowired
|
|
|
+ private IOrderService orderService;
|
|
|
+ @Autowired
|
|
|
+ private IUserService userService;
|
|
|
+ @Autowired
|
|
|
+ private IGoodsService goodsService;
|
|
|
+ @Autowired
|
|
|
+ private ITopCostInstTpService topCostInstTpService;
|
|
|
+ @Autowired
|
|
|
+ private ITopCostInstTpItemService topCostInstTpItemService;
|
|
|
+ @Autowired
|
|
|
+ private ITopCourseEducationTypeService topCourseEducationTypeService;
|
|
|
+ @Autowired
|
|
|
+ private ITopCourseProjectTypeService topCourseProjectTypeService;
|
|
|
+ @Autowired
|
|
|
+ private ITopCourseBusinessService topCourseBusinessService;
|
|
|
+ @Autowired
|
|
|
+ private ITopInstSettleRelationService topInstSettleRelationService;
|
|
|
+ @Autowired
|
|
|
+ private ITopOldOrderCheckService topOldOrderCheckService;
|
|
|
+ @Autowired
|
|
|
+ private ITopOldOrderCheckLogService topOldOrderCheckLogService;
|
|
|
+ @Autowired
|
|
|
+ private ITopSysUserRoleService topSysUserRoleService;
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public TopOrderInfoVo getOrderInfo(SettleOrderInfoBo bo) {
|
|
|
+ TopOrderInfoVo orderInfoVo = baseMapper.getOrderInfo(bo.getOrderSn());
|
|
|
+ if (ObjectUtils.isNull(orderInfoVo)){
|
|
|
+ throw new CustomException("订单信息获取有误!");
|
|
|
+ }
|
|
|
+ if (orderInfoVo.getCheckStatus() != 1){
|
|
|
+ throw new CustomException("订单未通过审核,请检查!");
|
|
|
+ }
|
|
|
+ //订单业务层次
|
|
|
+ List<String> businessNames = baseMapper.getOrderBusiness(bo.getOrderSn());
|
|
|
+ if (CollectionUtils.isEmpty(businessNames)){
|
|
|
+ throw new CustomException("订单不存在业务层,请检查!");
|
|
|
+ }
|
|
|
+ String eduName = getBusinessFullName(bo.getEducationTypeId(),bo.getProjectId(),bo.getBusinessId());
|
|
|
+ if (businessNames.stream().noneMatch(x -> x.contains(eduName))){
|
|
|
+ throw new CustomException("订单业务层次不匹配,请检查!");
|
|
|
+ }
|
|
|
+
|
|
|
+ //订单学员信息
|
|
|
+ if (orderInfoVo.getOrderFrom() == 1){
|
|
|
+ //新系统订单
|
|
|
+ List<OrderGoods> list = orderGoodsService
|
|
|
+ .list(new LambdaQueryWrapper<OrderGoods>()
|
|
|
+ .eq(OrderGoods::getOrderSn, bo.getOrderSn()));
|
|
|
+ if (CollectionUtils.isNotEmpty(list)){
|
|
|
+ Order order = orderService.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderSn, bo.getOrderSn()));
|
|
|
+ User user = userService.getById(order.getUserId());
|
|
|
+ List<TopOrderStudyInfoVo> infoVoList = list.stream().map(item -> {
|
|
|
+ TopOrderStudyInfoVo studyInfoVo = new TopOrderStudyInfoVo();
|
|
|
+ studyInfoVo.setUserCard(EncryptHandler.decrypt(user.getIdCard()));
|
|
|
+ studyInfoVo.setUserPhone(EncryptHandler.decrypt(user.getTelphone()));
|
|
|
+ studyInfoVo.setUserName(user.getRealname());
|
|
|
+ studyInfoVo.setOrderSn(bo.getOrderSn());
|
|
|
+ Goods goods = goodsService.getById(item.getGoodsId());
|
|
|
+ studyInfoVo.setGoodsName(goods.getGoodsName());
|
|
|
+ studyInfoVo.setOrderGoodsId(item.getOrderGoodsId());
|
|
|
+ return studyInfoVo;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ orderInfoVo.setOrderStudyList(infoVoList);
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ //旧系统订单
|
|
|
+ List<TopOldOrderGoods> list = topOldOrderGoodsService
|
|
|
+ .list(new LambdaQueryWrapper<TopOldOrderGoods>()
|
|
|
+ .eq(TopOldOrderGoods::getOrderSn, bo.getOrderSn()));
|
|
|
+ if (CollectionUtils.isNotEmpty(list)){
|
|
|
+ List<TopOrderStudyInfoVo> infoVoList = list.stream().map(item -> {
|
|
|
+ TopOrderStudyInfoVo studyInfoVo = new TopOrderStudyInfoVo();
|
|
|
+ studyInfoVo.setUserCard(EncryptHandler.decrypt(item.getUserCard()));
|
|
|
+ studyInfoVo.setUserPhone(item.getUserPhone());
|
|
|
+ studyInfoVo.setUserName(item.getUserName());
|
|
|
+ studyInfoVo.setOrderSn(bo.getOrderSn());
|
|
|
+ studyInfoVo.setGoodsName(item.getGoodsName());
|
|
|
+ studyInfoVo.setOrderGoodsId(item.getOrderGoodsId());
|
|
|
+ return studyInfoVo;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ orderInfoVo.setOrderStudyList(infoVoList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return orderInfoVo;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public BigDecimal getSettleMoney(SettleMoneyBo bo) {
|
|
|
+ TopOrderInfoVo orderInfo = baseMapper.getOrderInfo(bo.getOrderSn());
|
|
|
+ if (ObjectUtils.isNull(orderInfo)){
|
|
|
+ throw new CustomException("订单信息有误!");
|
|
|
+ }
|
|
|
+ //供应商默认结算模版
|
|
|
+ TopCostInstTp instTp = topCostInstTpService
|
|
|
+ .getOne(new LambdaQueryWrapper<TopCostInstTp>()
|
|
|
+ .eq(TopCostInstTp::getInstId, bo.getInstId())
|
|
|
+ .eq(TopCostInstTp::getDefaultStatus, 1)
|
|
|
+ .eq(TopCostInstTp::getStatus, 1));
|
|
|
+ if (ObjectUtils.isNull(instTp)){
|
|
|
+ return new BigDecimal("0.00");
|
|
|
+ }
|
|
|
+
|
|
|
+ TopCostInstTpItem tpItem = topCostInstTpItemService
|
|
|
+ .getOne(new LambdaQueryWrapper<TopCostInstTpItem>()
|
|
|
+ .eq(TopCostInstTpItem::getTpId, instTp.getTpId())
|
|
|
+ .eq(TopCostInstTpItem::getEducationTypeId, bo.getEducationTypeId())
|
|
|
+ .eq(TopCostInstTpItem::getProjectId, bo.getProjectId())
|
|
|
+ .eq(TopCostInstTpItem::getBusinessId, bo.getBusinessId())
|
|
|
+ .eq(TopCostInstTpItem::getCostCatId, bo.getCostCatId())
|
|
|
+ .eq(TopCostInstTpItem::getStatus,1));
|
|
|
+ if (ObjectUtils.isNull(tpItem)){
|
|
|
+ throw new CustomException("模版结算成本不存在!");
|
|
|
+ }
|
|
|
+
|
|
|
+ //模板业务层次全称
|
|
|
+ String businessName = baseMapper.geTopCostBusinessName(tpItem.getId());
|
|
|
+ //订单业务层次
|
|
|
+ String orderBusiness = baseMapper.getGoodsBusinessName(bo.getOrderSn(),bo.getOrderGoodsId());
|
|
|
+ if (!orderBusiness.contains(businessName)){
|
|
|
+ throw new CustomException("学员和结算成本的业务层次不匹配!");
|
|
|
+ }
|
|
|
+
|
|
|
+ //换算结算金额
|
|
|
+ BigDecimal settleMoney = BigDecimal.ZERO;
|
|
|
+ switch (tpItem.getItemType()){
|
|
|
+ case 1://百分比
|
|
|
+ //订单商品价格-佣金
|
|
|
+ BigDecimal realPrice = BigDecimal.ZERO;
|
|
|
+ if (orderInfo.getOrderFrom() == 1){
|
|
|
+ //新系统
|
|
|
+ OrderGoods orderGoods = orderGoodsService.getById(bo.getOrderGoodsId());
|
|
|
+ realPrice = orderGoods.getGoodsRealPrice();
|
|
|
+ }else {
|
|
|
+ //订单金额
|
|
|
+ TopOldOrderGoods orderGoods = topOldOrderGoodsService.getById(bo.getOrderGoodsId());
|
|
|
+ realPrice = orderGoods.getGoodsRealPrice();
|
|
|
+
|
|
|
+ TopOldOrder oldOrder = topOldOrderService
|
|
|
+ .getOne(new LambdaQueryWrapper<TopOldOrder>()
|
|
|
+ .eq(TopOldOrder::getOrderSn, bo.getOrderSn()));
|
|
|
+ if (ObjectUtils.isNotNull(oldOrder.getPretaxBrokerage())
|
|
|
+ && oldOrder.getPretaxBrokerage().compareTo(BigDecimal.ZERO)>0){
|
|
|
+ int count = topOldOrderGoodsService.count(new LambdaQueryWrapper<TopOldOrderGoods>()
|
|
|
+ .eq(TopOldOrderGoods::getOrderSn, bo.getOrderSn())
|
|
|
+ .in(TopOldOrderGoods::getCheckStatus, Arrays.asList(0, 1))
|
|
|
+ .eq(TopOldOrderGoods::getStatus, 1));
|
|
|
+ BigDecimal divide = oldOrder.getPretaxBrokerage().divide(new BigDecimal(count));
|
|
|
+ realPrice = realPrice.subtract(divide);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ BigDecimal divide = tpItem.getTypeValue().divide(new BigDecimal("100.00"));
|
|
|
+ settleMoney = realPrice.multiply(divide);
|
|
|
+ break;
|
|
|
+ case 2://固定的金额
|
|
|
+ settleMoney = tpItem.getTypeValue();
|
|
|
+ break;
|
|
|
+ default :
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ return settleMoney;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<SettleOrderImportVo> batchOrderImport(List<SettleOrderImportBo> orderImportBo, SettleOrderImportParamBo paramBo) {
|
|
|
+ List<SettleOrderImportVo> result = new ArrayList<>();
|
|
|
+ //供应商默认结算模版
|
|
|
+ String tpBusinessName = "";
|
|
|
+ TopCostInstTpItem tpItem = null;
|
|
|
+ TopCostInstTp instTp = topCostInstTpService
|
|
|
+ .getOne(new LambdaQueryWrapper<TopCostInstTp>()
|
|
|
+ .eq(TopCostInstTp::getInstId, paramBo.getInstId())
|
|
|
+ .eq(TopCostInstTp::getDefaultStatus, 1)
|
|
|
+ .eq(TopCostInstTp::getStatus, 1));
|
|
|
+ if (ObjectUtils.isNotNull(instTp)){
|
|
|
+ tpItem = topCostInstTpItemService
|
|
|
+ .getOne(new LambdaQueryWrapper<TopCostInstTpItem>()
|
|
|
+ .eq(TopCostInstTpItem::getTpId, instTp.getTpId())
|
|
|
+ .eq(TopCostInstTpItem::getEducationTypeId, paramBo.getEducationTypeId())
|
|
|
+ .eq(TopCostInstTpItem::getProjectId, paramBo.getProjectId())
|
|
|
+ .eq(TopCostInstTpItem::getBusinessId, paramBo.getBusinessId())
|
|
|
+ .eq(TopCostInstTpItem::getCostCatId, paramBo.getCostCatId())
|
|
|
+ .eq(TopCostInstTpItem::getStatus,1));
|
|
|
+ if (ObjectUtils.isNull(tpItem)){
|
|
|
+ throw new CustomException("模版结算成本不存在!");
|
|
|
+ }
|
|
|
+ //模板业务层次全称
|
|
|
+ tpBusinessName = baseMapper.geTopCostBusinessName(tpItem.getId());
|
|
|
+ }else {
|
|
|
+ //模板业务层次全称
|
|
|
+ tpBusinessName = getBusinessFullName(paramBo.getEducationTypeId(),paramBo.getProjectId(),paramBo.getBusinessId());
|
|
|
+ }
|
|
|
+
|
|
|
+ for (SettleOrderImportBo bo : orderImportBo) {
|
|
|
+ //导入校验
|
|
|
+ importCheck(bo,tpBusinessName);
|
|
|
+ SettleOrderImportVo vo = new SettleOrderImportVo();
|
|
|
+ vo.setOrderSn(bo.getOrderSn());
|
|
|
+ TopOrderInfoVo orderInfoVo = baseMapper.getOrderInfo(bo.getOrderSn());
|
|
|
+ vo.setCreateNo(orderInfoVo.getCreateNo());
|
|
|
+ vo.setCreateUsername(orderInfoVo.getCreateUsername());
|
|
|
+ vo.setClientName(orderInfoVo.getClientName());
|
|
|
+ vo.setUserName(bo.getUserName());
|
|
|
+ vo.setUserCard(bo.getUserCard());
|
|
|
+ vo.setOrderFrom(orderInfoVo.getOrderFrom());
|
|
|
+ Long time = DateUtils.dateTimeSec("yyyy-MM-dd HH:ss:mm", bo.getSubmitDataTime());
|
|
|
+ vo.setSubmitDataTime(time);
|
|
|
+ //结算金额
|
|
|
+ if (ObjectUtil.isNull(tpItem)){
|
|
|
+ vo.setSettleMoney(BigDecimal.ZERO);
|
|
|
+ }else {
|
|
|
+ //换算结算金额
|
|
|
+ BigDecimal settleMoney = BigDecimal.ZERO;
|
|
|
+ List<Long> orderGoodsIds = baseMapper.getOrderGoodsByBusiness(bo.getOrderSn(),tpBusinessName);
|
|
|
+ if (CollectionUtils.isNotEmpty(orderGoodsIds)){
|
|
|
+ switch (tpItem.getItemType()){
|
|
|
+ case 1://百分比
|
|
|
+ //订单商品价格-佣金
|
|
|
+ BigDecimal realPrice = BigDecimal.ZERO;
|
|
|
+ if (orderInfoVo.getOrderFrom() == 1){
|
|
|
+ //新系统
|
|
|
+ OrderGoods orderGoods = orderGoodsService.getById(orderGoodsIds.get(0));
|
|
|
+ realPrice = orderGoods.getGoodsRealPrice();
|
|
|
+ vo.setOrderGoodsId(orderGoodsIds.get(0));
|
|
|
+ }else {
|
|
|
+ //订单金额
|
|
|
+ Long orderGoodsId = orderGoodsIds.stream().filter(item -> {
|
|
|
+ TopOldOrderGoods one = topOldOrderGoodsService.getById(item);
|
|
|
+ return EncryptHandler.decrypt(one.getUserCard()).equals(bo.getUserCard()) && one.getUserName().equals(bo.getUserName());
|
|
|
+ }).findFirst().orElse(null);
|
|
|
+ if (ObjectUtils.isNotNull(orderGoodsId)){
|
|
|
+ TopOldOrderGoods orderGoods = topOldOrderGoodsService.getById(orderGoodsId);
|
|
|
+ realPrice = orderGoods.getGoodsRealPrice();
|
|
|
+ TopOldOrder oldOrder = topOldOrderService
|
|
|
+ .getOne(new LambdaQueryWrapper<TopOldOrder>()
|
|
|
+ .eq(TopOldOrder::getOrderSn, bo.getOrderSn()));
|
|
|
+ if (ObjectUtils.isNotNull(oldOrder.getPretaxBrokerage())
|
|
|
+ && oldOrder.getPretaxBrokerage().compareTo(BigDecimal.ZERO)>0){
|
|
|
+ int count = topOldOrderGoodsService.count(new LambdaQueryWrapper<TopOldOrderGoods>()
|
|
|
+ .eq(TopOldOrderGoods::getOrderSn, bo.getOrderSn())
|
|
|
+ .in(TopOldOrderGoods::getCheckStatus, Arrays.asList(0, 1))
|
|
|
+ .eq(TopOldOrderGoods::getStatus, 1));
|
|
|
+ BigDecimal divide = oldOrder.getPretaxBrokerage().divide(new BigDecimal(count));
|
|
|
+ realPrice = realPrice.subtract(divide);
|
|
|
+ }
|
|
|
+ vo.setOrderGoodsId(orderGoodsId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ BigDecimal divide = tpItem.getTypeValue().divide(new BigDecimal("100.00"));
|
|
|
+ settleMoney = realPrice.multiply(divide);
|
|
|
+ break;
|
|
|
+ case 2://固定的金额
|
|
|
+ settleMoney = tpItem.getTypeValue();
|
|
|
+ break;
|
|
|
+ default :
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ vo.setSettleMoney(settleMoney);
|
|
|
+ }
|
|
|
+ result.add(vo);
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean numSettleOrderSave(NumSettleBo bo) {
|
|
|
+ //结算信息
|
|
|
+ TopInstSettle entity = BeanUtil.toBean(bo, TopInstSettle.class);
|
|
|
+ entity.setSettleSn(DateUtils.getDateOrderSn());
|
|
|
+ entity.setStatus(bo.getStatus());
|
|
|
+ entity.setCreateTime(DateUtils.getNowTime());
|
|
|
+ entity.setUpdateTime(DateUtils.getNowTime());
|
|
|
+ entity.setCheckStatus(1);
|
|
|
+ save(entity);
|
|
|
+ //结算订单信息
|
|
|
+ if (CollectionUtils.isNotEmpty(bo.getSettleOrders())){
|
|
|
+ List<TopInstSettleRelaiton> relaitonList = bo.getSettleOrders().stream().map(item -> {
|
|
|
+ TopInstSettleRelaiton relaiton = BeanUtil.toBean(item, TopInstSettleRelaiton.class);
|
|
|
+ relaiton.setSettleId(entity.getSettleId());
|
|
|
+ relaiton.setCreateTime(DateUtils.getNowTime());
|
|
|
+ relaiton.setUpdateTime(DateUtils.getNowTime());
|
|
|
+ relaiton.setStatus(1);
|
|
|
+ return relaiton;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ topInstSettleRelationService.saveBatch(relaitonList);
|
|
|
+ }
|
|
|
+ if (bo.getStatus() == 1){
|
|
|
+ //提交审核
|
|
|
+ createCheckLog(entity.getSettleSn(),bo.getLoginId(),bo.getLoginName());
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void createCheckLog(String settleSn,Long loginId,String loginName){
|
|
|
+ //获取审核和支付流程
|
|
|
+ List<TopOldOrderCheck> list = topOldOrderCheckService
|
|
|
+ .list(new LambdaQueryWrapper<TopOldOrderCheck>()
|
|
|
+ .in(TopOldOrderCheck::getCheckType, Arrays.asList(7, 8))
|
|
|
+ .eq(TopOldOrderCheck::getStatus, 1)
|
|
|
+ .orderByAsc(TopOldOrderCheck::getCheckSort));
|
|
|
+ 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();
|
|
|
+ checkLog.setRoleId(orderCheck.getCheckRole());
|
|
|
+ checkLog.setType(orderCheck.getCheckType());
|
|
|
+ checkLog.setCheckSort(orderCheck.getCheckSort());
|
|
|
+ checkLog.setCheckFrom(5);//供应商结算
|
|
|
+ checkLog.setOrderSn(settleSn);
|
|
|
+ checkLog.setCreateTime(DateUtils.getNowTime());
|
|
|
+ checkLog.setUpdateTime(DateUtils.getNowTime());
|
|
|
+ checkLog.setCheckSign(0);
|
|
|
+ if (userRoles.stream().anyMatch(x -> x.getRoleId().equals(orderCheck.getCheckRole())) && orderCheck.getCheckType() == 7){
|
|
|
+ //创建人包含审核角色(跳过审核)
|
|
|
+ checkLog.setCheckStatus(1);
|
|
|
+ checkLog.setCheckReason("系统自动审核");
|
|
|
+ checkLog.setCheckTime(DateUtils.getNowTime());
|
|
|
+ checkLog.setCheckUsername(loginName);
|
|
|
+ }else {
|
|
|
+ checkLog.setCheckStatus(orderCheck.getCheckType() == 7?0:2);
|
|
|
+ }
|
|
|
+ checkLogList.add(checkLog);
|
|
|
+ }
|
|
|
+ topOldOrderCheckLogService.saveBatch(checkLogList);
|
|
|
+ //当前审核标签
|
|
|
+ TopOldOrderCheckLog checkLog = checkLogList.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 : checkLogList) {
|
|
|
+ if (item.getId().equals(checkLog.getId()) && item.getType() == 7 && item.getCheckSort() > 1){
|
|
|
+ checkStatus = 3;//审核中
|
|
|
+ }
|
|
|
+ if (item.getId().equals(checkLog.getId()) && item.getType() == 8 ){
|
|
|
+ checkStatus = 5;//待支付
|
|
|
+ }
|
|
|
+ }
|
|
|
+ update(new LambdaUpdateWrapper<TopInstSettle>()
|
|
|
+ .set(TopInstSettle::getCheckStatus,checkStatus)
|
|
|
+ .eq(TopInstSettle::getSettleSn,settleSn));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean timeSettleOrderSave(TimeSettleBo bo) {
|
|
|
+ //结算信息
|
|
|
+ TopInstSettle entity = BeanUtil.toBean(bo, TopInstSettle.class);
|
|
|
+ entity.setSettleSn(DateUtils.getDateOrderSn());
|
|
|
+ entity.setStatus(bo.getStatus());
|
|
|
+ entity.setCreateTime(DateUtils.getNowTime());
|
|
|
+ entity.setUpdateTime(DateUtils.getNowTime());
|
|
|
+ save(entity);
|
|
|
+ if (bo.getStatus() == 1){
|
|
|
+ //提交审核
|
|
|
+ createCheckLog(entity.getSettleSn(),bo.getLoginId(),bo.getLoginName());
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<SettleVo> getSettleList(SettleQueryBo bo) {
|
|
|
+
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ //结算订单导入校验
|
|
|
+ private void importCheck(SettleOrderImportBo bo,String tpBusinessName) {
|
|
|
+ TopOrderInfoVo orderInfoVo = baseMapper.getOrderInfo(bo.getOrderSn());
|
|
|
+ if (ObjectUtils.isNull(orderInfoVo)){
|
|
|
+ throw new CustomException(String.format("订单【%s】信息获取有误!",bo.getOrderSn()));
|
|
|
+ }
|
|
|
+ if (orderInfoVo.getCheckStatus() != 1){
|
|
|
+ throw new CustomException(String.format("订单【%s】未通过审核,请检查!",bo.getOrderSn()));
|
|
|
+ }
|
|
|
+ //订单业务层次
|
|
|
+ List<String> businessNames = baseMapper.getOrderBusiness(bo.getOrderSn());
|
|
|
+ if (CollectionUtils.isEmpty(businessNames)){
|
|
|
+ throw new CustomException(String.format("订单【%s】不存在业务层,请检查!",bo.getOrderSn()));
|
|
|
+ }
|
|
|
+ if (businessNames.stream().noneMatch(x -> x.contains(tpBusinessName))){
|
|
|
+ throw new CustomException(String.format("订单【%s】业务层次不匹配,请检查!",bo.getOrderSn()));
|
|
|
+ }
|
|
|
+
|
|
|
+ if (orderInfoVo.getOrderFrom() == 1){
|
|
|
+ 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()));
|
|
|
+ }
|
|
|
+ }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()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private String getBusinessFullName(Long educationId,Long projectId,Long businessId){
|
|
|
+ TopCourseEducationType educationType = topCourseEducationTypeService.getById(educationId);
|
|
|
+ TopCourseProjectType projectType = topCourseProjectTypeService.getById(projectId);
|
|
|
+ TopCourseBusiness business = topCourseBusinessService.getById(businessId);
|
|
|
+ return educationType.getEducationName()+business.getBusinessName()+projectType.getProjectName();
|
|
|
+ }
|
|
|
+}
|