瀏覽代碼

no message

FengChaoYu 3 天之前
父節點
當前提交
838b2a9534

+ 14 - 0
mall-server-api/src/main/java/com/gree/mall/manager/controller/supply/order/DifferenceOrderController.java

@@ -0,0 +1,14 @@
+package com.gree.mall.manager.controller.supply.order;
+
+import io.swagger.annotations.Api;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@Slf4j
+@RestController
+@Api(value = "差异验收单API", tags = {"差异验收单API"})
+@RequestMapping(value = "/supply/difference", produces = "application/json; charset=utf-8")
+public class DifferenceOrderController {
+
+}

+ 13 - 0
mall-server-api/src/main/java/com/gree/mall/manager/controller/supply/order/DispatchOrderController.java

@@ -0,0 +1,13 @@
+package com.gree.mall.manager.controller.supply.order;
+
+import io.swagger.annotations.Api;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@Slf4j
+@RestController
+@Api(value = "发货单API", tags = {"发货单API"})
+@RequestMapping(value = "/supply/dispatch", produces = "application/json; charset=utf-8")
+public class DispatchOrderController {
+}

+ 5 - 5
mall-server-api/src/main/java/com/gree/mall/manager/controller/supply/order/RetailOrderController.java

@@ -164,11 +164,11 @@ public class RetailOrderController {
     @PostMapping("/examine")
     @ApiOperation("审核与批量审核")
     public ResponseHelper examine(
-            @ApiParam(value = "id", required = true) @RequestParam(required = true) List<String> id,
-            @ApiParam(value = "审核结果 OK=通过 FAIL=不通过", required = false) @RequestParam(required = false) String examineStatus,
-            @ApiParam(value = "审核备注", required = false) @RequestParam(required = false) String examineRemark,
-            @ApiParam(value = "表头备注", required = false) @RequestParam(required = false) String remark,
-            @ApiParam(value = "文件编号", required = false) @RequestParam(required = false) String fileNo
+            @ApiParam(value = "id", required = true) @RequestParam List<String> id,
+            @ApiParam(value = "审核结果 OK=通过 FAIL=不通过") @RequestParam(required = false) String examineStatus,
+            @ApiParam(value = "审核备注") @RequestParam(required = false) String examineRemark,
+            @ApiParam(value = "表头备注") @RequestParam(required = false) String remark,
+            @ApiParam(value = "文件编号") @RequestParam(required = false) String fileNo
     ) throws Exception {
 
         id = id.stream().distinct().collect(Collectors.toList());

+ 5 - 5
mall-server-api/src/main/java/com/gree/mall/manager/logic/supply/funds/CompanyWalletLogic.java

@@ -182,7 +182,7 @@ public class CompanyWalletLogic {
                             .setCompanyName(itemBean.getCompanyName())
                             .setTheTime(itemBean.getCreateTime())
                             .setChangeAmount(itemBean.getPayAmount())
-                            .setBillId(itemBean.getId())
+                            .setBillId(itemBean.getRetailOrderId())
                             .setBillType(StringUtils.isNotBlank(itemBean.getPolicyId()) ? BalanceBillTypeEnum.POLICY_ORDER.getKey() : BalanceBillTypeEnum.RETAIL_ORDER.getKey())
                             .setWalletId(itemBean.getWalletId1())
                             .setWalletType(BalanceTypeEnum.W.getKey())
@@ -205,7 +205,7 @@ public class CompanyWalletLogic {
                                 .setCompanyName(itemBean.getCompanyName())
                                 .setTheTime(itemBean.getCreateTime())
                                 .setChangeAmount(itemBean.getPayRebateAmount())
-                                .setBillId(itemBean.getId())
+                                .setBillId(itemBean.getRetailOrderId())
                                 .setBillType(StringUtils.isNotBlank(itemBean.getPolicyId()) ? BalanceBillTypeEnum.POLICY_ORDER.getKey() : BalanceBillTypeEnum.RETAIL_ORDER.getKey())
                                 .setWalletId(itemBean.getWalletId2())
                                 .setWalletType(BalanceTypeEnum.R.getKey())
@@ -217,9 +217,9 @@ public class CompanyWalletLogic {
 
             if (CollectionUtil.isNotEmpty(dtoList)) {
                 companyWalletBalanceLogic.handleCompanyWalletBalance(dtoList);
-                if (isRemoveRecord) {
-                    companyWalletBalanceLogic.removeBalanceAccRecordByBillId(dtoList.get(0).getCompanyWechatId(), dtoList.get(0).getBillId(), dtoList.get(0).getBillType());
-                }
+//                if (isRemoveRecord) {
+//                    companyWalletBalanceLogic.removeBalanceAccRecordByBillId(dtoList.get(0).getCompanyWechatId(), dtoList.get(0).getBillId(), dtoList.get(0).getBillType());
+//                }
             }
 
         } catch (Exception e) {

+ 54 - 27
mall-server-api/src/main/java/com/gree/mall/manager/logic/supply/order/RetailOrderLogic.java

@@ -12,10 +12,12 @@ import com.gree.mall.manager.bean.admin.AdminUserCom;
 import com.gree.mall.manager.bean.supply.funds.CustomerWalletBean;
 import com.gree.mall.manager.bean.supply.order.*;
 import com.gree.mall.manager.commonmapper.CommonMapper;
+import com.gree.mall.manager.constant.Constant;
 import com.gree.mall.manager.enums.ExamineStatusEnum;
 import com.gree.mall.manager.enums.material.DirectFlagEnum;
 import com.gree.mall.manager.enums.material.StateEnum;
 import com.gree.mall.manager.enums.supply.BalanceTypeEnum;
+import com.gree.mall.manager.enums.supply.PolicyTypeEnum;
 import com.gree.mall.manager.exception.RemoteServiceException;
 import com.gree.mall.manager.logic.common.CommonLogic;
 import com.gree.mall.manager.logic.supply.funds.CompanyWalletLogic;
@@ -29,12 +31,15 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
+import org.springframework.integration.redis.util.RedisLockRegistry;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.Lock;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -57,6 +62,7 @@ public class RetailOrderLogic {
     private final WalletService walletService;
     private final RebateTypeService rebateTypeService;
     private final RefundOrderItemService refundOrderItemService;
+    private final RedisLockRegistry redisLockRegistry;
 
     public IPage<RetailOrderVO> list(ZfireParamBean zfireParamBean) {
         AdminUserCom adminUser = commonLogic.getAdminUser();
@@ -249,6 +255,26 @@ public class RetailOrderLogic {
      * @param retailOrderItemList 如果是配提政策,前端传表体的policyMaterialId  其实是policy_condition_material的id,需注意
      */
     public void addRetailOrderItem(RetailOrder retailOrder, List<RetailOrderItemBean> retailOrderItemList, Policy policy, Boolean add) throws InterruptedException {
+        // 检查是否限量政策单并且限最大引用数
+        if (Objects.nonNull(policy) && policy.getType().equals(PolicyTypeEnum.LIMIT.getKey())) {
+            // 以商户+销售政策单号为锁
+            Lock obtain = redisLockRegistry.obtain(Constant.RedisPrefix.LOCK_ORDER + retailOrder.getCompanyWechatId() + policy.getId());
+            if (!obtain.tryLock(5, TimeUnit.SECONDS)) {
+                throw new RemoteServiceException("系统繁忙,请稍后再试");
+            }
+            try {
+                Integer refPolicyCount = retailOrderService.lambdaQuery()
+                        .eq(RetailOrder::getCompanyWechatId, retailOrder.getCompanyWechatId())
+                        .eq(RetailOrder::getPolicyId, policy.getId())
+                        .count();
+
+                if (refPolicyCount > policy.getMaxBuyNum()) {
+                    throw new RemoteServiceException("已到达政策最大引用数");
+                }
+            } finally {
+                obtain.unlock();
+            }
+        }
         String retailOrderId = retailOrder.getId();
         Integer type = retailOrder.getType();
 
@@ -544,20 +570,20 @@ public class RetailOrderLogic {
         RetailOrder retailOrder = retailOrderService.getById(retailOrderAdd.getId());
         Policy policy = null;
         String policyId = retailOrderAdd.getPolicyId();
-        if(retailOrderAdd.getType() != null && retailOrderAdd.getType() == 2){
-            policy = this.checkPolicy(policyId,adminUser,retailOrder.getCompanyWechatId());
+        if (retailOrderAdd.getType() != null && retailOrderAdd.getType() == 2) {
+            policy = this.checkPolicy(policyId, adminUser, retailOrder.getCompanyWechatId());
         }
 
         retailOrder.setId(retailOrderAdd.getId());
         retailOrder.setRemark(retailOrderAdd.getRemark());
 
         retailOrder.setFileNo(retailOrderAdd.getFileNo());
-        if(CollectionUtils.isNotEmpty(retailOrderAdd.getRetailOrderItemList())) {
+        if (CollectionUtils.isNotEmpty(retailOrderAdd.getRetailOrderItemList())) {
             //处理明细
-            this.addRetailOrderItem(retailOrder, retailOrderAdd.getRetailOrderItemList(),policy,false);
+            this.addRetailOrderItem(retailOrder, retailOrderAdd.getRetailOrderItemList(), policy, false);
         }
 
-        if(Objects.nonNull(policy)){
+        if (Objects.nonNull(policy)) {
             retailOrder.setPolicyId(policyId);
             retailOrder.setPolicyCode(policy.getCode());
             retailOrder.setPolicyTitle(policy.getTitle());
@@ -568,14 +594,13 @@ public class RetailOrderLogic {
     }
 
 
-
     /**
      * 撤回提审
      */
     @Transactional(rollbackFor = Exception.class)
     public void submitCancel(String id) throws Exception {
         RetailOrder retailOrder = retailOrderService.getById(id);
-        if(!retailOrder.getExamineStatus().equals(ExamineStatusEnum.WAIT.toString())){
+        if (!retailOrder.getExamineStatus().equals(ExamineStatusEnum.WAIT.toString())) {
             throw new RemoteServiceException("无法撤回提审");
         }
         retailOrder.setExamineStatus(ExamineStatusEnum.SAVE.toString());
@@ -588,6 +613,7 @@ public class RetailOrderLogic {
 
     /**
      * 退订
+     *
      * @param retailOrderRefundBean 退订的商品明细
      * @return
      * @throws Exception
@@ -596,7 +622,7 @@ public class RetailOrderLogic {
     public List<Map<String, Object>> refund(RetailOrderRefundBean retailOrderRefundBean) throws Exception {
         List<RetailOrderItemBean> retailOrderItemList = retailOrderRefundBean.getRetailOrderItemList();
         RetailOrder retailOrder = retailOrderService.getById(retailOrderRefundBean.getId());
-        if(!retailOrder.getExamineStatus().equals(ExamineStatusEnum.OK.toString())){
+        if (!retailOrder.getExamineStatus().equals(ExamineStatusEnum.OK.toString())) {
             throw new RemoteServiceException("非审核通过订单不可退订");
         }
         AdminUserCom adminUser = commonLogic.getAdminUser();
@@ -607,13 +633,13 @@ public class RetailOrderLogic {
 
         List<RetailOrderItem> execRecords = new ArrayList<>();
         List<RetailOrderItem> updateItems = new ArrayList<>();
-        for(RetailOrderItemBean retailOrderItem : retailOrderItemList) {
+        for (RetailOrderItemBean retailOrderItem : retailOrderItemList) {
             RetailOrderItem item = retailOrderItemService.getById(retailOrderItem.getId());
 
             //退订数量
             int tdQty = (retailOrderItem.getTdQty() == null ? 0 : retailOrderItem.getTdQty());
             //订单明细的退订
-            Map<String, Object> paramsMap = this.refundItem(item,tdQty);
+            Map<String, Object> paramsMap = this.refundItem(item, tdQty);
             resultMap.add(paramsMap);
 
             if (tdQty > 0 && Objects.nonNull(paramsMap.get("execRecord")))
@@ -640,8 +666,8 @@ public class RetailOrderLogic {
         List<RetailOrderItemBean> retailOrderItemBeans = new ArrayList<>();
         List<RetailOrderItem> retailOrderItemList = retailOrderItemService.lambdaQuery().eq(RetailOrderItem::getRetailOrderId, retailOrder.getId()).list();
 
-        for(RetailOrderItem item : retailOrderItemList){
-            if(item.getRefundableQty().intValue() != item.getOldQty().intValue()){
+        for (RetailOrderItem item : retailOrderItemList) {
+            if (item.getRefundableQty().intValue() != item.getOldQty().intValue()) {
                 throw new RemoteServiceException("检测到订单数量与订单原数量有变动,不可弃审");
             }
             RetailOrderItemBean retailOrderItemBean = new RetailOrderItemBean();
@@ -654,28 +680,29 @@ public class RetailOrderLogic {
 
     /**
      * 订单明细退订处理(不处理钱包的钱,只处理明细数量和订单里的钱)
+     *
      * @param retailOrderItem 订单明细
-     * @param itemTdQty 退订明细数量
+     * @param itemTdQty       退订明细数量
      * @return 退订现金金额
      */
-    public Map<String, Object> refundItem(RetailOrderItem retailOrderItem, Integer itemTdQty){
+    public Map<String, Object> refundItem(RetailOrderItem retailOrderItem, Integer itemTdQty) {
         RetailOrderItem item = retailOrderItemService.getById(retailOrderItem.getId());
         //退订数量
         int tdQty = (itemTdQty == null ? 0 : itemTdQty);
 
         //退订金额
         BigDecimal tdAmount = retailOrderItem.getSinglePayPrice().multiply(BigDecimal.valueOf(tdQty));
-        if(item.getQty() == tdQty){
+        if (item.getQty() == tdQty) {
             tdAmount = retailOrderItem.getPayAmount();
         }
         //退订的实际返利金额
         BigDecimal tdPayRebateAmount = retailOrderItem.getSingleRebateAmount().multiply(BigDecimal.valueOf(tdQty));
-        if(item.getQty() == tdQty){
+        if (item.getQty() == tdQty) {
             tdPayRebateAmount = retailOrderItem.getPayRebateAmount();
         }
         //退订折扣金额
         BigDecimal tdDiscAmount = retailOrderItem.getDiscAmount().multiply(BigDecimal.valueOf(tdQty));
-        if(item.getQty() == tdQty){
+        if (item.getQty() == tdQty) {
             tdDiscAmount = retailOrderItem.getTotalDiscAmount();
         }
         //剩余金额
@@ -685,10 +712,10 @@ public class RetailOrderLogic {
         //剩余折扣金额
         BigDecimal balanceDiscAmount = retailOrderItem.getTotalDiscAmount().subtract(tdDiscAmount);
 
-        if(tdQty < 0){
+        if (tdQty < 0) {
             throw new RemoteServiceException("退订数量不可为负数");
         }
-        if(tdQty > item.getRefundableQty()){
+        if (tdQty > item.getRefundableQty()) {
             throw new RemoteServiceException("机型:" + item.getSpecsName() + "退订数量不可大于可退数量");
         }
         //处理数量
@@ -764,15 +791,15 @@ public class RetailOrderLogic {
     public void examine(String id, String examineStatus, String examineRemark, String remark, String fileNo) throws Exception {
         AdminUserCom adminUser = commonLogic.getAdminUser();
         RetailOrder retailOrder = retailOrderService.getById(id);
-        if(!retailOrder.getExamineStatus().equals(ExamineStatusEnum.WAIT.toString())){
+        if (!retailOrder.getExamineStatus().equals(ExamineStatusEnum.WAIT.toString())) {
             throw new RemoteServiceException("非待审核单据不可审核");
         }
-        if(adminUser.getType() != 2){
+        if (adminUser.getType() != 2) {
             throw new RemoteServiceException("暂无权限操作");
         }
         //驳回直接变回保存状态
         retailOrder.setRemark(remark);
-        retailOrder.setExamineStatus(examineStatus.equals(ExamineStatusEnum.FAIL.getKey())?ExamineStatusEnum.SAVE.getKey():examineStatus);
+        retailOrder.setExamineStatus(examineStatus.equals(ExamineStatusEnum.FAIL.getKey()) ? ExamineStatusEnum.SAVE.getKey() : examineStatus);
         retailOrder.setExamineRemark(examineRemark);
         retailOrder.setExamineBy(adminUser.getNickName());
         retailOrder.setExamineTime(new Date());
@@ -782,9 +809,9 @@ public class RetailOrderLogic {
                 .eq(RetailOrderItem::getRetailOrderId, id).list();
 
         //审核通过
-        if(StringUtils.equals(examineStatus,ExamineStatusEnum.OK.toString())){
+        if (StringUtils.equals(examineStatus, ExamineStatusEnum.OK.toString())) {
 
-        }else if(StringUtils.equals(examineStatus,ExamineStatusEnum.FAIL.toString())){
+        } else if (StringUtils.equals(examineStatus, ExamineStatusEnum.FAIL.toString())) {
             //全退
             this.refundAll(retailOrder, false);
         }
@@ -793,12 +820,12 @@ public class RetailOrderLogic {
     }
 
     @Transactional
-    public void delete(String id){
+    public void delete(String id) {
         RetailOrder retailOrder = retailOrderService.getById(id);
-        if(!retailOrder.getExamineStatus().equals(ExamineStatusEnum.SAVE.toString())){
+        if (!retailOrder.getExamineStatus().equals(ExamineStatusEnum.SAVE.toString())) {
             throw new RemoteServiceException("非保存状态不可删除");
         }
         retailOrder.deleteById();
-        retailOrderItemService.lambdaUpdate().eq(RetailOrderItem::getRetailOrderId,id).remove();
+        retailOrderItemService.lambdaUpdate().eq(RetailOrderItem::getRetailOrderId, id).remove();
     }
 }

+ 3 - 1
mall-server-api/src/main/resources/mapper/CommonMapper.xml

@@ -1469,7 +1469,9 @@
         ${ex.selected}
         FROM policy a
         ${ex.query}
-        <if test="companyWechatId != null and companyWechatId != '0'">
+        <if test="companyWechatId != null and companyWechatId != '' and companyWechatId != '0'">
+            AND now() <![CDATA[ >= ]]>  start_time
+            AND now() <![CDATA[ <= ]]> end_time
             AND EXISTS(SELECT 1 FROM policy_customer b WHERE b.policy_id = a.id AND b.company_wechat_id = #{companyWechatId})
         </if>
         <if test="ex.orderBy == null or ex.orderBy ==''">