yangdamao 2 лет назад
Родитель
Сommit
6dc4a20717

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

@@ -42,6 +42,7 @@ import com.zhongzheng.modules.sdk.service.NuonuoService;
 import com.zhongzheng.modules.system.bo.SysTenantQueryBo;
 import com.zhongzheng.modules.system.service.ISysConfigService;
 import com.zhongzheng.modules.system.service.ISysTenantService;
+import com.zhongzheng.modules.top.goods.bo.TopOldOrderAddBo;
 import com.zhongzheng.modules.top.goods.bo.TopOldOrderCheckBo;
 import com.zhongzheng.modules.top.goods.bo.TopOrderRefundApplyBo;
 import com.zhongzheng.modules.top.goods.service.ITopOldOrderService;
@@ -103,4 +104,16 @@ public class CommonController extends BaseController {
         }
         return toAjax(iTopOldOrderService.orderRefundApply(bo) ? 1 : 0);
     }
+
+    /**
+     * B端订单退款申请
+     */
+    @ApiOperation("新增订单")
+    @PostMapping("/save/order")
+    public AjaxResult<Void> saveOrder(@RequestBody TopOldOrderAddBo bo) {
+        if(!ToolsUtils.checkSignFromOldSys(bo.getStamp().toString(),bo.getSign())){
+            throw new CustomException("签名错误");
+        }
+        return toAjax(iTopOldOrderService.insertByAddBo(bo) ? 1 : 0);
+    }
 }

+ 0 - 7
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/order/TopOldOrderController.java

@@ -1,11 +1,9 @@
 package com.zhongzheng.controller.order;
 
-import com.zhongzheng.common.annotation.Log;
 import com.zhongzheng.common.core.controller.BaseController;
 import com.zhongzheng.common.core.domain.AjaxResult;
 import com.zhongzheng.common.core.domain.model.TopLoginUser;
 import com.zhongzheng.common.core.page.TableDataInfo;
-import com.zhongzheng.common.enums.BusinessType;
 import com.zhongzheng.common.utils.ServletUtils;
 import com.zhongzheng.common.utils.poi.ExcelUtil;
 import com.zhongzheng.framework.web.service.TopTokenService;
@@ -19,7 +17,6 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
@@ -88,8 +85,6 @@ public class TopOldOrderController extends BaseController {
      * 新增订单
      */
     @ApiOperation("新增订单")
-    @PreAuthorize("@ss.hasPermi('system:order:add')")
-    @Log(title = "订单", businessType = BusinessType.INSERT)
     @PostMapping()
     public AjaxResult<Void> add(@RequestBody TopOldOrderAddBo bo) {
         return toAjax(iTopOldOrderService.insertByAddBo(bo) ? 1 : 0);
@@ -99,8 +94,6 @@ public class TopOldOrderController extends BaseController {
      * 修改订单
      */
     @ApiOperation("修改订单")
-    @PreAuthorize("@ss.hasPermi('system:order:edit')")
-    @Log(title = "订单", businessType = BusinessType.UPDATE)
     @PutMapping()
     public AjaxResult<Void> edit(@RequestBody TopOldOrderEditBo bo) {
         return toAjax(iTopOldOrderService.updateByEditBo(bo) ? 1 : 0);

+ 9 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/bo/TopOldOrderAddBo.java

@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import javax.validation.constraints.NotBlank;
 import java.math.BigDecimal;
 import java.util.List;
 
@@ -18,6 +19,14 @@ import java.util.List;
 @ApiModel("订单添加对象")
 public class TopOldOrderAddBo {
 
+    @ApiModelProperty("当前时间戳")
+    @NotBlank(message = "当前时间戳不能为空")
+    private Long stamp;
+
+    @ApiModelProperty("签名")
+    @NotBlank(message = "签名不能为空")
+    private String sign;
+
     /** 订单编号 */
     @ApiModelProperty("订单编号")
     private String orderSn;

+ 1 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/bo/TopRefundOrderCheckBo.java

@@ -20,7 +20,7 @@ public class TopRefundOrderCheckBo {
     @ApiModelProperty("订单编号")
     private String orderSn;
 
-    @ApiModelProperty("审核结果:1同意,2拒绝")
+    @ApiModelProperty("审核结果:1同意,-1拒绝")
     private Integer checkResult;
 
     private Long loginId;

+ 6 - 2
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/domain/TopOldOrderCheckLog.java

@@ -30,12 +30,16 @@ private static final long serialVersionUID=1L;
     private String refundSn;
     /** 角色ID */
     private Long roleId;
-    /** 审核状态:0待审核,1已通过,-1未通过,(2待支付,3已支付) */
+    /** 流程类型:1审核,2支付 */
+    private Integer type;
+    /** 状态:0待审核,1已通过,-1未通过,(2待支付,3已支付) */
     private Integer checkStatus;
-    /** 审核意见 */
+    /** 意见 */
     private String checkReason;
     /** 是否当前审核标记:0否,1是 */
     private Integer checkSign;
+    /** 顺序*/
+    private Integer checkSort;
     /** 状态 1正常 0关闭 */
     private Integer status;
     /** 添加时间 */

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

@@ -29,4 +29,5 @@ public interface TopOldOrderMapper extends BaseMapper<TopOldOrder> {
 
     List<TopOldOrderVo> queryListAll();
 
+    TopOldOrder getOrderBySn(@Param("orderSn") String orderSn);
 }

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

@@ -127,6 +127,17 @@ 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()));
+                   }
+               }
             });
         }
         return orderVoList;
@@ -371,7 +382,7 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
 
         //创建订单退款审核流程
         List<TopOldOrderCheck> checkList = topOldOrderCheckService
-                .list(new LambdaQueryWrapper<TopOldOrderCheck>().eq(TopOldOrderCheck::getCheckType, 2)
+                .list(new LambdaQueryWrapper<TopOldOrderCheck>().in(TopOldOrderCheck::getCheckType, Arrays.asList(2,3))
                         .orderByAsc(TopOldOrderCheck::getCheckSort));
         if (CollectionUtils.isNotEmpty(checkList)){
             List<TopOldOrderCheckLog> logs = new ArrayList<>();
@@ -380,11 +391,20 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
                 TopOldOrderCheckLog log = new TopOldOrderCheckLog();
                 log.setRefundSn(refundSn);
                 log.setRoleId(check.getCheckRole());
-                log.setCheckStatus(0);
+
                 log.setUpdateTime(DateUtils.getNowTime());
                 log.setCreateTime(DateUtils.getNowTime());
                 log.setTenantId(tenantId);
                 log.setCheckSign(i>0?0:1);
+                log.setCheckSort(check.getCheckSort());
+                if (check.getCheckType() == 3) {
+                    //支付流程
+                    log.setType(2);//支付角色
+                    log.setCheckStatus(2);//待支付
+                }else {
+                    log.setType(1);//审核角色
+                    log.setCheckStatus(0);//待审核
+                }
                 logs.add(log);
             }
             topOldOrderCheckLogService.saveBatch(logs);
@@ -457,8 +477,158 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
      */
     @Override
     public boolean refundOrderCheck(TopRefundOrderCheckBo bo) {
+        TopOldOrder order = baseMapper.getOrderBySn(bo.getOrderSn());
+        if (ObjectUtils.isNull(order)){
+            throw new CustomException("订单信息获取失败!请检查订单号");
+        }
+        //校验当前角色审核权限
+        List<TopSysUserRole> userRoleList = topSysUserRoleService.list(new LambdaQueryWrapper<TopSysUserRole>().eq(TopSysUserRole::getUserId, bo.getLoginId()));
+        if (CollectionUtils.isEmpty(userRoleList)){
+            throw new CustomException("当前账号没有审核权限");
+        }
+        List<Long> roleIds = userRoleList.stream().map(TopSysUserRole::getRoleId).collect(Collectors.toList());
+        //找到当前申请退款的退款单号
+        List<TopOldOrderRefund> refundList = topOldOrderRefundService
+                .list(new LambdaQueryWrapper<TopOldOrderRefund>()
+                .eq(TopOldOrderRefund::getOrderSn, bo.getOrderSn())
+                .in(TopOldOrderRefund::getPeriodStatus, Arrays.asList(0, 1, 2))
+                .eq(TopOldOrderRefund::getStatus, 1));
+        if (CollectionUtils.isEmpty(refundList)){
+            throw new CustomException("当前订单没有申请退款!请检查:"+bo.getOrderSn());
+        }
+        String refundSn = refundList.get(0).getRefundSn();
+        //当前退款流程
+        TopOldOrderCheckLog checkLog = topOldOrderCheckLogService.getOne(new LambdaQueryWrapper<TopOldOrderCheckLog>()
+                .eq(TopOldOrderCheckLog::getRefundSn, refundSn).eq(TopOldOrderCheckLog::getStatus, 1)
+                .eq(TopOldOrderCheckLog::getCheckSign, 1).last("limit 1"));
+        if (!roleIds.contains(checkLog.getRoleId())){
+            throw new CustomException("当前账号没有审核权限");
+        }
 
-        return false;
+        switch (bo.getCheckResult()){
+            case 1://同意
+                consentCheck(checkLog,bo);
+                break;
+            case 2://拒绝
+                refuseCheck(checkLog,bo);
+                break;
+            default :
+                break;
+        }
+
+        return true;
+    }
+
+    private void refuseCheck(TopOldOrderCheckLog checkLog, TopRefundOrderCheckBo bo) {
+        List<TopOldOrderCheckLog> checkLogList = topOldOrderCheckLogService
+                .list(new LambdaQueryWrapper<TopOldOrderCheckLog>()
+                        .eq(TopOldOrderCheckLog::getRefundSn, checkLog.getRefundSn())
+                        .eq(TopOldOrderCheckLog::getType,1)//审核
+                        .eq(TopOldOrderCheckLog::getStatus, 1));
+
+        checkLog.setCheckReason(bo.getCheckReason());
+        checkLog.setCheckStatus(bo.getCheckResult());
+        checkLog.setCheckSign(0);
+        topOldOrderCheckLogService.updateById(checkLog);
+
+        Integer minSort = checkLogList.stream().mapToInt(TopOldOrderCheckLog::getCheckSort).min().getAsInt();
+        if (checkLog.getCheckSort() > minSort){
+            //上个审核进入默认
+            topOldOrderCheckLogService.update(new LambdaUpdateWrapper<TopOldOrderCheckLog>()
+                    .set(TopOldOrderCheckLog::getCheckSign,1)
+                    .eq(TopOldOrderCheckLog::getRefundSn,checkLog.getRefundSn())
+                    .eq(TopOldOrderCheckLog::getCheckSort,checkLog.getCheckSort() - 1));
+        }else {
+            //初审拒绝
+            //处理订单状态
+            List<TopOldOrderRefund> refundList = topOldOrderRefundService
+                    .list(new LambdaQueryWrapper<TopOldOrderRefund>()
+                            .eq(TopOldOrderRefund::getRefundSn, checkLog.getRefundSn())
+                            .eq(TopOldOrderRefund::getStatus, 1));
+            List<Long> orderGoodsIds = refundList.stream().map(TopOldOrderRefund::getOrderGoodsId).collect(Collectors.toList());
+            for (TopOldOrderRefund item : refundList) {
+                item.setPeriodStatus(-1);//拒绝退款
+            }
+            topOldOrderRefundService.updateBatchById(refundList);
+            topOrderGoodsService.update(new LambdaUpdateWrapper<TopOldOrderGoods>()
+                    .set(TopOldOrderGoods::getRefundStatus,3)//未通过
+                    .in(TopOldOrderGoods::getOrderGoodsId,orderGoodsIds));
+
+            update(new LambdaUpdateWrapper<TopOldOrder>()
+                    .set(TopOldOrder::getRefundStatus,4) //未通过
+                    .eq(TopOldOrder::getOrderSn,refundList.get(0).getOrderSn()));
+            //订单处理
+            TopOldOrder order = baseMapper.getOrderBySn(refundList.get(0).getOrderSn());
+            if (order.getOrderFrom() == 1){
+                //新系统订单
+                orderGoodsService.update(new LambdaUpdateWrapper<OrderGoods>()
+                .set(OrderGoods::getRefundStatus,3)
+                .in(OrderGoods::getOrderGoodsId,orderGoodsIds));
+            }else {
+                //todo 旧系统订单
+            }
+        }
+    }
+
+    private void consentCheck(TopOldOrderCheckLog checkLog, TopRefundOrderCheckBo bo) {
+        List<TopOldOrderCheckLog> checkLogList = topOldOrderCheckLogService
+                .list(new LambdaQueryWrapper<TopOldOrderCheckLog>()
+                        .eq(TopOldOrderCheckLog::getRefundSn, checkLog.getRefundSn())
+                        .eq(TopOldOrderCheckLog::getType,1)//审核
+                        .eq(TopOldOrderCheckLog::getStatus, 1));
+
+        checkLog.setCheckReason(bo.getCheckReason());
+        checkLog.setCheckStatus(bo.getCheckResult());
+        checkLog.setCheckSign(0);
+        topOldOrderCheckLogService.updateById(checkLog);
+
+        Integer maxSort = checkLogList.stream().mapToInt(TopOldOrderCheckLog::getCheckSort).max().getAsInt();
+        Integer periodStatus = 0;
+        Integer refundStatus = 0;
+        if (checkLog.getCheckSort() < maxSort){
+            //下个审核进入默认
+            topOldOrderCheckLogService.update(new LambdaUpdateWrapper<TopOldOrderCheckLog>()
+                    .set(TopOldOrderCheckLog::getCheckSign,1)
+                    .eq(TopOldOrderCheckLog::getRefundSn,checkLog.getRefundSn())
+                    .eq(TopOldOrderCheckLog::getCheckSort,checkLog.getCheckSort() + 1));
+            refundStatus = 1;//退款中
+            periodStatus = 1;//审核中
+        }else {
+            //最后一个审核
+            periodStatus = 2;//待退款
+            //进入支付流程
+            TopOldOrderCheckLog check = topOldOrderCheckLogService
+                    .getOne(new LambdaQueryWrapper<TopOldOrderCheckLog>()
+                    .eq(TopOldOrderCheckLog::getRefundSn, checkLog.getRefundSn())
+                    .eq(TopOldOrderCheckLog::getType, 2)//支付
+                    .eq(TopOldOrderCheckLog::getStatus, 1)
+                    .orderByAsc(TopOldOrderCheckLog::getCheckSort)
+                    .last("limit 1"));
+            if (ObjectUtils.isNotNull(check)){
+                check.setCheckSign(1);//开启当前流程
+                topOldOrderCheckLogService.updateById(check);
+            }
+        }
+
+        //处理订单状态
+        List<TopOldOrderRefund> refundList = topOldOrderRefundService
+                .list(new LambdaQueryWrapper<TopOldOrderRefund>()
+                .eq(TopOldOrderRefund::getRefundSn, checkLog.getRefundSn())
+                .eq(TopOldOrderRefund::getStatus, 1));
+        List<Long> orderGoodsIds = refundList.stream().map(TopOldOrderRefund::getOrderGoodsId).collect(Collectors.toList());
+        for (TopOldOrderRefund item : refundList) {
+            item.setPeriodStatus(periodStatus);
+        }
+        topOldOrderRefundService.updateBatchById(refundList);
+        topOrderGoodsService.update(new LambdaUpdateWrapper<TopOldOrderGoods>()
+        .set(TopOldOrderGoods::getRefundStatus,refundStatus)
+        .in(TopOldOrderGoods::getOrderGoodsId,orderGoodsIds));
+
+        if (periodStatus == 2){
+            update(new LambdaUpdateWrapper<TopOldOrder>()
+            .set(TopOldOrder::getRefundStatus,2) //未退款
+            .eq(TopOldOrder::getOrderSn,refundList.get(0).getOrderSn()));
+        }
     }
 
     @Override
@@ -488,9 +658,13 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
     public boolean finishOrder(TopFinishOrderBo bo) {
         //todo 完单角色校验
 
-        return update(new LambdaUpdateWrapper<TopOldOrder>()
-        .set(TopOldOrder::getFinishStatus,bo.getFinishStatus())
-        .in(TopOldOrder::getOrderSn,bo.getOrderSnList()));
+        update(new LambdaUpdateWrapper<TopOldOrder>()
+                .set(TopOldOrder::getFinishStatus,bo.getFinishStatus())
+                .in(TopOldOrder::getOrderSn,bo.getOrderSnList()));
+
+        //todo 分成处理
+
+        return true;
     }
 
     @Override

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

@@ -155,4 +155,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         SELECT * FROM v_top_order
     </select>
 
+    <select id="getOrderBySn" parameterType="java.lang.String" resultType="com.zhongzheng.modules.top.goods.domain.TopOldOrder">
+        SELECT * FROM top_old_order WHERE order_sn = #{orderSn}
+    </select>
+
 </mapper>