yangdamao 2 лет назад
Родитель
Сommit
41cf8b376a
18 измененных файлов с 426 добавлено и 263 удалено
  1. 3 3
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/common/CommonController.java
  2. 1 0
      zhongzheng-admin-saas/src/main/resources/application-dev.yml
  3. 12 0
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/common/CommonController.java
  4. 1 0
      zhongzheng-admin/src/main/resources/application-dev.yml
  5. 1 0
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/config/SecurityConfig.java
  6. 30 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/AlikeGoodsBo.java
  7. 6 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/mapper/GoodsMapper.java
  8. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/IGoodsService.java
  9. 16 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsServiceImpl.java
  10. 1 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/mapper/OrderMapper.java
  11. 3 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderServiceImpl.java
  12. 222 188
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/service/impl/TopOldOrderServiceImpl.java
  13. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/vo/TopOldOrderGoodsListVo.java
  14. 26 1
      zhongzheng-system/src/main/resources/mapper/modules/goods/GoodsMapper.xml
  15. 3 1
      zhongzheng-system/src/main/resources/mapper/modules/order/OrderGoodsMapper.xml
  16. 1 1
      zhongzheng-system/src/main/resources/mapper/modules/order/OrderMapper.xml
  17. 3 1
      zhongzheng-system/src/main/resources/mapper/modules/top/TopOldOrderGoodsMapper.xml
  18. 92 64
      zhongzheng-system/src/main/resources/mapper/modules/top/TopOldOrderMapper.xml

+ 3 - 3
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/common/CommonController.java

@@ -156,9 +156,9 @@ public class CommonController extends BaseController {
     @ApiOperation("新增订单")
     @PostMapping("/save/order")
     public AjaxResult<Void> saveOrder(@RequestBody TopOldOrderAddBo bo) {
-//        if(!ToolsUtils.checkOrderSignFromOldSys(bo.getOrderSn(),bo.getStamp().toString(),bo.getSign())){
-//            throw new CustomException("签名错误");
-//        }
+        if(!ToolsUtils.checkOrderSignFromOldSys(bo.getOrderSn(),bo.getStamp().toString(),bo.getSign())){
+            throw new CustomException("签名错误");
+        }
         return toAjax(iTopOldOrderService.insertByAddBo(bo) ? 1 : 0);
     }
 

+ 1 - 0
zhongzheng-admin-saas/src/main/resources/application-dev.yml

@@ -156,6 +156,7 @@ Nuonuo:
 oldOrder:
     studyRecord: http://gdxypx.xy.com/WitSystem/BussinessApi/GetStudyRecord
     orderCheck: http://gdxypx.xy.com/WitSystem/BussinessApi/AuditUnderOrder
+    finishOrder: http://gdxypx.xy.com/WitSystem/BussinessApi/CompleteOrder
 
 oldSys:
     host: http://gdxypx.xy.com

+ 12 - 0
zhongzheng-admin/src/main/java/com/zhongzheng/controller/common/CommonController.java

@@ -30,11 +30,13 @@ import com.zhongzheng.modules.distribution.service.IDistributionActivityGoodsSer
 import com.zhongzheng.modules.distribution.service.IDistributionCashWithdrawalService;
 import com.zhongzheng.modules.distribution.service.IDistributionSellerService;
 import com.zhongzheng.modules.distribution.vo.DistributionSellerVo;
+import com.zhongzheng.modules.goods.bo.AlikeGoodsBo;
 import com.zhongzheng.modules.goods.bo.GoodsQueryBo;
 import com.zhongzheng.modules.goods.bo.GoodsStudyUrlBo;
 import com.zhongzheng.modules.goods.bo.UserGoodsListBo;
 import com.zhongzheng.modules.goods.service.IGoodsService;
 import com.zhongzheng.modules.goods.vo.GoodsJzsVo;
+import com.zhongzheng.modules.goods.vo.GoodsVo;
 import com.zhongzheng.modules.goods.vo.UserGoodsListVo;
 import com.zhongzheng.modules.grade.bo.*;
 import com.zhongzheng.modules.grade.service.IClassGradeService;
@@ -316,6 +318,16 @@ public class CommonController extends BaseController {
         return AjaxResult.success(token);
     }
 
+    @ApiOperation("获取同价格商品")
+    @PostMapping("/common/alike/goods")
+    public AjaxResult getAlikeGoods(@RequestBody AlikeGoodsBo bo) {
+        if (!ToolsUtils.checkSignFromOldSys(bo.getStamp().toString(), bo.getSign())) {
+            return AjaxResult.error("签名错误");
+        }
+        List<GoodsVo> voList = iGoodsService.getAlikeGoods(bo);
+        return AjaxResult.success(voList);
+    }
+
     @ApiOperation("推送分销商品")
     @PostMapping("/toshareGoods")
     public AjaxResult toshareGoods(@RequestBody WxShareGoodsBo bo) {

+ 1 - 0
zhongzheng-admin/src/main/resources/application-dev.yml

@@ -157,6 +157,7 @@ Nuonuo:
 oldOrder:
     studyRecord: http://gdxypx.xy.com/WitSystem/BussinessApi/GetStudyRecord
     orderCheck: http://gdxypx.xy.com/WitSystem/BussinessApi/AuditUnderOrder
+    finishOrder: http://gdxypx.xy.com/WitSystem/BussinessApi/CompleteOrder
 
 oldSys:
     host: http://gdxypx.xy.com

+ 1 - 0
zhongzheng-framework/src/main/java/com/zhongzheng/framework/config/SecurityConfig.java

@@ -139,6 +139,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
                 .antMatchers("/common/merge/file").anonymous()
                 .antMatchers("/common/get/goods").anonymous()
                 .antMatchers("/common/get/goods/studyUrl").anonymous()
+                .antMatchers("/common/alike/goods").anonymous()
                 .antMatchers("/common/create/tenant/admin").anonymous()
                 .antMatchers("/common/create/tenant/admin/old").anonymous()
                 .antMatchers("/common/update/role").anonymous()

+ 30 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/AlikeGoodsBo.java

@@ -0,0 +1,30 @@
+package com.zhongzheng.modules.goods.bo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2023年02月08日 11:23
+ */
+@Data
+public class AlikeGoodsBo implements Serializable {
+
+    @ApiModelProperty("当前时间戳")
+    @NotBlank(message = "当前时间戳不能为空")
+    private Long stamp;
+
+    @ApiModelProperty("签名")
+    @NotBlank(message = "签名不能为空")
+    private String sign;
+
+    @ApiModelProperty("商品ID")
+    private Long goodsId;
+
+    @ApiModelProperty("机构ID")
+    private Long tenantId;
+
+}

+ 6 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/mapper/GoodsMapper.java

@@ -66,4 +66,10 @@ public interface GoodsMapper extends BaseMapper<Goods> {
     Long getCourseExamNum(@Param("goodsId") Long goodsId);
 
     Long getUserStudyNum(@Param("userId")Long userId,@Param("orderGoodsId") Long orderGoodsId);
+
+    @InterceptorIgnore(tenantLine = "true")
+    List<GoodsVo> getAlikeGoods(Goods goods);
+
+    @InterceptorIgnore(tenantLine = "true")
+    Goods getGoodsByIdNotTenant(Long goodsId);
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/IGoodsService.java

@@ -127,4 +127,7 @@ public interface IGoodsService extends IService<Goods> {
 
 	GoodsVo getDistributionGoods(DistributionGoodsBo bo);
 
+    List<GoodsVo> getAlikeGoods(AlikeGoodsBo bo);
+
+	Goods getGoodsByIdNotTenant(Long goodsId);
 }

+ 16 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsServiceImpl.java

@@ -4357,10 +4357,15 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
     }
 
     @Override
-    public Goods getGoodsByIdTenant(Long goodsId, Long tenantId) {
+    public Goods getGoodsByIdTenant(Long goodsId,Long tenantId) {
         return baseMapper.queryGoodsByIdTenant(goodsId,tenantId);
     }
 
+    @Override
+    public Goods getGoodsByIdNotTenant(Long goodsId) {
+        return baseMapper.getGoodsByIdNotTenant(goodsId);
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean updateGoodsRepair(UpdateGoodsRepairBo bo) {
@@ -4534,6 +4539,16 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
         return goodsVo;
     }
 
+    @Override
+    public List<GoodsVo> getAlikeGoods(AlikeGoodsBo bo) {
+        Goods goods = getGoodsByIdNotTenant(bo.getGoodsId());
+        bo.setTenantId(goods.getTenantId());
+        if (ObjectUtils.isNull(goods)){
+            throw new CustomException("商品ID有误!");
+        }
+        return baseMapper.getAlikeGoods(goods);
+    }
+
     private BigDecimal getActivityPrice(Long goodsId,String code){
         ActivityGoodsPrice goodsPrice = iActivityGoodsPriceService.getOne(new LambdaQueryWrapper<ActivityGoodsPrice>()
                 .eq(ActivityGoodsPrice::getGoodsId, goodsId)

+ 1 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/mapper/OrderMapper.java

@@ -19,7 +19,7 @@ import java.util.List;
  * @date 2021-11-08
  */
 public interface OrderMapper extends BaseMapper<Order> {
-    List<OrderListVo> selectList(OrderQueryBo bo);
+    List<OrderListVo> selectListByBo(OrderQueryBo bo);
 
     Integer selectUserClass(@Param("goodsId") Long goodsId,@Param("userId") Long userId);
 

+ 3 - 2
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderServiceImpl.java

@@ -227,7 +227,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                 bo.setRefundStatus(2);
             }
         }
-        List<OrderListVo> orderListVos = this.baseMapper.selectList(bo);
+        List<OrderListVo> orderListVos = this.baseMapper.selectListByBo(bo);
         for (OrderListVo vo : orderListVos) {
             if (Validator.isNotEmpty(vo.getRebuyOrderGoodsId()) && vo.getRebuyOrderGoodsId().longValue() > 0) {
                 vo.setRebuy(this.baseMapper.getGradePeriod(vo.getRebuyOrderGoodsId(), vo.getUserId()));
@@ -971,8 +971,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 
     private void orderCostHandle(Order add) {
         add.setCheckStatus(1);//C端订单不需要审核
-        add.setRefundStatus(0);
+        add.setRefundStatus(1);
         add.setInvoiceStatus(0);
+        add.setFinishStatus(0);
         add.setCreditStatus(0);
         add.setOrderRefund(BigDecimal.ZERO);
         add.setOrderRefunded(BigDecimal.ZERO);

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

@@ -71,6 +71,7 @@ import com.zhongzheng.modules.user.domain.UserSubscribe;
 import com.zhongzheng.modules.user.service.IUserService;
 import com.zhongzheng.modules.user.vo.UserSubscribeVo;
 import com.zhongzheng.modules.user.vo.UserVo;
+import net.sf.jsqlparser.statement.select.Top;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -179,6 +180,9 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
     @Value("${oldSys.host}")
     private String OLD_SYS_HOST;
 
+    @Value("${oldOrder.finishOrder}")
+    private String FINISH_ORDER;
+
     @Override
     public TopOldOrderVo queryById(String orderSn) {
         //查询视图 v_top_order
@@ -198,8 +202,8 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
             }
             //业务分类
             TopOldOrderGoods orderGoods = topOrderGoodsService.getOne(new LambdaQueryWrapper<TopOldOrderGoods>().eq(TopOldOrderGoods::getOrderSn, orderVo.getOrderSn()).last("limit 1"));
-            orderVo.setSchemeName(orderGoods.getBusinessFullName().substring(0,4));
-        }else {
+            orderVo.setSchemeName(orderGoods.getBusinessFullName().substring(0, 4));
+        } else {
             orderVo.setSchemeName("学校业务");
         }
         if (ObjectUtils.isNotNull(orderVo.getOrderReceived()) && ObjectUtils.isNotNull(orderVo.getOrderRefunded())) {
@@ -217,16 +221,14 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
             orderVoList.forEach(item -> {
                 List<String> businessNames = baseMapper.queryBusinessBySn(item.getOrderSn());
                 item.setBusinessNames(businessNames);
-                if (item.getOrderFrom() == 2) {
-                    //B端订单转账凭证
-                    List<TopOldOrderAttachment> list = topOrderAttachmentService
-                            .list(new LambdaQueryWrapper<TopOldOrderAttachment>()
-                                    .eq(TopOldOrderAttachment::getOrderSn, item.getOrderSn())
-                                    .eq(TopOldOrderAttachment::getAttachmentType, 1)
-                                    .eq(TopOldOrderAttachment::getStatus, 1));
-                    if (CollectionUtils.isNotEmpty(list)) {
-                        item.setAttachmentList(list.stream().map(x -> BeanUtil.toBean(x, TopOldOrderAttachmentVo.class)).collect(Collectors.toList()));
-                    }
+                //订单转账凭证
+                List<TopOldOrderAttachment> attachmentList = topOrderAttachmentService
+                        .list(new LambdaQueryWrapper<TopOldOrderAttachment>()
+                                .eq(TopOldOrderAttachment::getOrderSn, item.getOrderSn())
+                                .eq(TopOldOrderAttachment::getAttachmentType, 1)
+                                .eq(TopOldOrderAttachment::getStatus, 1));
+                if (CollectionUtils.isNotEmpty(attachmentList)) {
+                    item.setAttachmentList(attachmentList.stream().map(x -> BeanUtil.toBean(x, TopOldOrderAttachmentVo.class)).collect(Collectors.toList()));
                 }
                 if (ObjectUtils.isNotNull(item.getOrderReceived()) && ObjectUtils.isNotNull(item.getOrderRefunded())) {
                     item.setOrderPractical(item.getOrderReceived().subtract(item.getOrderRefunded()));
@@ -284,7 +286,6 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
                 .eq(TopCostTp::getTenantId, bo.getTenantId()).eq(TopCostTp::getDefaultStatus, 1).last("limit 1"));
         if (ObjectUtils.isNotNull(costTp)) {
             TopCostTpVo topCostTpVo = BeanUtil.toBean(costTp, TopCostTpVo.class);
-            List<TopCostTpItemVo> itemVoList = new ArrayList<>();
             //成本项
             BigDecimal costTotal = new BigDecimal("0.00");//成本
             BigDecimal profitTotal = new BigDecimal("0.00"); //盈亏
@@ -328,7 +329,13 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
                 }
                 costTotal = costTotal.add(cost);
                 profitTotal = profitTotal.add(profit);
-                itemVoList.add(BeanUtil.toBean(topCostTpItem, TopCostTpItemVo.class));
+            }
+            List<TopCostTpItem> costTpItemList = topCostTpItemService
+                    .list(new LambdaQueryWrapper<TopCostTpItem>()
+                            .eq(TopCostTpItem::getTpId, costTp.getTpId())
+                            .eq(TopCostTpItem::getStatus, 1));
+            if (CollectionUtils.isNotEmpty(costTpItemList)) {
+                List<TopCostTpItemVo> itemVoList = costTpItemList.stream().map(x -> BeanUtil.toBean(x, TopCostTpItemVo.class)).collect(Collectors.toList());
                 topCostTpVo.setItemList(itemVoList);
             }
             add.setOrderCost(costTotal);
@@ -350,7 +357,7 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
             List<TopOldOrderGoods> collect = bo.getOrderGoodsList().stream().map(item -> BeanUtil.toBean(item, TopOldOrderGoods.class)).collect(Collectors.toList());
             //学员身份证加密
             collect.forEach(x -> {
-                if (ObjectUtils.isNotNull(x.getUserCard())){
+                if (ObjectUtils.isNotNull(x.getUserCard())) {
                     x.setUserCard(EncryptHandler.encrypt(x.getUserCard()));
                 }
                 x.setCheckStatus(0);//待审核
@@ -399,186 +406,196 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
     }
 
 
-
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean editOrder(TopOldOrderAddBo bo) {
         //校验订单号
         TopOldOrder order = baseMapper.getOrderBySn(bo.getOrderSn());
-        if (ObjectUtils.isNull(order)){
-            throw new CustomException("订单号有误:"+bo.getOrderSn());
+        if (ObjectUtils.isNull(order)) {
+            throw new CustomException("订单号有误:" + bo.getOrderSn());
         }
-        if (order.getCheckStatus() == 1){
-            throw new CustomException("订单已通过审核,修改订单请重新提审:"+bo.getOrderSn());
+        if (order.getCheckStatus() == 1) {
+            throw new CustomException("订单已通过审核,修改订单请重新提审:" + bo.getOrderSn());
         }
 
         TopOldOrder edit = BeanUtil.toBean(bo, TopOldOrder.class);
         validEntityBeforeSave(edit);
         edit.setCreateTime(DateUtils.getNowTime());
         edit.setUpdateTime(DateUtils.getNowTime());
-        // 获取企业默认成本模板
-        TopCostTp costTp = topCostTpService.getOne(new LambdaQueryWrapper<TopCostTp>()
-                .eq(TopCostTp::getTenantId, bo.getTenantId()).eq(TopCostTp::getDefaultStatus, 1).last("limit 1"));
-        if (ObjectUtils.isNotNull(costTp)) {
-            TopCostTpVo topCostTpVo = BeanUtil.toBean(costTp, TopCostTpVo.class);
-            List<TopCostTpItemVo> itemVoList = new ArrayList<>();
-            //成本项
-            BigDecimal costTotal = new BigDecimal("0.00");//成本
-            BigDecimal profitTotal = new BigDecimal("0.00"); //盈亏
-            for (TopOldOrderGoodsAddBo orderGoods : bo.getOrderGoodsList()) {
-                BigDecimal goodsPrice = orderGoods.getGoodsRealPrice();
-                List<TopCostTpItem> items = topCostTpItemService.getCostByBusiness(orderGoods.getBusinessFullName(), costTp.getTpId());
-                if (CollectionUtils.isEmpty(items)) {
-                    //匹配不到成本项
-                    continue;
-                }
-                //根据订单金额匹配成本阶梯
-                List<TopCostTpItem> tpItems = items.stream().filter(x ->
-                        (ObjectUtils.isNull(x.getMinValue()) && ObjectUtils.isNull(x.getMaxValue()))
-                                || (goodsPrice.compareTo(x.getMinValue()) > 0 && goodsPrice.compareTo(x.getMaxValue()) < 0)
-                                || (goodsPrice.compareTo(x.getMinValue()) == 0 && goodsPrice.compareTo(x.getMaxValue()) == 0)).collect(Collectors.toList());
-                if (CollectionUtils.isEmpty(tpItems)) {
-                    //匹配不到成本项阶梯值
-                    continue;
-                }
-                if (tpItems.size() > 1) {
-                    //匹配到多个成本项
-                    throw new CustomException(String.format("成本项阶梯匹配有误!(有多个)请检查【%s,价格:%s】", orderGoods.getBusinessFullName(), goodsPrice.toString()));
-                }
-                //换算订单成本和盈亏
-                TopCostTpItem topCostTpItem = tpItems.stream().findFirst().get();
-                BigDecimal cost = new BigDecimal("0.00");//成本
-                BigDecimal profit = new BigDecimal("0.00"); //盈亏
-                BigDecimal bigDecimal = new BigDecimal("100");
-                switch (topCostTpItem.getItemType()) {
-                    case 1://百分比
-                        BigDecimal divide = topCostTpItem.getTypeValue().divide(bigDecimal);
-                        cost = goodsPrice.multiply(divide);
-                        profit = goodsPrice.subtract(cost);
-                        break;
-                    case 2://固定金额
-                        cost = topCostTpItem.getTypeValue();
-                        profit = goodsPrice.subtract(cost);
-                        break;
-                    default:
-                        break;
-                }
-                costTotal = costTotal.add(cost);
-                profitTotal = profitTotal.add(profit);
-                itemVoList.add(BeanUtil.toBean(topCostTpItem, TopCostTpItemVo.class));
-                topCostTpVo.setItemList(itemVoList);
-            }
-            edit.setOrderCost(costTotal);
-            edit.setOrderProfit(profitTotal);
-            edit.setCostJson(JSONObject.toJSONString(topCostTpVo));
-        }
-        edit.setCheckStatus(0);//待审核
-        edit.setRefundStatus(1);//退款状态:正常
-        edit.setFinishStatus(0);//完单状态:未完单
         //未收账款
         if (ObjectUtils.isNull(bo.getOrderReceived()) || bo.getOrderReceived().compareTo(new BigDecimal("0.00")) == 0) {
             edit.setOrderUncollected(bo.getPayPrice());
         } else {
             edit.setOrderUncollected(bo.getPayPrice().subtract(bo.getOrderReceived()));
         }
-        this.updateById(edit);
         //订单商品
         if (CollectionUtils.isNotEmpty(bo.getOrderGoodsList())) {
-            //删除之前关联重新添加
-            topOrderGoodsService.remove(new LambdaQueryWrapper<TopOldOrderGoods>().eq(TopOldOrderGoods::getOrderSn,edit.getOrderSn()));
-            List<TopOldOrderGoods> collect = bo.getOrderGoodsList().stream().map(item -> BeanUtil.toBean(item, TopOldOrderGoods.class)).collect(Collectors.toList());
-            //学员身份证加密
-            collect.forEach(x -> {
-                if (ObjectUtils.isNotNull(x.getUserCard())){
-                    x.setUserCard(EncryptHandler.encrypt(x.getUserCard()));
+            bo.getOrderGoodsList().forEach(item -> {
+                if (item.getCheckStatus() == 0) {
+                    //新增
+                    TopOldOrderGoods oldOrderGoods = BeanUtil.toBean(item, TopOldOrderGoods.class);
+                    oldOrderGoods.setTenantId(edit.getTenantId());
+                    oldOrderGoods.setStatus(1);
+                    oldOrderGoods.setUserCard(EncryptHandler.encrypt(item.getUserCard()));
+                    oldOrderGoods.setCheckStatus(order.getCheckStatus());
+                    topOrderGoodsService.save(oldOrderGoods);
+                }else if (item.getCheckStatus() == -1){
+                    //取消
+                    topOrderGoodsService.update(new LambdaUpdateWrapper<TopOldOrderGoods>()
+                            .set(TopOldOrderGoods::getCheckStatus,-1)
+                            .eq(TopOldOrderGoods::getOrderSn,item.getOrderSn())
+                            .eq(TopOldOrderGoods::getSignId,item.getSignId()));
                 }
             });
-            topOrderGoodsService.saveBatch(collect);
         }
 
         //订单附件
         if (CollectionUtils.isNotEmpty(bo.getOrderAttachmentList())) {
             //删除之前关联重新添加
-            topOrderAttachmentService.remove(new LambdaQueryWrapper<TopOldOrderAttachment>().eq(TopOldOrderAttachment::getOrderSn,edit.getOrderSn()));
+            topOrderAttachmentService.remove(new LambdaQueryWrapper<TopOldOrderAttachment>().eq(TopOldOrderAttachment::getOrderSn, edit.getOrderSn()));
             List<TopOldOrderAttachment> collect = bo.getOrderAttachmentList().stream().map(item -> BeanUtil.toBean(item, TopOldOrderAttachment.class)).collect(Collectors.toList());
             topOrderAttachmentService.saveBatch(collect);
         }
-
+        //重新计算成本
+        if (StringUtils.isNotBlank(order.getCostJson())) {
+            recalculateCost(order.getCostJson(),edit);
+        }
+        this.updateById(edit);
         return true;
     }
 
+    private void recalculateCost(String costJson, TopOldOrder order) {
+        TopCostTpVo topCostTpVo = JSON.parseObject(costJson, TopCostTpVo.class);
+        //成本项
+        BigDecimal costTotal = new BigDecimal("0.00");//成本
+        BigDecimal profitTotal = new BigDecimal("0.00"); //盈亏
+        List<TopOldOrderGoods> orderGoodsList = topOrderGoodsService.list(new LambdaQueryWrapper<TopOldOrderGoods>()
+                .eq(TopOldOrderGoods::getOrderSn, order.getOrderSn()).ne(TopOldOrderGoods::getCheckStatus, -1).eq(TopOldOrderGoods::getStatus, 1));
+        for (TopOldOrderGoods orderGoods : orderGoodsList) {
+            BigDecimal goodsPrice = orderGoods.getGoodsRealPrice();
+            List<TopCostTpItemVo> items = topCostTpVo.getItemList();
+            if (CollectionUtils.isEmpty(items)) {
+                //匹配不到成本项
+                continue;
+            }
+            //根据订单金额匹配成本阶梯
+            List<TopCostTpItemVo> tpItems = items.stream().filter(x ->
+                    (ObjectUtils.isNull(x.getMinValue()) && ObjectUtils.isNull(x.getMaxValue()))
+                            || (goodsPrice.compareTo(x.getMinValue()) > 0 && goodsPrice.compareTo(x.getMaxValue()) < 0)
+                            || (goodsPrice.compareTo(x.getMinValue()) == 0 && goodsPrice.compareTo(x.getMaxValue()) == 0)).collect(Collectors.toList());
+            if (CollectionUtils.isEmpty(tpItems)) {
+                //匹配不到成本项阶梯值
+                continue;
+            }
+            if (tpItems.size() > 1) {
+                //匹配到多个成本项
+                throw new CustomException(String.format("成本项阶梯匹配有误!(有多个)请检查【%s,价格:%s】", orderGoods.getBusinessFullName(), goodsPrice.toString()));
+            }
+            //换算订单成本和盈亏
+            TopCostTpItemVo topCostTpItem = tpItems.stream().findFirst().get();
+            BigDecimal cost = new BigDecimal("0.00");//成本
+            BigDecimal profit = new BigDecimal("0.00"); //盈亏
+            BigDecimal bigDecimal = new BigDecimal("100");
+            switch (topCostTpItem.getItemType()) {
+                case 1://百分比
+                    BigDecimal divide = topCostTpItem.getTypeValue().divide(bigDecimal);
+                    cost = goodsPrice.multiply(divide);
+                    profit = goodsPrice.subtract(cost);
+                    break;
+                case 2://固定金额
+                    cost = topCostTpItem.getTypeValue();
+                    profit = goodsPrice.subtract(cost);
+                    break;
+                default:
+                    break;
+            }
+            costTotal = costTotal.add(cost);
+            profitTotal = profitTotal.add(profit);
+        }
+        order.setOrderCost(costTotal);
+        order.setOrderProfit(profitTotal);
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean editOrderCheck(TopOldOrderAddBo bo) {
         TopOldOrder order = baseMapper.getOrderBySn(bo.getOrderSn());
-        if (ObjectUtils.isNull(order)){
-            throw new CustomException("订单号有误:"+bo.getOrderSn());
+        if (ObjectUtils.isNull(order)) {
+            throw new CustomException("订单号有误:" + bo.getOrderSn());
         }
-        if (order.getOrderFrom() == 1){
-            throw new CustomException("订单号无效:"+bo.getOrderSn());
+        if (order.getOrderFrom() == 1) {
+            throw new CustomException("订单号无效:" + bo.getOrderSn());
         }
-        if (CollectionUtils.isEmpty(bo.getOrderGoodsList())){
+        if (CollectionUtils.isEmpty(bo.getOrderGoodsList())) {
             return false;
         }
         List<TopOldOrderGoods> add = new ArrayList<>();
         List<Long> signIds = new ArrayList<>();
         //订单学员情况
         for (TopOldOrderGoodsAddBo orderGoods : bo.getOrderGoodsList()) {
-            switch (orderGoods.getCheckStatus()){
+            switch (orderGoods.getCheckStatus()) {
                 case 0://新增
                     orderGoods.setCheckStatus(0);//待审核
-                    add.add(BeanUtil.toBean(orderGoods,TopOldOrderGoods.class));
+                    TopOldOrderGoods oldOrderGoods = BeanUtil.toBean(orderGoods, TopOldOrderGoods.class);
+                    oldOrderGoods.setUserCard(EncryptHandler.encrypt(oldOrderGoods.getUserCard()));
+                    add.add(oldOrderGoods);
                     break;
                 case -1://删除
                     signIds.add(orderGoods.getSignId());
                     break;
+                default:
+                    break;
             }
         }
-        if (CollectionUtils.isNotEmpty(add)){
+        if (CollectionUtils.isNotEmpty(add)) {
             topOrderGoodsService.saveBatch(add);
         }
-        if (CollectionUtils.isNotEmpty(signIds)){
+        if (CollectionUtils.isNotEmpty(signIds)) {
             topOrderGoodsService.update(new LambdaUpdateWrapper<TopOldOrderGoods>()
-             .set(TopOldOrderGoods::getCheckStatus,-1)//删除学员
-             .eq(TopOldOrderGoods::getOrderSn,bo.getOrderSn())
-             .in(TopOldOrderGoods::getSignId,signIds));
+                    .set(TopOldOrderGoods::getCheckStatus, -1)//删除学员
+                    .eq(TopOldOrderGoods::getOrderSn, bo.getOrderSn())
+                    .in(TopOldOrderGoods::getSignId, signIds));
         }
         //订单待审核
         TopOldOrder oldOrder = BeanUtil.toBean(bo, TopOldOrder.class);
         oldOrder.setOrderId(order.getOrderId());
         oldOrder.setCheckStatus(0);//待审核
-        oldOrder.setCheckRemark(bo.getOrderGoodsList().stream().map(x -> x.getSignId().toString()).collect(Collectors.joining()));
+        oldOrder.setCheckRemark(bo.getOrderGoodsList().stream().map(x -> x.getSignId().toString()).collect(Collectors.joining(",")));
+        //重新计算成本
+        if (StringUtils.isNotBlank(order.getCostJson())) {
+            recalculateCost(order.getCostJson(),oldOrder);
+        }
         updateById(oldOrder);
 
-        if (bo.getOrderBase() == 1){
+        if (bo.getOrderBase() == 1) {
             //新系统订单
             List<TopOldOrderGoods> list = topOrderGoodsService
                     .list(new LambdaQueryWrapper<TopOldOrderGoods>()
                             .eq(TopOldOrderGoods::getOrderSn, bo.getOrderSn())
                             .eq(TopOldOrderGoods::getCheckStatus, -1));
-            if (CollectionUtils.isNotEmpty(list)){
+            if (CollectionUtils.isNotEmpty(list)) {
                 //暂时关闭学员订单
                 list.forEach(item -> {
                     User user = userService.getOne(new LambdaQueryWrapper<User>().eq(User::getIdCard, item.getUserCard()));
-                    if (ObjectUtil.isNull(user)){
+                    if (ObjectUtil.isNull(user)) {
                         return;
                     }
                     List<Order> orderList = orderService
                             .list(new LambdaQueryWrapper<Order>()
-                            .eq(Order::getUserId, user.getUserId())
-                            .eq(Order::getInputOrderSn, oldOrder.getInputOrderSn())
-                            .eq(Order::getStatus, 1));
-                    if (CollectionUtils.isNotEmpty(orderList)){
+                                    .eq(Order::getUserId, user.getUserId())
+                                    .eq(Order::getInputOrderSn, oldOrder.getInputOrderSn())
+                                    .eq(Order::getStatus, 1));
+                    if (CollectionUtils.isNotEmpty(orderList)) {
                         List<OrderGoods> orderGoods = orderGoodsService.list(new LambdaQueryWrapper<OrderGoods>()
                                 .in(OrderGoods::getOrderSn, orderList.stream().map(Order::getOrderSn).collect(Collectors.toList()))
                                 .eq(OrderGoods::getGoodsId, item.getGoodsId())
-                                .eq(OrderGoods::getStatus,1));
-                        if (CollectionUtils.isNotEmpty(orderGoods)){
+                                .eq(OrderGoods::getStatus, 1));
+                        if (CollectionUtils.isNotEmpty(orderGoods)) {
                             orderGoods.forEach(x -> x.setStatus(-1));
                             orderGoodsService.updateBatchById(orderGoods);
                             orderService.update(new LambdaUpdateWrapper<Order>()
-                                    .set(Order::getStatus,-1)
-                                    .in(Order::getOrderSn,orderGoods.stream().map(OrderGoods::getOrderSn).collect(Collectors.toList())));
+                                    .set(Order::getStatus, -1)
+                                    .in(Order::getOrderSn, orderGoods.stream().map(OrderGoods::getOrderSn).collect(Collectors.toList())));
                         }
                     }
                 });
@@ -692,20 +709,20 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
                 if (ObjectUtils.isNull(data)) {
                     //data 为空
                     list.forEach(x -> x.setStudyStatus("未开始"));
-                }else {
+                } else {
                     List<TopOldOrderStudyVo> studyVos = JSONArray.parseArray(JSONObject.toJSONString(data), TopOldOrderStudyVo.class);
                     list.forEach(item -> {
                         item.setStudyStatus("未开始");
                         TopOldOrderStudyVo studyVo = studyVos.stream().filter(x -> x.getUnderOrdeEnrollItemId().equals(item.getSignId())
                                 && x.getIdNum().equals(item.getUserCard())).findFirst().orElse(null);
                         if (ObjectUtils.isNotNull(studyVo) && ObjectUtils.isNotNull(studyVo.getStudyHours())) {
-                                if (ObjectUtils.isNull(studyVo.getStudyHours()) && studyVo.getStudyHours() == 0) {
-                                    item.setStudyStatus("未开始");
-                                } else if (studyVo.getStudyHours() < studyVo.getTotalHours()) {
-                                    item.setStudyStatus("学习中");
-                                } else {
-                                    item.setStudyStatus("已结束");
-                                }
+                            if (ObjectUtils.isNull(studyVo.getStudyHours()) && studyVo.getStudyHours() == 0) {
+                                item.setStudyStatus("未开始");
+                            } else if (studyVo.getStudyHours() < studyVo.getTotalHours()) {
+                                item.setStudyStatus("学习中");
+                            } else {
+                                item.setStudyStatus("已结束");
+                            }
                         }
                     });
                 }
@@ -752,29 +769,29 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
         LambdaQueryWrapper<TopOldOrderGoods> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(TopOldOrderGoods::getOrderSn, oldOrder.getOrderSn());
         wrapper.eq(TopOldOrderGoods::getStatus, 1);
-        if (StringUtils.isNotBlank(oldOrder.getCheckRemark())){
-            wrapper.in(TopOldOrderGoods::getSignId,Arrays.asList(oldOrder.getCheckRemark().split(",")));
+        if (StringUtils.isNotBlank(oldOrder.getCheckRemark())) {
+            wrapper.in(TopOldOrderGoods::getSignId, Arrays.asList(oldOrder.getCheckRemark().split(",")));
             singIds = Arrays.stream(oldOrder.getCheckRemark().split(",")).collect(Collectors.toList());
         }
         List<TopOldOrderGoods> orderGoods = topOrderGoodsService.list(wrapper);
-        if (CollectionUtils.isNotEmpty(orderGoods)){
+        if (CollectionUtils.isNotEmpty(orderGoods)) {
             orderGoods.forEach(x -> x.setCheckStatus(bo.getCheckStatus()));
             topOrderGoodsService.updateBatchById(orderGoods);
         }
-        if (CollectionUtils.isNotEmpty(singIds) && oldOrder.getOrderBase() == 1){
+        if (CollectionUtils.isNotEmpty(singIds) && oldOrder.getOrderBase() == 1) {
             //处理退学学员 并且订单在新系统
-            switch (bo.getCheckStatus()){
+            switch (bo.getCheckStatus()) {
                 case 1://审核通过
                     List<TopOldOrderGoods> list = topOrderGoodsService
                             .list(new LambdaQueryWrapper<TopOldOrderGoods>()
-                            .eq(TopOldOrderGoods::getOrderSn, oldOrder.getOrderSn())
-                            .in(TopOldOrderGoods::getSignId, singIds)
-                            .eq(TopOldOrderGoods::getCheckStatus, -1));
+                                    .eq(TopOldOrderGoods::getOrderSn, oldOrder.getOrderSn())
+                                    .in(TopOldOrderGoods::getSignId, singIds)
+                                    .eq(TopOldOrderGoods::getCheckStatus, -1));
                     List<String> userNames = new ArrayList<>();
                     list.forEach(item -> {
                         User user = userService.getOne(new LambdaQueryWrapper<User>().eq(User::getIdCard, item.getUserCard()));
                         userNames.add(user.getNickname());
-                        if (ObjectUtil.isNull(user)){
+                        if (ObjectUtil.isNull(user)) {
                             return;
                         }
                         List<Order> orderList = orderService
@@ -782,18 +799,18 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
                                         .eq(Order::getUserId, user.getUserId())
                                         .eq(Order::getInputOrderSn, oldOrder.getInputOrderSn())
                                         .eq(Order::getStatus, -1));
-                        if (CollectionUtils.isNotEmpty(orderList)){
+                        if (CollectionUtils.isNotEmpty(orderList)) {
                             List<OrderGoods> orderGoodsList = orderGoodsService.list(new LambdaQueryWrapper<OrderGoods>()
                                     .in(OrderGoods::getOrderSn, orderList.stream().map(Order::getOrderSn).collect(Collectors.toList()))
                                     .eq(OrderGoods::getGoodsId, item.getGoodsId())
-                                    .eq(OrderGoods::getStatus,-1));
-                            if (CollectionUtils.isNotEmpty(orderGoodsList)){
+                                    .eq(OrderGoods::getStatus, -1));
+                            if (CollectionUtils.isNotEmpty(orderGoodsList)) {
                                 //处理班级
                                 classGradeUserService.update(new LambdaUpdateWrapper<ClassGradeUser>()
-                                .in(ClassGradeUser::getGradeId,
-                                        orderGoodsList.stream().filter(x -> ObjectUtils.isNotNull(x.getGradeId())).map(OrderGoods::getGradeId).collect(Collectors.toList()))
-                                .eq(ClassGradeUser::getUserId,user.getUserId())
-                                .set(ClassGradeUser::getStatus,0));//移除班级
+                                        .in(ClassGradeUser::getGradeId,
+                                                orderGoodsList.stream().filter(x -> ObjectUtils.isNotNull(x.getGradeId())).map(OrderGoods::getGradeId).collect(Collectors.toList()))
+                                        .eq(ClassGradeUser::getUserId, user.getUserId())
+                                        .set(ClassGradeUser::getStatus, 0));//移除班级
                             }
                         }
                     });
@@ -802,40 +819,40 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
                     //消息通知教务
                     this.informRemind(userNames);
                     break;
-               case 2: //审核未通过
-                   List<TopOldOrderGoods> list2 = topOrderGoodsService
-                           .list(new LambdaQueryWrapper<TopOldOrderGoods>()
-                                   .eq(TopOldOrderGoods::getOrderSn, oldOrder.getOrderSn())
-                                   .in(TopOldOrderGoods::getSignId, singIds)
-                                   .eq(TopOldOrderGoods::getCheckStatus, -1));
-                   list2.forEach(item -> {
-                       User user = userService.getOne(new LambdaQueryWrapper<User>().eq(User::getIdCard, item.getUserCard()));
-                       if (ObjectUtil.isNull(user)){
-                           return;
-                       }
-                       List<Order> orderList = orderService
-                               .list(new LambdaQueryWrapper<Order>()
-                                       .eq(Order::getUserId, user.getUserId())
-                                       .eq(Order::getInputOrderSn, oldOrder.getInputOrderSn())
-                                       .eq(Order::getStatus, -1));
-                       if (CollectionUtils.isNotEmpty(orderList)){
-                           List<OrderGoods> orderGoodsList = orderGoodsService.list(new LambdaQueryWrapper<OrderGoods>()
-                                   .in(OrderGoods::getOrderSn, orderList.stream().map(Order::getOrderSn).collect(Collectors.toList()))
-                                   .eq(OrderGoods::getGoodsId, item.getGoodsId())
-                                   .eq(OrderGoods::getStatus,-1));
-                           if (CollectionUtils.isNotEmpty(orderGoodsList)){
-                               //改为正常
-                               orderGoodsList.forEach(x -> x.setStatus(1));
-                               orderGoodsService.updateBatchById(orderGoodsList);
-                               orderService.update(new LambdaUpdateWrapper<Order>()
-                                       .set(Order::getStatus,1)
-                                       .in(Order::getOrderSn,orderGoodsList.stream().map(OrderGoods::getOrderSn).collect(Collectors.toList())));
-                           }
-                       }
-                   });
-                   //清除标识IDs
-                   oldOrder.setCheckRemark("");
-                   break;
+                case 2: //审核未通过
+                    List<TopOldOrderGoods> list2 = topOrderGoodsService
+                            .list(new LambdaQueryWrapper<TopOldOrderGoods>()
+                                    .eq(TopOldOrderGoods::getOrderSn, oldOrder.getOrderSn())
+                                    .in(TopOldOrderGoods::getSignId, singIds)
+                                    .eq(TopOldOrderGoods::getCheckStatus, -1));
+                    list2.forEach(item -> {
+                        User user = userService.getOne(new LambdaQueryWrapper<User>().eq(User::getIdCard, item.getUserCard()));
+                        if (ObjectUtil.isNull(user)) {
+                            return;
+                        }
+                        List<Order> orderList = orderService
+                                .list(new LambdaQueryWrapper<Order>()
+                                        .eq(Order::getUserId, user.getUserId())
+                                        .eq(Order::getInputOrderSn, oldOrder.getInputOrderSn())
+                                        .eq(Order::getStatus, -1));
+                        if (CollectionUtils.isNotEmpty(orderList)) {
+                            List<OrderGoods> orderGoodsList = orderGoodsService.list(new LambdaQueryWrapper<OrderGoods>()
+                                    .in(OrderGoods::getOrderSn, orderList.stream().map(Order::getOrderSn).collect(Collectors.toList()))
+                                    .eq(OrderGoods::getGoodsId, item.getGoodsId())
+                                    .eq(OrderGoods::getStatus, -1));
+                            if (CollectionUtils.isNotEmpty(orderGoodsList)) {
+                                //改为正常
+                                orderGoodsList.forEach(x -> x.setStatus(1));
+                                orderGoodsService.updateBatchById(orderGoodsList);
+                                orderService.update(new LambdaUpdateWrapper<Order>()
+                                        .set(Order::getStatus, 1)
+                                        .in(Order::getOrderSn, orderGoodsList.stream().map(OrderGoods::getOrderSn).collect(Collectors.toList())));
+                            }
+                        }
+                    });
+                    //清除标识IDs
+                    oldOrder.setCheckRemark("");
+                    break;
             }
         }
 
@@ -848,7 +865,7 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
         params.put("sign", sign);
         params.put("orderSn", bo.getOrderSn());
         params.put("status", bo.getCheckStatus().toString());
-        if (StringUtils.isNotBlank(bo.getCheckReason())){
+        if (StringUtils.isNotBlank(bo.getCheckReason())) {
             params.put("remark", bo.getCheckReason());
         }
         params.put("auditor", bo.getLoginName());
@@ -867,14 +884,14 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
 
     public void informRemind(List<String> userNames) {
         //学员退学提醒
-        List<InformRemindRelevance> remindRelevances = informRemindRelevanceService.list(new LambdaQueryWrapper<InformRemindRelevance>().eq(InformRemindRelevance::getType,1));
+        List<InformRemindRelevance> remindRelevances = informRemindRelevanceService.list(new LambdaQueryWrapper<InformRemindRelevance>().eq(InformRemindRelevance::getType, 1));
         InformRemindVo informRemindVo = informRemindService.queryByName("学员退学提醒");
         for (InformRemindRelevance remindVo : remindRelevances) {
             SysUser sysUser = sysUserService.getById(remindVo.getRelevanceId());
-            if (ObjectUtil.isNull(sysUser)){
+            if (ObjectUtil.isNull(sysUser)) {
                 continue;
             }
-            if (informRemindVo.getWayStatus().equals(1))  {
+            if (informRemindVo.getWayStatus().equals(1)) {
                 InformSysUserAddBo informUserAddBo = new InformSysUserAddBo();
                 informUserAddBo.setUserId(sysUser.getUserId());
                 informUserAddBo.setSendStatus(1);
@@ -884,7 +901,7 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
                 informUserAddBo.setRemindId(informRemindVo.getId());
                 informUserAddBo.setSystemStatus(1);
                 informUserAddBo.setRemind("学员退学提醒,请尽快处理");
-                informUserAddBo.setText(String.format("学员【%s】已退学,请及时处理",userNames.stream().collect(Collectors.joining())));
+                informUserAddBo.setText(String.format("学员【%s】已退学,请及时处理", userNames.stream().collect(Collectors.joining())));
                 informSysUserService.insertByAddBo(informUserAddBo);
             }
             if (informRemindVo.getNoteStatus().equals(1) && StringUtils.isNotBlank(sysUser.getPhonenumber())) {
@@ -1309,11 +1326,11 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean finishOrder(TopFinishOrderBo bo) {
-        //todo 完单角色校验
+        // 完单角色校验
         if (CollectionUtils.isEmpty(bo.getOrderSnList())) {
             throw new CustomException("订单号不能为空");
         }
-        if (ObjectUtils.isNotNull(bo.getLoginId())){
+        if (ObjectUtils.isNotNull(bo.getLoginId())) {
             validFinish(bo);
         }
         bo.getOrderSnList().forEach(orderSn -> {
@@ -1377,6 +1394,23 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
                 }
         );
 
+        //完单通知业务员
+        Map<String, String> params = new HashMap<>();
+        Long nowTime = DateUtils.getNowTime();
+        String sign = ToolsUtils.EncoderByMd5(nowTime+ "pubilc2022");
+        params.put("stamp", nowTime.toString());
+        params.put("sign", sign);
+        params.put("orderSn", bo.getOrderSnList().stream().collect(Collectors.joining()));
+        String respone = "";
+        try {
+            respone = HttpUtils.postFormBody(FINISH_ORDER, params);
+            if (!respone.contains("\"Status\":true")) {
+                throw new CustomException("旧系统完单接口请求错误");
+            }
+        } catch (IOException e) {
+            log.error("旧系统完单接口请求错误" + respone);
+            throw new CustomException("旧系统完单接口请求错误");
+        }
         return true;
     }
 
@@ -1951,7 +1985,7 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
         Long nowTime = DateUtils.getNowTime();
         String ToBankConnetNum = "";
         String orderSn = "10002304261108345450143";
-        String sign = ToolsUtils.EncoderByMd5(orderSn+nowTime.toString()+"pubilc2022");
+        String sign = ToolsUtils.EncoderByMd5(orderSn + nowTime.toString() + "pubilc2022");
         params.put("stamp", nowTime.toString());
         params.put("sign", sign);
         params.put("MainUniqueId", orderSn);
@@ -1960,21 +1994,21 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
         params.put("ToBankTypeName", "招商银行深圳分行");
         params.put("Money", "0.01");
         params.put("TrainOrgId", "1");
-        if(Validator.isNotEmpty(ToBankConnetNum)){
+        if (Validator.isNotEmpty(ToBankConnetNum)) {
             params.put("ToBankConnetNum", ToBankConnetNum);
         }
         String respone = "";
         System.out.println(params);
-        String path = OLD_SYS_HOST+"/WitSystem/BussinessApi/NeedToPay";
+        String path = OLD_SYS_HOST + "/WitSystem/BussinessApi/NeedToPay";
         try {
             respone = HttpUtils.postFormBody(path, params);
             System.out.println(respone);
             if (!respone.contains("\"Status\":true")) {
 
-                throw new CustomException("同步请求错误"+respone);
+                throw new CustomException("同步请求错误" + respone);
             }
         } catch (IOException e) {
-            throw new CustomException("同步请求错误"+e.getMessage());
+            throw new CustomException("同步请求错误" + e.getMessage());
         }
         return true;
     }
@@ -1991,23 +2025,23 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
                 .eq(TopOldSellerDiscount::getSellerKey, bo.getSellerKey())
                 .eq(TopOldSellerDiscount::getTenantId, bo.getTenantId())
                 .last("limit 1"));
-        return BeanUtil.toBean(discount,TopSellerDiscountVo.class);
+        return BeanUtil.toBean(discount, TopSellerDiscountVo.class);
     }
 
     @Override
     public TopOrderRevocationVo orderRevocation(TopOrderRevocationBo bo) {
         TopOldOrder order = baseMapper.getOrderBySn(bo.getOrderSn());
-        if (ObjectUtils.isNull(order)){
+        if (ObjectUtils.isNull(order)) {
             throw new CustomException("订单号有误!");
         }
-        if (order.getCheckStatus() == 1){
+        if (order.getCheckStatus() == 1) {
             throw new CustomException("审核已通过,不能撤销!");
         }
         order.setCheckStatus(3);//已撤销
         updateById(order);
         List<TopOldOrderGoods> orderGoods = topOrderGoodsService.list(new LambdaQueryWrapper<TopOldOrderGoods>()
                 .eq(TopOldOrderGoods::getOrderSn, order.getOrderSn()).eq(TopOldOrderGoods::getStatus, 1));
-        if (CollectionUtils.isNotEmpty(orderGoods)){
+        if (CollectionUtils.isNotEmpty(orderGoods)) {
             orderGoods.forEach(x -> x.setCheckStatus(3));//已撤销
             topOrderGoodsService.updateBatchById(orderGoods);
         }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/vo/TopOldOrderGoodsListVo.java

@@ -64,6 +64,8 @@ public class TopOldOrderGoodsListVo {
 	private String userPhone;
 	@ApiModelProperty("学员数量")
 	private Integer userCount;
+	@ApiModelProperty("学员状态:0待审核,1已通过,2未通过,3已撤销,-1已取消")
+	private Integer checkStatus;
 
 	private Long signId;
 

+ 26 - 1
zhongzheng-system/src/main/resources/mapper/modules/goods/GoodsMapper.xml

@@ -780,7 +780,11 @@
           AND tenant_id = #{tenantId}
     </select>
 
-
+    <select id="getGoodsByIdNotTenant" parameterType="java.lang.Long" resultType="com.zhongzheng.modules.goods.domain.Goods">
+        SELECT *
+        FROM `goods`
+        WHERE goods_id = #{goodsId}
+    </select>
     <update id="updateByTenant" parameterType="com.zhongzheng.modules.goods.domain.Goods">
         UPDATE goods
         SET `year`                  = #{year},
@@ -898,4 +902,25 @@
     </select>
 
 
+    <select id="getAlikeGoods" parameterType="com.zhongzheng.modules.goods.domain.Goods" resultType="com.zhongzheng.modules.goods.vo.GoodsVo">
+        SELECT g.*,
+               cet.education_name as educationName,
+               cb.business_name as businessName,
+               cpt.project_name as projectName,
+               m.category_name as categoryName
+        from goods g
+            LEFT JOIN course_education_type cet ON g.education_type_id = cet.id and cet.tenant_id = #{tenantId}
+            LEFT JOIN course_project_type cpt ON g.project_id = cpt.id and cpt.tenant_id = #{tenantId}
+            LEFT JOIN course_business cb ON g.business_id = cb.id and cb.tenant_id = #{tenantId}
+            LEFT JOIN major m ON g.major_id = m.id and m.tenant_id = #{tenantId}
+        where
+              g.goods_status = 1
+              and g.status = 1
+              and g.education_type_id = #{educationTypeId}
+              and g.project_id = #{projectId}
+              and g.business_id = #{businessId}
+              and g.stand_price = #{standPrice}
+              and g.tenant_id = #{tenantId}
+    </select>
+
 </mapper>

+ 3 - 1
zhongzheng-system/src/main/resources/mapper/modules/order/OrderGoodsMapper.xml

@@ -799,6 +799,7 @@
         <result property="businessName" column="business_name"/>
         <result property="goodsPrice" column="goods_price"/>
         <result property="goodsRealPrice" column="goods_real_price"/>
+        <result property="checkStatus" column="check_status"/>
     </resultMap>
 
     <select id="listByOrderSn" parameterType="com.zhongzheng.modules.top.goods.bo.TopOldOrderGoodsQuery" resultMap="getlist">
@@ -814,7 +815,8 @@
             g.subject_ids,
             CONCAT( cb.business_name, cpt.project_name ) AS business_name,
             og.goods_price,
-            og.goods_real_price
+            og.goods_real_price,
+            1 as check_status
         FROM
             order_goods og
                 LEFT JOIN goods g ON og.goods_id = g.goods_id

+ 1 - 1
zhongzheng-system/src/main/resources/mapper/modules/order/OrderMapper.xml

@@ -87,7 +87,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                 AND cgu.user_id = #{userId} where og.order_goods_id = #{orderGoodsId}
     </select>
 
-    <select id="selectList" parameterType="com.zhongzheng.modules.order.bo.OrderQueryBo" resultMap="OrderResultVo">
+    <select id="selectListByBo" parameterType="com.zhongzheng.modules.order.bo.OrderQueryBo" resultMap="OrderResultVo">
         SELECT
             o.*,
             g.goods_id,

+ 3 - 1
zhongzheng-system/src/main/resources/mapper/modules/top/TopOldOrderGoodsMapper.xml

@@ -39,6 +39,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="goodsPrice" column="goods_price"/>
         <result property="goodsRealPrice" column="goods_real_price"/>
         <result property="signId" column="sign_id"/>
+        <result property="checkStatus" column="check_status"/>
     </resultMap>
 
     <select id="getListByQuery" parameterType="com.zhongzheng.modules.top.goods.bo.TopOldOrderGoodsQuery" resultMap="getlist">
@@ -52,7 +53,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             business_name,
             goods_price,
             goods_real_price,
-            sign_id
+            sign_id,
+            check_status
         FROM
             top_old_order_goods
         WHERE

+ 92 - 64
zhongzheng-system/src/main/resources/mapper/modules/top/TopOldOrderMapper.xml

@@ -37,7 +37,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="orderUncollected" column="order_uncollected"/>
         <result property="orderReceived" column="order_received"/>
         <result property="remark" column="remark"/>
-        <result property="orderBusiness" column="order_business"/>
         <result property="costJson" column="cost_json"/>
         <result property="buyTime" column="buy_time"/>
     </resultMap>
@@ -115,69 +114,98 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </select>
 
 
-<!--    <select id="queryList_COUNT" resultType="Long">-->
-<!--        SELECT-->
-<!--        count(distinct vto.order_id )-->
-<!--        FROM-->
-<!--        ( SELECT DISTINCT order_sn-->
-<!--        <if test="businessFullName != null and businessFullName != '' and (userCard == null or userCard == '')">-->
-<!--            FROM `v_top_order_business`  where business_full_name = #{businessFullName}-->
-<!--        </if>-->
-<!--        <if test="userCard != null and userCard != '' and (businessFullName == null and businessFullName == '')">-->
-<!--            FROM `v_top_order_card`  where user_card = #{userCard,typeHandler=com.zhongzheng.common.type.EncryptHandler}-->
-<!--        </if>-->
-<!--        <if test="userCard != null and userCard != '' and businessFullName != null and businessFullName != ''">-->
-<!--            FROM (-->
-<!--            SELECT-->
-<!--            DISTINCT order_sn-->
-<!--            FROM-->
-<!--            ( SELECT order_sn FROM v_top_order_business WHERE business_full_name = #{businessFullName} UNION ALL SELECT order_sn FROM v_top_order_card-->
-<!--            WHERE user_card = #{userCard,typeHandler=com.zhongzheng.common.type.EncryptHandler}) b-->
-<!--            ) m-->
-<!--        </if>-->
-<!--        <if test="(userCard == null or userCard == '') and (businessFullName == null or businessFullName == '')">-->
-<!--            FROM (-->
-<!--            SELECT-->
-<!--            DISTINCT order_sn-->
-<!--            FROM-->
-<!--            ( SELECT order_sn FROM v_top_order_business UNION ALL SELECT order_sn FROM v_top_order_card) b-->
-<!--            ) m-->
-<!--        </if>-->
-<!--        ) a-->
-<!--        LEFT JOIN v_top_order vto ON a.order_sn = vto.order_sn-->
-<!--        WHERE vto.`status` = 1-->
-<!--        <if test="checkStatus != null and checkStatus != ''">-->
-<!--            AND vto.check_status = #{checkStatus}-->
-<!--        </if>-->
-<!--        <if test="refundStatusList != null and refundStatusList.size()!=0 ">-->
-<!--            AND vto.refund_status in-->
-<!--            <foreach collection="refundStatusList" item="item" index="index" open="(" close=")" separator=",">-->
-<!--                #{item}-->
-<!--            </foreach>-->
-<!--        </if>-->
-<!--        <if test="creditStatus != null and creditStatus != '' and creditStatus == 0">-->
-<!--            AND vto.order_received <![CDATA[ < ]]> vto.pay_price-->
-<!--        </if>-->
-<!--        <if test="creditStatus != null and creditStatus != '' and creditStatus == 1">-->
-<!--            AND vto.pay_price = vto.order_received-->
-<!--        </if>-->
-<!--        <if test="invoiceStatus != null and invoiceStatus != ''">-->
-<!--            AND vto.invoice_status = #{invoiceStatus}-->
-<!--        </if>-->
-<!--        <if test="startTime != null and startTime != ''">-->
-<!--            AND vto.create_time <![CDATA[ >= ]]> #{startTime}-->
-<!--        </if>-->
-<!--        <if test="endTime != null and endTime != ''">-->
-<!--            AND vto.create_time <![CDATA[ <= ]]> #{endTime}-->
-<!--        </if>-->
-<!--        <if test="keyword != null and keyword != ''">-->
-<!--            AND (-->
-<!--            vto.create_org LIKE CONCAT( '%', #{keyword}, '%' )-->
-<!--            OR vto.order_sn LIKE CONCAT( '%', #{keyword}, '%' )-->
-<!--            OR vto.create_no LIKE CONCAT( '%', #{keyword}, '%' )-->
-<!--            OR vto.order_org LIKE CONCAT( '%', #{keyword}, '%' ))-->
-<!--        </if>-->
-<!--    </select>-->
+    <select id="queryList_COUNT" resultType="Long">
+        SELECT
+        ((SELECT
+        COUNT( DISTINCT ot.order_sn ) AS num
+        FROM
+        top_old_order ot
+        LEFT JOIN top_old_order_goods otg ON ot.order_sn = otg.order_sn
+        WHERE
+        1 = 1
+        <if test="businessFullName != null and businessFullName != ''">
+            AND otg.business_full_name = #{businessFullName}
+        </if>
+        <if test="userCard != null and userCard != ''">
+            AND otg.user_card = #{userCard,typeHandler=com.zhongzheng.common.type.EncryptHandler}
+        </if>
+        <if test="checkStatus != null and checkStatus != ''">
+            AND ot.check_status = #{checkStatus}
+        </if>
+        <if test="refundStatusList != null and refundStatusList.size()!=0 ">
+            AND ot.refund_status in
+            <foreach collection="refundStatusList" item="item" index="index" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        <if test="creditStatus != null and creditStatus != '' and creditStatus == 0">
+            AND ot.order_received <![CDATA[ < ]]> ot.pay_price
+        </if>
+        <if test="creditStatus != null and creditStatus != '' and creditStatus == 1">
+            AND ot.pay_price = ot.order_received
+        </if>
+        <if test="invoiceStatus != null and invoiceStatus != ''">
+            AND ot.invoice_status = #{invoiceStatus}
+        </if>
+        <if test="startTime != null and startTime != ''">
+            AND ot.create_time <![CDATA[ >= ]]> #{startTime}
+        </if>
+        <if test="endTime != null and endTime != ''">
+            AND ot.create_time <![CDATA[ <= ]]> #{endTime}
+        </if>
+        <if test="keyword != null and keyword != ''">
+            AND (
+            ot.create_org LIKE CONCAT( '%', #{keyword}, '%' )
+            OR ot.order_org LIKE CONCAT( '%', #{keyword}, '%' ))
+        </if>
+            ) + (SELECT
+        COUNT( DISTINCT o.order_sn ) AS num
+        FROM
+        `order` o
+        LEFT JOIN order_goods og ON o.order_sn = og.order_sn
+        WHERE
+        1 = 1
+        <if test="businessFullName != null and businessFullName != ''">
+            AND (
+            SELECT
+             COUNT(g.goods_id)
+            FROM
+            goods g
+            LEFT JOIN course_education_type cet ON g.education_type_id = cet.id
+            LEFT JOIN course_project_type cpt ON g.project_id = cpt.id
+            LEFT JOIN course_business cb ON g.business_id = cb.id
+            WHERE
+            og.goods_id = g.goods_id AND CONCAT('学校业务', cet.education_name, cb.business_name, cpt.project_name) = #{businessFullName}) > 0
+        </if>
+        <if test="userCard != null and userCard != ''">
+            AND o.user_id = (SELECT user_id FROM `user` WHERE id_card = #{userCard,typeHandler=com.zhongzheng.common.type.EncryptHandler})
+        </if>
+        <if test="checkStatus != null and checkStatus != ''">
+            AND o.check_status = #{checkStatus}
+        </if>
+        <if test="refundStatusList != null and refundStatusList.size()!=0 ">
+            AND o.refund_status in
+            <foreach collection="refundStatusList" item="item" index="index" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        <if test="creditStatus != null and creditStatus != '' and creditStatus == 0">
+            AND o.order_received <![CDATA[ < ]]> ot.pay_price
+        </if>
+        <if test="creditStatus != null and creditStatus != '' and creditStatus == 1">
+            AND o.pay_price = ot.order_received
+        </if>
+        <if test="invoiceStatus != null and invoiceStatus != ''">
+            AND o.invoice_status = #{invoiceStatus}
+        </if>
+        <if test="startTime != null and startTime != ''">
+            AND o.create_time <![CDATA[ >= ]]> #{startTime}
+        </if>
+        <if test="endTime != null and endTime != ''">
+            AND o.create_time <![CDATA[ <= ]]> #{endTime}
+        </if>
+                )) as number
+    </select>
 
     <select id="queryById" parameterType="java.lang.String" resultType="com.zhongzheng.modules.top.goods.vo.TopOldOrderVo">
         SELECT * FROM v_top_order WHERE order_sn = #{orderSn}