소스 검색

APP下单调整

FengChaoYu 4 주 전
부모
커밋
a7e14b799c
19개의 변경된 파일412개의 추가작업 그리고 797개의 파일을 삭제
  1. 16 0
      mall-miniapp-service/src/main/java/com/gree/mall/miniapp/bean/user/CurrentCompanyWechat.java
  2. 15 2
      mall-miniapp-service/src/main/java/com/gree/mall/miniapp/bean/user/UserWxBean.java
  3. 0 25
      mall-miniapp-service/src/main/java/com/gree/mall/miniapp/controller/user/UserController.java
  4. 3 0
      mall-miniapp-service/src/main/java/com/gree/mall/miniapp/enums/OrderStatusEnum.java
  5. 1 3
      mall-miniapp-service/src/main/java/com/gree/mall/miniapp/enums/PayTypeEnum.java
  6. 18 12
      mall-miniapp-service/src/main/java/com/gree/mall/miniapp/logic/common/CommonLogic.java
  7. 28 19
      mall-miniapp-service/src/main/java/com/gree/mall/miniapp/logic/order/OrderLogic.java
  8. 10 8
      mall-miniapp-service/src/main/java/com/gree/mall/miniapp/logic/user/UserLogic.java
  9. 4 0
      mall-server-api/src/main/java/com/gree/mall/manager/bean/order/OrderInfoAddBean.java
  10. 0 161
      mall-server-api/src/main/java/com/gree/mall/manager/controller/order/LeaseOrderController.java
  11. 97 19
      mall-server-api/src/main/java/com/gree/mall/manager/controller/order/OrderController.java
  12. 6 2
      mall-server-api/src/main/java/com/gree/mall/manager/enums/OrderStatusEnum.java
  13. 32 0
      mall-server-api/src/main/java/com/gree/mall/manager/enums/TakeGoodsTypeEnum.java
  14. 1 4
      mall-server-api/src/main/java/com/gree/mall/manager/enums/material/PayTypeEnum.java
  15. 0 418
      mall-server-api/src/main/java/com/gree/mall/manager/logic/order/LeaseOrderLogic.java
  16. 1 1
      mall-server-api/src/main/java/com/gree/mall/manager/logic/order/OrderDeliveryLogic.java
  17. 124 58
      mall-server-api/src/main/java/com/gree/mall/manager/logic/order/OrderLogic.java
  18. 22 31
      mall-server-api/src/main/java/com/gree/mall/manager/logic/order/OrderOfflineLogic.java
  19. 34 34
      mall-server-api/src/main/java/com/gree/mall/manager/schedule/OverOrderSchedule.java

+ 16 - 0
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/bean/user/CurrentCompanyWechat.java

@@ -5,8 +5,11 @@ import com.gree.mall.miniapp.plus.entity.AdminCompanyWechatOther;
 import com.gree.mall.miniapp.plus.entity.User;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import io.swagger.models.auth.In;
 import lombok.Data;
 
+import java.math.BigDecimal;
+
 @ApiModel
 @Data
 public class CurrentCompanyWechat extends AdminCompanyWechat{
@@ -24,5 +27,18 @@ public class CurrentCompanyWechat extends AdminCompanyWechat{
     @ApiModelProperty("师傅昵称")
     private User user;
 
+    @ApiModelProperty("是否配送员 1=是 0=否")
+    private Boolean isDelivery = Boolean.FALSE;
+    @ApiModelProperty("授权额度")
+    private BigDecimal creditLimit = BigDecimal.ZERO;
+    @ApiModelProperty("可用额度")
+    private BigDecimal availableCredit = BigDecimal.ZERO;
+    @ApiModelProperty("是否启用授信功能 1=是 0=否")
+    private Boolean isCreditEnabled = Boolean.FALSE;
+    @ApiModelProperty("账单日(1-28),如果是29表示月末")
+    private Integer billingDay = new Integer("0");
+    @ApiModelProperty("账期天数(1-30天)")
+    private Integer paymentGracePeriod = new Integer("0");
+
 
 }

+ 15 - 2
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/bean/user/UserWxBean.java

@@ -1,10 +1,13 @@
 package com.gree.mall.miniapp.bean.user;
 
 import com.gree.mall.miniapp.plus.entity.User;
+import com.gree.mall.miniapp.plus.entity.UserCompanyAttr;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.math.BigDecimal;
+
 
 @ApiModel
 @Data
@@ -43,6 +46,16 @@ public class UserWxBean extends User {
     @ApiModelProperty("客户端的菜单json")
     private String appModuleJson;
 
-    @ApiModelProperty("是否显示租赁")
-    private Boolean isShowLease = false;
+    @ApiModelProperty("是否配送员 1=是 0=否")
+    private Boolean isDelivery = Boolean.FALSE;
+    @ApiModelProperty("授权额度")
+    private BigDecimal creditLimit = BigDecimal.ZERO;
+    @ApiModelProperty("可用额度")
+    private BigDecimal availableCredit = BigDecimal.ZERO;
+    @ApiModelProperty("是否启用授信功能 1=是 0=否")
+    private Boolean isCreditEnabled = Boolean.FALSE;
+    @ApiModelProperty("账单日(1-28),如果是29表示月末")
+    private Integer billingDay = new Integer("0");
+    @ApiModelProperty("账期天数(1-30天)")
+    private Integer paymentGracePeriod = new Integer("0");
 }

+ 0 - 25
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/controller/user/UserController.java

@@ -183,9 +183,6 @@ public class UserController {
         return ResponseHelper.success(myProfit);
     }
 
-
-
-
     @GetMapping("/profit/total")
     @ApiOperation(value = "总计收益")
     public ResponseHelper<BigDecimal> totalProfit(
@@ -204,18 +201,6 @@ public class UserController {
         return ResponseHelper.success(myCountBean);
     }
 
-
-    @PostMapping("/jsapi/sign")
-    @ApiOperation(value = "获取公众号jsapi sign")
-    public ResponseHelper<WxJsApiSignBean> apply(
-            @ApiParam(required = true, value = "当前页面路径") @RequestParam(required = true) String url
-    ){
-        CurrentCompanyWechat currentCompanyWechat = commonLogic.getCurrentCompanyWechat();
-        WxJsApiSignBean pubJsapiSign = wechatLogic.getPubJsapiSign(currentCompanyWechat.getCompanyWechatId(), url);
-        return ResponseHelper.success(pubJsapiSign);
-    }
-
-
     @PostMapping("/sms/send")
     @ApiOperation(value = "发送验证码(绑定手机号专用)")
     public ResponseHelper sendSms(
@@ -251,16 +236,6 @@ public class UserController {
         return ResponseHelper.success();
     }
 
-    @PostMapping("open/bindOpenId")
-    @ApiOperation("绑定手机号")
-    public ResponseHelper bindOpenId(
-
-    ){
-        CurrentCompanyWechat currentCompanyWechat = commonLogic.getCurrentCompanyWechat();
-        String miniOpenId = commonLogic.getMiniOpenId();
-        return ResponseHelper.success();
-    }
-
     @PostMapping("/my/settle")
     @ApiOperation("我的安维费")
     public ResponseHelper<IPage<SettleMonthWagesWorkerBean>> mySettle(

+ 3 - 0
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/enums/OrderStatusEnum.java

@@ -6,8 +6,11 @@ import lombok.Getter;
 public enum OrderStatusEnum {
     NOPAY("待付款"),
     DQR("待确认"),
+    DJH("待拣货"),
     DFH("待发货"),
     YFH("已发货"),
+    DPS("待配送"),
+    PSZ("配送中"),
     OVER("已完成"),
     CLOSE("已取消"),
     TIMEOUT("超时取消"),

+ 1 - 3
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/enums/PayTypeEnum.java

@@ -7,11 +7,9 @@ import lombok.Getter;
 public enum PayTypeEnum implements BaseEnum {
     WECHAT("WECHAT","微信支付"),
     CASH("CASH","现金"),
-    ALLINPAY("ALLINPAY","通联支付"),
     TRANSFER("TRANSFER","转账支付"),
     STORE("STORE","到店支付"),
-    LINE("LINE","线下支付"),
-    CREDIT("CREDIT","记账"),;
+    CREDIT("CREDIT","授信支付"),;
 
     PayTypeEnum(String key, String remark) {
         this.key=key;this.remark = remark;

+ 18 - 12
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/logic/common/CommonLogic.java

@@ -55,6 +55,8 @@ public class CommonLogic {
     UserWaitService userWaitService;
     @Resource
     OrderPickTimeConfigService orderPickTimeConfigService;
+    @Resource
+    UserCompanyAttrService userCompanyAttrService;
     @Value("${spring.profiles.active}")
     private String profiles;
     @Value("${inf.url}")
@@ -81,9 +83,7 @@ public class CommonLogic {
         String userId = CommonUtils.getUserId(request);
         String device = request.getHeader("device");
         String token = CommonUtils.getToken(request);
-        if (StringUtils.isBlank(token)) {
-            token = request.getParameter("token");
-        }
+
         if (StringUtils.isBlank(token)) {
             token = request.getParameter("x-token");
         }
@@ -123,6 +123,21 @@ public class CommonLogic {
             currentCompanyWechat.setUserId(user.getUserId());
             currentCompanyWechat.setUser(user);
         }
+
+        final UserCompanyAttr userCompanyAttr = userCompanyAttrService.lambdaQuery()
+                .eq(UserCompanyAttr::getUserId, userId)
+                .eq(UserCompanyAttr::getCompanyWechatId, currentCompanyWechat.getCompanyWechatId())
+                .one();
+
+        if (Objects.nonNull(userCompanyAttr)) {
+            currentCompanyWechat.setIsDelivery(userCompanyAttr.getIsDelivery());
+            currentCompanyWechat.setCreditLimit(userCompanyAttr.getCreditLimit());
+            currentCompanyWechat.setAvailableCredit(userCompanyAttr.getAvailableCredit());
+            currentCompanyWechat.setIsCreditEnabled(userCompanyAttr.getIsCreditEnabled());
+            currentCompanyWechat.setBillingDay(userCompanyAttr.getBillingDay());
+            currentCompanyWechat.setPaymentGracePeriod(userCompanyAttr.getPaymentGracePeriod());
+        }
+
         return currentCompanyWechat;
 
     }
@@ -145,15 +160,6 @@ public class CommonLogic {
     }
 
     /**
-     * 获取来源
-     */
-    public String getMiniOpenId() {
-        HttpServletRequest request = ApplicationContextUtils.getHttpServletRequest();
-        String token = request.getHeader("miniOpenId");
-        return token;
-    }
-
-    /**
      * 附件归属绑定
      */
     public void bindFile(String objId, String objType, List<String> fileIds) {

+ 28 - 19
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/logic/order/OrderLogic.java

@@ -157,21 +157,21 @@ public class OrderLogic {
      */
     @Transactional
     public PayDetail buy(OrderBuyBean orderBuyBean, HttpServletRequest request) throws Exception {
-        String ip = IpUtil.getIpAddr(request);
+
         if (StringUtils.isBlank(orderBuyBean.getStorageId())) {
             throw new RemoteServiceException(1100, "缺少仓库");
         }
         if (StringUtils.isBlank(orderBuyBean.getPayTypeId())) {
             throw new RemoteServiceException(1100, "请选择支付方式");
         }
+        if (StringUtils.isBlank(orderBuyBean.getTakeGoodsType())) {
+            throw new RemoteServiceException(1100, "请选择提货方式");
+        }
         if (StringUtils.isBlank(orderBuyBean.getUserAddressId())
-                && orderBuyBean.getPayTypeId().equals(PayTypeEnum.WECHAT.getKey())
+                && (orderBuyBean.getPayTypeId().equals(PayTypeEnum.WECHAT.getKey()) || orderBuyBean.getPayTypeId().equals(PayTypeEnum.CREDIT.getKey()))
                 && orderBuyBean.getTakeGoodsType().equals(TakeGoodsTypeEnum.Y.getKey())) {
             throw new RemoteServiceException(1100, "请选择收货地址");
         }
-        if (StringUtils.isBlank(orderBuyBean.getTakeGoodsType())) {
-            throw new RemoteServiceException(1100, "请选择提货方式");
-        }
         if (orderBuyBean.getTakeGoodsType().equals(TakeGoodsTypeEnum.Z.getKey())
                 && (Objects.isNull(orderBuyBean.getAppointmentPickStartTime())
                 || Objects.isNull(orderBuyBean.getAppointmentPickEndTime()))) {
@@ -199,14 +199,14 @@ public class OrderLogic {
         //运费总额
         BigDecimal totalFreight = BigDecimal.valueOf(0);
         //订单标题
-        String orderTitle = "";
+        StringBuilder orderTitle = new StringBuilder();
         //总数量
         Integer totalNum = 0;
 
         // 收货地址
         UserAddress userAddress = null;
         if (StringUtils.isNotBlank(orderBuyBean.getUserAddressId())
-                && orderBuyBean.getPayTypeId().equals(PayTypeEnum.WECHAT.getKey())
+                && (orderBuyBean.getPayTypeId().equals(PayTypeEnum.WECHAT.getKey()) || orderBuyBean.getPayTypeId().equals(PayTypeEnum.CREDIT.getKey()))
                 && orderBuyBean.getTakeGoodsType().equals(TakeGoodsTypeEnum.Y.getKey())) {
             userAddress = userAddressService.getById(orderBuyBean.getUserAddressId());
         }
@@ -298,7 +298,14 @@ public class OrderLogic {
             orderDetail.setSmallName(goodsSpec.getSmallName());
             orderDetail.setFlag(1);
 
-            BigDecimal freightAmountItem = Objects.nonNull(userAddress) ? this.getFreightAmountItem(userAddress.getProvince(), userAddress.getCity(), userAddress.getArea(), buyGood, currentCompanyWechat) : BigDecimal.valueOf(0);
+//            BigDecimal freightAmountItem = Objects.nonNull(userAddress) ? this.getFreightAmountItem(userAddress.getProvince(), userAddress.getCity(), userAddress.getArea(), buyGood, currentCompanyWechat) : BigDecimal.valueOf(0);
+            BigDecimal freightAmountItem = orderInfo.getTakeGoodsType().equals(TakeGoodsTypeEnum.Z.getKey()) ? BigDecimal.valueOf(0) : goodsSpec.getFirstFee();
+            // 邮寄方式计算次件运费金额
+            if (orderInfo.getTakeGoodsType().equals(TakeGoodsTypeEnum.Y.getKey()) && orderDetail.getNum() > 1) {
+                int surplusNum = orderDetail.getNum() - 1;
+                BigDecimal continueAmountItem = new BigDecimal(surplusNum).multiply(goodsSpec.getContinueFee());
+                freightAmountItem = freightAmountItem.add(continueAmountItem);
+            }
             orderDetail.setFreight(freightAmountItem);
 
             orderDetails.add(orderDetail);
@@ -306,7 +313,7 @@ public class OrderLogic {
             totalPrice = totalPrice.add(orderDetail.getTotalPrice());
             totalPayAmount = totalPayAmount.add(orderDetail.getPayAmount());
             totalFreight = totalFreight.add(freightAmountItem);
-            orderTitle += goods.getGoodsName() + ",";
+            orderTitle.append(goods.getGoodsName()).append(",");
             totalNum += buyGood.getNum();
         }
 
@@ -320,7 +327,9 @@ public class OrderLogic {
 
         orderInfo.setOrderStatus(OrderStatusEnum.NOPAY.toString());
         // 如果是到店支付,订单改为待确认
-        if (orderBuyBean.getPayTypeId().equals(PayTypeEnum.STORE.getKey())) {
+        if (orderBuyBean.getPayTypeId().equals(PayTypeEnum.CREDIT.getKey())) {
+            orderInfo.setOrderStatus(OrderStatusEnum.DJH.toString());
+        } else if (orderBuyBean.getPayTypeId().equals(PayTypeEnum.STORE.getKey())) {
             orderInfo.setOrderStatus(OrderStatusEnum.DQR.toString());
         }
         orderInfo.setUserId(user.getUserId());
@@ -347,9 +356,9 @@ public class OrderLogic {
         UserCouponBean userCoupon = couponLogic.check(orderBuyBean.getUserCouponId(), totalPrice, goodsIds, true);
 
         orderInfo.setTotalNum(totalNum);
-        if (StringUtils.isNotBlank(orderTitle) && orderTitle.length() > 0) {
-            orderTitle = orderTitle.substring(0, orderTitle.length() - 1);
-            orderInfo.setOrderTitle(orderTitle);
+        if (StringUtils.isNotBlank(orderTitle.toString()) && orderTitle.length() > 0) {
+            orderTitle = new StringBuilder(orderTitle.substring(0, orderTitle.length() - 1));
+            orderInfo.setOrderTitle(orderTitle.toString());
         }
         orderInfo.setTotalProductAmount(totalPrice);
         orderInfo.setCompanyWechatId(currentCompanyWechat.getCompanyWechatId());
@@ -372,16 +381,16 @@ public class OrderLogic {
             shoppingCartService.lambdaUpdate().in(ShoppingCart::getShoppingCartId, shoppingCartIds).remove();
         }
 
-        //调起支付
-        String profitSharingFlag = "N";
-        BigDecimal zero = new BigDecimal("0.00");
-
         PayDetail payDetail = new PayDetail();
         payDetail.setId(orderInfo.getOrderId());
 
-        if (!StringUtils.equals(orderBuyBean.getPayTypeId(), PayTypeEnum.STORE.getKey())) {
-            // 在线支付逻辑
+        if (StringUtils.equals(orderBuyBean.getPayTypeId(), PayTypeEnum.WECHAT.getKey())) {
+            // TODO 在线支付逻辑
 
+        } else if (StringUtils.equals(orderBuyBean.getPayTypeId(), PayTypeEnum.CREDIT.getKey())) {
+            // TODO 授信支付逻辑
+
+            payDetail.setIsPay(false);
         } else {
             payDetail.setIsPay(false);
         }

+ 10 - 8
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/logic/user/UserLogic.java

@@ -493,12 +493,16 @@ public class UserLogic {
         userWxBean.setModuleYb(currentCompanyWechat.getModuleYb());
         userWxBean.setModuleEs(currentCompanyWechat.getModuleEs());
         userWxBean.setStorePay(currentCompanyWechat.getStorePay());
-        final AdminCompanyWechat companyWechat = adminCompanyWechatService.list().get(0);
-        if (Objects.nonNull(companyWechat)) {
-            userWxBean.setIsShowLease(companyWechat.getModuleZl());
-            userWxBean.setCompanyType(companyWechat.getCompanyType());
-            userWxBean.setAppModuleJson(companyWechat.getAppModuleJson());
-        }
+
+        userWxBean.setCompanyType(currentCompanyWechat.getCompanyType());
+        userWxBean.setAppModuleJson(currentCompanyWechat.getAppModuleJson());
+
+        userWxBean.setIsDelivery(currentCompanyWechat.getIsDelivery());
+        userWxBean.setCreditLimit(currentCompanyWechat.getCreditLimit());
+        userWxBean.setAvailableCredit(currentCompanyWechat.getAvailableCredit());
+        userWxBean.setIsCreditEnabled(currentCompanyWechat.getIsCreditEnabled());
+        userWxBean.setBillingDay(currentCompanyWechat.getBillingDay());
+        userWxBean.setPaymentGracePeriod(currentCompanyWechat.getPaymentGracePeriod());
 
 
         return userWxBean;
@@ -768,8 +772,6 @@ public class UserLogic {
                 user.setLastLoginTime(new Date());
                 user.setCreateTime(new Date());
                 user.setMobile(mobile);
-//                user.setCompanyWechatId(wechat.getCompanyWechatId());
-//                user.setCompanyName(wechat.getCompanyName());
                 userService.save(user);
             } else {
                 //如果用户存在,并更新相关信息

+ 4 - 0
mall-server-api/src/main/java/com/gree/mall/manager/bean/order/OrderInfoAddBean.java

@@ -71,6 +71,10 @@ public class OrderInfoAddBean {
     @ApiModelProperty("提货开始时间")
     private String pickStartTime;
 
+    @NotBlank(message = "提货方式不能为空")
+    @ApiModelProperty("提货方式")
+    private String takeGoodsType;
+
     @NotBlank(message = "提货时间不能为空")
     @Pattern(regexp = "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$", message = "提货时间格式有误")
     @ApiModelProperty("提货结束时间")

+ 0 - 161
mall-server-api/src/main/java/com/gree/mall/manager/controller/order/LeaseOrderController.java

@@ -1,161 +0,0 @@
-package com.gree.mall.manager.controller.order;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.gree.mall.manager.bean.order.LeaseOrderBean;
-import com.gree.mall.manager.bean.order.LeaseOrderVO;
-import com.gree.mall.manager.constant.Constant;
-import com.gree.mall.manager.enums.LeaseOrderStatusEnum;
-import com.gree.mall.manager.exception.RemoteServiceException;
-import com.gree.mall.manager.helper.ResponseHelper;
-import com.gree.mall.manager.logic.order.LeaseOrderLogic;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.integration.redis.util.RedisLockRegistry;
-import org.springframework.web.bind.annotation.*;
-
-import javax.annotation.Resource;
-import javax.servlet.http.HttpServletRequest;
-import java.math.BigDecimal;
-import java.util.Date;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.locks.Lock;
-
-@Slf4j
-@RestController
-@Api(value = "租赁订单列表", tags ={"租赁订单列表"} )
-@RequestMapping(value = "/lease/order", produces = "application/json; charset=utf-8")
-public class LeaseOrderController {
-
-    @Resource
-    LeaseOrderLogic leaseOrderLogic;
-    @Resource
-    private RedisLockRegistry redisLockRegistry;
-
-    @PostMapping("/list/page")
-    @ApiOperation(value = "订单列表")
-    public ResponseHelper<IPage<LeaseOrderVO>> page(
-            @ApiParam(value = "订单Id") @RequestParam(required = false) String orderId,
-            @ApiParam(value = "商品名称") @RequestParam(required = false) String goodsName,
-            @ApiParam(value = "会员昵称") @RequestParam(required = false) String userName,
-            @ApiParam(value = "手机号") @RequestParam(required = false) String userMobile,
-            @ApiParam(value = "订单状态") @RequestParam(required = false) LeaseOrderStatusEnum status,
-            @ApiParam(value = "创建开始时间") @RequestParam(required = false) Date startDate,
-            @ApiParam(value = "创建结束时间") @RequestParam(required = false) Date endDate,
-            @ApiParam(value = "支付开始时间") @RequestParam(required = false) Date startPayDate,
-            @ApiParam(value = "支付结束时间") @RequestParam(required = false) Date endPayDate,
-            @ApiParam(value = "页号",required = true) @RequestParam Integer pageNum,
-            @ApiParam(value = "页大小",required = true) @RequestParam Integer pageSize,
-            HttpServletRequest request
-    ) throws Exception {
-        IPage<LeaseOrderVO> page = leaseOrderLogic.page(orderId, goodsName, userName,
-                userMobile, status, startDate, endDate, startPayDate, endPayDate, pageNum, pageSize , request);
-        return ResponseHelper.success(page);
-    }
-
-    @PostMapping("/detail")
-    @ApiOperation(value = "详情")
-    public ResponseHelper<LeaseOrderBean> detail(
-            @ApiParam(value = "订单id") @RequestParam String id
-    ) throws Exception {
-        LeaseOrderBean bean = leaseOrderLogic.detail(id);
-        return ResponseHelper.success(bean);
-    }
-
-    @PostMapping("/add")
-    @ApiOperation(value = "新增")
-    public ResponseHelper add(
-            @RequestBody LeaseOrderBean bean
-    ) throws Exception {
-        leaseOrderLogic.add(bean);
-        return ResponseHelper.success();
-    }
-
-    @PostMapping("/cancel")
-    @ApiOperation(value = "取消订单")
-    public ResponseHelper cancel(
-            @ApiParam(value = "订单id") @RequestParam String id
-    ) throws Exception {
-        Lock obtain = redisLockRegistry.obtain(Constant.RedisPrefix.LOCK_ORDER + ":" + id);
-        if (!obtain.tryLock(10, TimeUnit.SECONDS)) {
-            throw new RemoteServiceException("系统繁忙,请稍后再尝试");
-        }
-        try {
-            leaseOrderLogic.cancel(id);
-        } finally {
-            obtain.unlock();
-        }
-
-        return ResponseHelper.success();
-    }
-
-    @PostMapping("/confirm")
-    @ApiOperation(value = "确认订单")
-    public ResponseHelper confirm(
-            @RequestBody LeaseOrderBean bean
-    ) throws Exception {
-        Lock obtain = redisLockRegistry.obtain(Constant.RedisPrefix.LOCK_ORDER + ":" + bean.getId());
-        if (!obtain.tryLock(10, TimeUnit.SECONDS)) {
-            throw new RemoteServiceException("系统繁忙,请稍后再尝试");
-        }
-        try {
-            leaseOrderLogic.confirm(bean);
-        } finally {
-            obtain.unlock();
-        }
-
-        return ResponseHelper.success();
-    }
-
-    @PostMapping("/recover")
-    @ApiOperation(value = "确定回收")
-    public ResponseHelper recover(
-            @ApiParam(value = "订单id") @RequestParam String id,
-            @ApiParam(value = "实际到期日期") @RequestParam Date RealEndDate
-    ) throws Exception {
-        Lock obtain = redisLockRegistry.obtain(Constant.RedisPrefix.LOCK_ORDER + ":" + id);
-        if (!obtain.tryLock(10, TimeUnit.SECONDS)) {
-            throw new RemoteServiceException("系统繁忙,请稍后再尝试");
-        }
-        try {
-            leaseOrderLogic.recover(id, RealEndDate);
-        } finally {
-            obtain.unlock();
-        }
-
-        return ResponseHelper.success();
-    }
-
-    @PostMapping("/renewal")
-    @ApiOperation(value = "续期")
-    public ResponseHelper renewal(
-            @ApiParam(value = "订单id") @RequestParam String id,
-            @ApiParam(value = "实际到期日期") @RequestParam Date RealEndDate
-    ) throws Exception {
-        Lock obtain = redisLockRegistry.obtain(Constant.RedisPrefix.LOCK_ORDER + ":" + id);
-        if (!obtain.tryLock(10, TimeUnit.SECONDS)) {
-            throw new RemoteServiceException("系统繁忙,请稍后再尝试");
-        }
-        try {
-            leaseOrderLogic.renewal(id, RealEndDate);
-        } finally {
-            obtain.unlock();
-        }
-
-        return ResponseHelper.success();
-    }
-
-    @PostMapping("/compute/amount")
-    @ApiOperation(value = "计算金额")
-    public ResponseHelper<BigDecimal> computeAmount(
-            @ApiParam(value = "是否续租 true=是 false=否") @RequestParam Boolean isRenewal,
-            @ApiParam(value = "开始日期") @RequestParam Date startDate,
-            @ApiParam(value = "结束日期") @RequestParam Date endDate,
-            @ApiParam(value = "数量") @RequestParam BigDecimal qty,
-            @ApiParam(value = "价格") @RequestParam BigDecimal price
-    ) throws Exception {
-        BigDecimal amount = leaseOrderLogic.computeAmount(isRenewal, startDate, endDate, qty, price);
-        return ResponseHelper.success(amount);
-    }
-}

+ 97 - 19
mall-server-api/src/main/java/com/gree/mall/manager/controller/order/OrderController.java

@@ -52,13 +52,11 @@ public class OrderController {
             @ApiParam(value = "产品名称", required = false) @RequestParam(required = false) String productName,
             @ApiParam(value = "用户名", required = false) @RequestParam(required = false) String userName,
             @ApiParam(value = "手机号", required = false) @RequestParam(required = false) String phone,
-            @ApiParam(value = "兑换码", required = false) @RequestParam(required = false) String exchangeCode,
-            @ApiParam(value = "订单状态 NOPAY:待付款 DQR=待确认 DFH:待发货 YFH:已发货 OVER:已完成 CLOSE:已关闭 ", required = false) @RequestParam(required = false) List<String> orderStatus,
+            @ApiParam(value = "订单状态 NOPAY:待付款 DQR=待确认 DJH:待拣货 DFH:待发货 DPS:待配送 OVER:已完成 CLOSE:已关闭 ", required = false) @RequestParam(required = false) List<String> orderStatus,
             @ApiParam(value = "开始创建时间", required = false) @RequestParam(required = false) String startCreateTime,
             @ApiParam(value = "结束创建时间", required = false) @RequestParam(required = false) String endCreateTime,
             @ApiParam(value = "开始支付时间", required = false) @RequestParam(required = false) String startPayTime,
             @ApiParam(value = "结束支付时间", required = false) @RequestParam(required = false) String endPayTime,
-            @ApiParam(value = "网点id", required = false) @RequestParam(required = false) String websitId,
             @ApiParam(value = "页号", required = true) @RequestParam(required = true) Integer pageNum,
             @ApiParam(value = "页大小", required = true) @RequestParam(required = true) Integer pageSize,
             @ApiParam(value = "是否是差评订单0:未评价订单 1:差评订单 2:好评订单 3:已评价订单  不传都有", required = false) @RequestParam(required = false) String isNegative,
@@ -68,16 +66,16 @@ public class OrderController {
              HttpServletRequest request
     ) throws RemoteServiceException {
         IPage<OrderDetailBean> list = orderLogic
-                .list(request,userId,orderId, productName, userName, phone,exchangeCode, orderStatus, startCreateTime,
-                        endCreateTime, startPayTime, endPayTime,websitId,pageNum, pageSize,isNegative,abnormalDispatch,workerOrderNo,goodsId);
+                .list(request,userId,orderId, productName, userName, phone, orderStatus, startCreateTime,
+                        endCreateTime, startPayTime, endPayTime, pageNum, pageSize, isNegative, abnormalDispatch, workerOrderNo, goodsId);
         return ResponseHelper.success(list);
     }
 
     @GetMapping("/detail")
     @ApiOperation("订单详情")
     public ResponseHelper<OrderDetailBeanVO> detail(
-            @ApiParam(value = "订单号", required = true) @RequestParam(required = true) String orderId,
-            @ApiParam(value = "仓库id", required = false) @RequestParam(required = false) String storageId
+            @ApiParam(value = "订单号", required = true) @RequestParam String orderId,
+            @ApiParam(value = "仓库id") @RequestParam(required = false) String storageId
     ) {
         OrderDetailBeanVO detail = orderLogic.detail(orderId,storageId);
         return ResponseHelper.success(detail);
@@ -87,8 +85,8 @@ public class OrderController {
     @PostMapping("/comment/show")
     @ApiOperation("显示评价")
     public ResponseHelper showComment(
-            @ApiParam(value = "订单号", required = true) @RequestParam(required = true) String orderId,
-            @ApiParam(value = "true=显示 false=不显示", required = true) @RequestParam(required = true) Boolean isShow
+            @ApiParam(value = "订单号", required = true) @RequestParam String orderId,
+            @ApiParam(value = "true=显示 false=不显示", required = true) @RequestParam Boolean isShow
     ) {
         orderLogic.updateShowComment(orderId,isShow);
         return ResponseHelper.success();
@@ -97,9 +95,18 @@ public class OrderController {
     @PostMapping("/ackOrder")
     @ApiOperation("确认订单")
     public ResponseHelper ackOrder(
-            @ApiParam(value = "订单号", required = true) @RequestParam(required = true) String orderId
+            @ApiParam(value = "订单号", required = true) @RequestParam String orderId
     ) throws Exception {
-        orderLogic.ack(orderId);
+        Lock obtain = redisLockRegistry.obtain(Constant.RedisPrefix.LOCK_ORDER + orderId);
+        if(!obtain.tryLock(10,TimeUnit.SECONDS)){
+            return ResponseHelper.error("系统繁忙,请稍后再试");
+        }
+        try {
+            orderLogic.ack(orderId);
+        }finally {
+            obtain.unlock();
+        }
+
         return ResponseHelper.success();
     }
 
@@ -138,7 +145,7 @@ public class OrderController {
     @PostMapping("/cancel")
     @ApiOperation("取消订单")
     public ResponseHelper remark(
-            @ApiParam(value = "订单号", required = true) @RequestParam(required = true) String orderId
+            @ApiParam(value = "订单号", required = true) @RequestParam String orderId
     ) throws Exception {
         orderLogic.cancel(orderId);
         return ResponseHelper.success();
@@ -147,13 +154,84 @@ public class OrderController {
     @PostMapping("/ack")
     @ApiOperation("确认收款")
     public ResponseHelper ack(
-            @ApiParam(value = "订单号", required = true) @RequestParam(required = true) String orderId
+            @ApiParam(value = "订单号", required = true) @RequestParam String orderId
     ) {
         orderLogic.ackPay(orderId);
         return ResponseHelper.success();
     }
 
+    @PostMapping("/confirm/refund")
+    @ApiOperation("确认退款")
+    public ResponseHelper confirmRefund(
+            @ApiParam(value = "订单号", required = true) @RequestParam String orderId
+    ) throws Exception {
+        Lock obtain = redisLockRegistry.obtain(Constant.RedisPrefix.LOCK_ORDER + orderId);
+        if(!obtain.tryLock(10,TimeUnit.SECONDS)){
+            return ResponseHelper.error("系统繁忙,请稍后再试");
+        }
+        try {
+            orderLogic.confirmRefund(orderId);
+        }finally {
+            obtain.unlock();
+        }
+
+        return ResponseHelper.success();
+    }
+
+    @PostMapping("/completes/pick")
+    @ApiOperation("完成拣货")
+    public ResponseHelper completesPick(
+            @ApiParam(value = "订单号", required = true) @RequestParam String orderId
+    ) throws Exception {
+        Lock obtain = redisLockRegistry.obtain(Constant.RedisPrefix.LOCK_ORDER + orderId);
+        if(!obtain.tryLock(10,TimeUnit.SECONDS)){
+            return ResponseHelper.error("系统繁忙,请稍后再试");
+        }
+        try {
+            orderLogic.completesPick(orderId);
+        }finally {
+            obtain.unlock();
+        }
+
+        return ResponseHelper.success();
+    }
+
+    @PostMapping("/start/delivery")
+    @ApiOperation("开始配送")
+    public ResponseHelper startDelivery(
+            @ApiParam(value = "订单号", required = true) @RequestParam String orderId
+    ) throws Exception {
+        Lock obtain = redisLockRegistry.obtain(Constant.RedisPrefix.LOCK_ORDER + orderId);
+        if(!obtain.tryLock(10,TimeUnit.SECONDS)){
+            return ResponseHelper.error("系统繁忙,请稍后再试");
+        }
+        try {
+            orderLogic.startDelivery(orderId);
+        }finally {
+            obtain.unlock();
+        }
+
+        return ResponseHelper.success();
+    }
+
+    @PostMapping("/add/delivery")
+    @ApiOperation("添加配送员")
+    public ResponseHelper addDelivery(
+            @ApiParam(value = "订单号", required = true) @RequestParam String orderId,
+            @ApiParam(value = "配送员id", required = true) @RequestParam String userId
+    ) throws Exception {
+        Lock obtain = redisLockRegistry.obtain(Constant.RedisPrefix.LOCK_ORDER + orderId);
+        if(!obtain.tryLock(10,TimeUnit.SECONDS)){
+            return ResponseHelper.error("系统繁忙,请稍后再试");
+        }
+        try {
+            orderLogic.addDelivery(orderId, userId);
+        }finally {
+            obtain.unlock();
+        }
 
+        return ResponseHelper.success();
+    }
 
     @PostMapping("/detail/refund")
     @ApiOperation("订单详情主动退款")
@@ -210,12 +288,12 @@ public class OrderController {
     @PostMapping("/goods/deliver")
     @ApiOperation("发货")
     public ResponseHelper deliverGoods(
-            @ApiParam(value = "订单号", required = true) @RequestParam(required = true) String orderId,
-            @ApiParam(value = "快递单号", required = true) @RequestParam(required = true) String logisticsNo,
-            @ApiParam(value = "货仓id", required = true) @RequestParam(required = true) String storageId,
-            @ApiParam(value = "快递公司编号", required = true) @RequestParam(required = true) String companyCode,
-            @ApiParam(value = "是否需要派单 true=是 false=否", required = false) @RequestParam(required = false) Boolean workOrder,
-            @ApiParam(value = "是否退换单 true=是 false=否", required = false) @RequestParam(required = false) Boolean exchange
+            @ApiParam(value = "订单号", required = true) @RequestParam String orderId,
+            @ApiParam(value = "快递单号", required = true) @RequestParam String logisticsNo,
+            @ApiParam(value = "货仓id", required = true) @RequestParam String storageId,
+            @ApiParam(value = "快递公司编号", required = true) @RequestParam String companyCode,
+            @ApiParam(value = "是否需要派单 true=是 false=否") @RequestParam(required = false) Boolean workOrder,
+            @ApiParam(value = "是否退换单 true=是 false=否") @RequestParam(required = false) Boolean exchange
     ) throws Exception {
         Lock obtain = redisLockRegistry.obtain(Constant.RedisPrefix.LOCK_ORDER + orderId);
         if(!obtain.tryLock(10,TimeUnit.SECONDS)){

+ 6 - 2
mall-server-api/src/main/java/com/gree/mall/manager/enums/OrderStatusEnum.java

@@ -9,8 +9,11 @@ import java.util.List;
 public enum OrderStatusEnum {
     NOPAY("待付款"),
     DQR("待确认"),
+    DJH("待拣货"),
     DFH("待发货"),
-    YFH("已发货"),
+    DPS("待配送"),
+    PSZ("配送中"),
+    DTK("待退款"),
     OVER("已完成"),
     TIMEOUT("超时取消"),
     CLOSE("已取消"),
@@ -25,7 +28,8 @@ public enum OrderStatusEnum {
     private String name;
 
     public static boolean cancelOrderContains(String value) {
-        List<String> orderStatusList = Arrays.asList(OrderStatusEnum.NOPAY.toString(), OrderStatusEnum.DQR.toString(), OrderStatusEnum.DFH.toString());
+        List<String> orderStatusList = Arrays.asList(OrderStatusEnum.NOPAY.toString(), OrderStatusEnum.DTK.toString(),
+                OrderStatusEnum.OVER.toString(), OrderStatusEnum.CLOSE.toString());
         return orderStatusList.contains(value);
     }
 }

+ 32 - 0
mall-server-api/src/main/java/com/gree/mall/manager/enums/TakeGoodsTypeEnum.java

@@ -0,0 +1,32 @@
+package com.gree.mall.manager.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonValue;
+import com.gree.mall.manager.enums.base.BaseEnum;
+import lombok.AccessLevel;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor(access = AccessLevel.PRIVATE)
+public enum TakeGoodsTypeEnum implements BaseEnum {
+    Z("0","自提"),
+    Y("1","邮寄");
+
+
+
+    @EnumValue
+    @JsonValue
+    private final String key;
+    private final String remark;
+
+    public static IsEnum findEnumByKey(String key) {
+        IsEnum[] values = IsEnum.values();
+        for (IsEnum isEnum : values) {
+            if (isEnum.getKey().equals(key)) {
+                return isEnum;
+            }
+        }
+        return null;
+    }
+}

+ 1 - 4
mall-server-api/src/main/java/com/gree/mall/manager/enums/material/PayTypeEnum.java

@@ -12,11 +12,8 @@ import lombok.RequiredArgsConstructor;
 public enum PayTypeEnum implements BaseEnum {
     CASH("CASH","现金支付"),
     WECHAT("WECHAT","微信支付"),
-    ALLINPAY("ALLINPAY","通联支付"),
-    ENGIN("ENGIN","工程支付"),
     TRANSFER("TRANSFER","转账支付"),
-    LINE("LINE","线下支付"),
-    CREDIT("CREDIT","记账")
+    CREDIT("CREDIT","授信支付")
     ;
 
     @EnumValue

+ 0 - 418
mall-server-api/src/main/java/com/gree/mall/manager/logic/order/LeaseOrderLogic.java

@@ -1,418 +0,0 @@
-package com.gree.mall.manager.logic.order;
-
-import cn.hutool.core.collection.CollectionUtil;
-import cn.hutool.core.date.DateTime;
-import cn.hutool.core.date.DateUtil;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.gree.mall.manager.bean.admin.AdminUserCom;
-import com.gree.mall.manager.bean.order.LeaseOrderBean;
-import com.gree.mall.manager.bean.order.LeaseOrderVO;
-import com.gree.mall.manager.commonmapper.CommonMapper;
-import com.gree.mall.manager.enums.LeaseOrderStatusEnum;
-import com.gree.mall.manager.enums.material.PayTypeEnum;
-import com.gree.mall.manager.exception.RemoteServiceException;
-import com.gree.mall.manager.logic.common.CommonLogic;
-import com.gree.mall.manager.plus.entity.*;
-import com.gree.mall.manager.plus.service.*;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.BeanUtils;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import javax.servlet.http.HttpServletRequest;
-import java.math.BigDecimal;
-import java.util.*;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-
-@Service
-@Slf4j
-@RequiredArgsConstructor
-public class LeaseOrderLogic {
-
-    private final CommonLogic commonLogic;
-    private final CommonMapper commonMapper;
-    private final LeaseOrderService leaseOrderService;
-    private final LeaseOrderItemService leaseOrderItemService;
-    private final LeaseOrderPayRecordService leaseOrderPayRecordService;
-    private final GoodsLeaseService goodsLeaseService;
-    private final PgOrderBaseService pgOrderBaseService;
-
-
-    public IPage<LeaseOrderVO> page(String orderId, String goodsName, String userName, String userMobile, LeaseOrderStatusEnum status, Date startDate, Date endDate, Date startPayDate, Date endPayDate, Integer pageNum, Integer pageSize, HttpServletRequest request) {
-        //获取当前登录微信企业微信id
-        AdminUserCom adminUser = commonLogic.getAdminUser(request);
-        List<String> companyWechatIds = adminUser.getCompanyWechatIds();
-
-        IPage<LeaseOrderVO> page = commonMapper.leaseOrderList(new Page<>(pageNum, pageSize), orderId, goodsName, userName,
-                userMobile, Objects.nonNull(status) ? status.getKey() : null, startDate, endDate, startPayDate, endPayDate, companyWechatIds);
-
-        return page;
-    }
-
-    public LeaseOrderBean detail(String id) {
-        final LeaseOrder order = leaseOrderService.getById(id);
-        LeaseOrderBean bean = new LeaseOrderBean();
-        BeanUtils.copyProperties(order, bean);
-
-        final List<LeaseOrderItem> items = leaseOrderItemService.lambdaQuery()
-                .eq(LeaseOrderItem::getLeaseOrderId, id)
-                .list();
-        bean.setItems(items);
-
-        final List<LeaseOrderPayRecord> records = leaseOrderPayRecordService.lambdaQuery()
-                .eq(LeaseOrderPayRecord::getLeaseOrderId, id)
-                .eq(LeaseOrderPayRecord::getPayStatus, true)
-                .list();
-        bean.setRecords(records);
-
-        final List<PgOrderBase> orderBases = pgOrderBaseService.lambdaQuery()
-                .eq(PgOrderBase::getSaleOrderId, id)
-                .list();
-
-        bean.setOrderBases(orderBases);
-
-        return bean;
-    }
-
-    @Transactional
-    public void add(LeaseOrderBean bean) {
-        AdminUserCom adminUser = commonLogic.getAdminUser();
-        if (Objects.isNull(adminUser.getAdminCompanyWechat())) {
-            throw new RemoteServiceException("平台账号不能新增");
-        }
-        if (StringUtils.isBlank(bean.getUserName())) {
-            throw new RemoteServiceException("客户名称不能为空");
-        }
-        if (StringUtils.isBlank(bean.getUserMobile())) {
-            throw new RemoteServiceException("客户电话不能为空");
-        }
-        if (StringUtils.isBlank(bean.getUserAddress())
-                || StringUtils.isBlank(bean.getProvince())
-                || StringUtils.isBlank(bean.getArea())
-                || StringUtils.isBlank(bean.getCity())
-                || StringUtils.isBlank(bean.getStreet())) {
-            throw new RemoteServiceException("用户地址不能为空");
-        }
-        if (CollectionUtil.isEmpty(bean.getItems())) {
-            throw new RemoteServiceException("商品信息不能为空");
-        }
-        try {
-            final Map<String, LeaseOrderItem> itemMap = bean.getItems().stream()
-                    .collect(Collectors.toMap(LeaseOrderItem::getGoodsLeaseId, Function.identity()));
-        } catch (Exception e) {
-            throw new RemoteServiceException("重复商品请合并");
-        }
-        for (LeaseOrderItem item : bean.getItems()) {
-            final String id = commonLogic.generateNo("ZP", "LEASE_ORDER", 13);
-            final GoodsLease goodsLease = goodsLeaseService.getById(item.getGoodsLeaseId());
-            LeaseOrder order = new LeaseOrder();
-            BeanUtils.copyProperties(bean, order);
-            order.setId(id)
-                    .setPayStatus(true)
-                    .setCompanyWechatId(adminUser.getAdminCompanyWechat().getCompanyWechatId())
-                    .setCompanyWechatName(adminUser.getAdminCompanyWechat().getCompanyName())
-                    .setOnLineBill(false)
-                    .setBookAmount(BigDecimal.valueOf(item.getQty()).multiply(goodsLease.getDepositPrice()))
-                    .setPayType(PayTypeEnum.LINE.getKey())
-                    .insert();
-
-            item.setCompanyWechatId(order.getCompanyWechatId())
-                    .setCompanyWechatName(order.getCompanyWechatName())
-                    .setLeaseOrderId(order.getId())
-                    .setLeasePrice(goodsLease.getLeasePrice())
-                    .setDepositPrice(goodsLease.getDepositPrice())
-                    .insert();
-
-            LeaseOrderBean confirmBean = new LeaseOrderBean();
-            BeanUtils.copyProperties(order, confirmBean);
-            confirmBean.setItems(new ArrayList<LeaseOrderItem>() {{ this.add(item); }});
-            // 调确认
-            this.confirm(confirmBean);
-        }
-    }
-
-    @Transactional
-    public void cancel(String id) {
-        AdminUserCom adminUser = commonLogic.getAdminUser();
-        leaseOrderService.lambdaUpdate()
-                .set(LeaseOrder::getCancelBy, adminUser.getNickName())
-                .set(LeaseOrder::getCancelTime, DateUtil.date())
-                .set(LeaseOrder::getStatus, LeaseOrderStatusEnum.CANCEL.getKey())
-                .eq(LeaseOrder::getStatus, LeaseOrderStatusEnum.WAIT.getKey())
-                .eq(LeaseOrder::getId, id)
-                .update();
-    }
-
-    @Transactional
-    public void confirm(LeaseOrderBean bean) {
-        AdminUserCom adminUser = commonLogic.getAdminUser();
-
-        final LeaseOrder oldOrder = leaseOrderService.getById(bean.getId());
-        if (!oldOrder.getStatus().equals(LeaseOrderStatusEnum.WAIT.getKey())) {
-            throw new RemoteServiceException("订单非“待确认”状态,请刷新页面");
-        }
-
-        final List<LeaseOrderItem> itemList = leaseOrderItemService.lambdaQuery()
-                .eq(LeaseOrderItem::getLeaseOrderId, bean.getId())
-                .list();
-
-        this.handleParams(bean);
-
-        final Map<String, LeaseOrderItem> itemMap = itemList.stream().collect(Collectors.toMap(LeaseOrderItem::getId, Function.identity()));
-
-        // 总租金
-        BigDecimal totalAmount = BigDecimal.ZERO;
-        // 总押金
-        BigDecimal depositAmount = BigDecimal.ZERO;
-        // 总订金
-        BigDecimal bookAmount = BigDecimal.ZERO;
-        for (LeaseOrderItem item : bean.getItems()) {
-            if (itemMap.containsKey(item.getId())) {
-                final LeaseOrderItem leaseOrderItem = itemMap.get(item.getId());
-                if (!oldOrder.getOnLineBill()) {
-                    leaseOrderItem.setDepositPrice(item.getDepositPrice());
-                }
-                leaseOrderItem.setQty(item.getQty())
-                        .setLeasePrice(item.getLeasePrice())
-                        .setStartDate(item.getStartDate())
-                        .setEndDate(item.getEndDate())
-                        .setDepositAmount(item.getDepositAmount())
-                        .setRenewalPrice(item.getRenewalPrice())
-                        .setLeaseAmount(item.getLeaseAmount())
-                        .setLeaseDay(item.getLeaseDay());
-
-                totalAmount = totalAmount.add(item.getLeaseAmount());
-                depositAmount = depositAmount.add(item.getDepositAmount());
-                bookAmount = bookAmount.add(leaseOrderItem.getDepositPrice().multiply(BigDecimal.valueOf(leaseOrderItem.getQty())));
-            }
-        }
-
-        oldOrder.setStatus(LeaseOrderStatusEnum.WAIT_START.getKey());
-
-        final DateTime curTimeDate = DateUtil.parseDate(DateUtil.formatDate(DateUtil.date()));
-        if (!bean.getItems().get(0).getStartDate().after(curTimeDate) || bean.getItems().get(0).getStartDate().getTime() == curTimeDate.getTime()) {
-            oldOrder.setStatus(LeaseOrderStatusEnum.LEASE.getKey());
-        }
-
-        if (!oldOrder.getOnLineBill()) {
-            oldOrder.setBookAmount(bookAmount);
-
-            LeaseOrderPayRecord record = new LeaseOrderPayRecord();
-            record.setLeaseOrderId(oldOrder.getId())
-                    .setCompanyWechatId(oldOrder.getCompanyWechatId())
-                    .setCompanyWechatName(oldOrder.getCompanyWechatName())
-                    .setPayTime(DateUtil.date())
-                    .setPayValue(BigDecimal.ZERO)
-                    .setOrderType("FIRST")
-                    .setStartDate(itemList.get(0).getStartDate())
-                    .setEndDate(itemList.get(0).getEndDate())
-                    .setPayStatus(true)
-                    .setSort(1)
-                    .insert();
-        } else {
-            LeaseOrderPayRecord record = leaseOrderPayRecordService.lambdaQuery()
-                    .eq(LeaseOrderPayRecord::getLeaseOrderId, oldOrder.getId())
-                    .eq(LeaseOrderPayRecord::getOrderType, "FIRST")
-                    .eq(LeaseOrderPayRecord::getPayStatus, true)
-                    .one();
-            if (Objects.isNull(record)) {
-                throw new RemoteServiceException("线上订单,初次租赁记录为空,数据异常");
-            }
-            if (record.getStartDate().compareTo(itemList.get(0).getStartDate()) != 0
-                    || record.getEndDate().compareTo(itemList.get(0).getStartDate()) != 0) {
-                record.setStartDate(itemList.get(0).getStartDate())
-                        .setEndDate(itemList.get(0).getEndDate())
-                        .updateById();
-            }
-        }
-
-        oldOrder.setUserName(bean.getUserName())
-                .setUserMobile(bean.getUserMobile())
-                .setProvinceId(bean.getProvinceId())
-                .setProvince(bean.getProvince())
-                .setAreaId(bean.getAreaId())
-                .setArea(bean.getArea())
-                .setCityId(bean.getCityId())
-                .setCity(bean.getCity())
-                .setStreetId(bean.getStreetId())
-                .setStreet(bean.getStreet())
-                .setUserAddress(bean.getUserAddress())
-                .setTotalAmount(totalAmount)
-                .setDepositAmount(depositAmount)
-                .setFileUrl(bean.getFileUrl())
-                .setConfirmBy(adminUser.getNickName())
-                .setConfirmTime(DateUtil.date());
-
-        oldOrder.updateById();
-        leaseOrderItemService.saveOrUpdateBatch(itemList);
-    }
-
-    private void handleParams(LeaseOrderBean bean) {
-        if (StringUtils.isBlank(bean.getUserName())) {
-            throw new RemoteServiceException("客户名称不能为空");
-        }
-        if (StringUtils.isBlank(bean.getUserMobile())) {
-            throw new RemoteServiceException("客户电话不能为空");
-        }
-        if (StringUtils.isBlank(bean.getUserAddress())) {
-            throw new RemoteServiceException("用户地址不能为空");
-        }
-        if (StringUtils.isBlank(bean.getFileUrl())) {
-            throw new RemoteServiceException("租赁合同不能为空");
-        }
-        if (CollectionUtil.isEmpty(bean.getItems())) {
-            throw new RemoteServiceException("租赁商品不能为空");
-        }
-        for (LeaseOrderItem item : bean.getItems()) {
-            if (Objects.isNull(item.getDepositPrice())) {
-                throw new RemoteServiceException("订金不能为空");
-            }
-            if (Objects.isNull(item.getLeasePrice())) {
-                throw new RemoteServiceException("租价不能为空");
-            }
-            if (Objects.isNull(item.getQty()) || item.getQty() <= 0) {
-                throw new RemoteServiceException("数量不能少于0");
-            }
-            if (Objects.isNull(item.getStartDate())) {
-                throw new RemoteServiceException("起租日期不能为空");
-            }
-            if (Objects.isNull(item.getEndDate())) {
-                throw new RemoteServiceException("到期日期不能为空");
-            }
-            final DateTime curTimeDate = DateUtil.parseDate(DateUtil.formatDate(DateUtil.date()));
-            if (item.getEndDate().getTime() < curTimeDate.getTime()) {
-                throw new RemoteServiceException("到期日期必须大于或等于当前日期");
-            }
-            if (item.getStartDate().getTime() > item.getEndDate().getTime()) {
-                throw new RemoteServiceException("起租日期不能大于到期日期");
-            }
-            if (Objects.isNull(item.getDepositAmount())) {
-                throw new RemoteServiceException("押金不能为为空");
-            }
-            if (Objects.isNull(item.getRenewalPrice())) {
-                throw new RemoteServiceException("续期单价不能为为空");
-            }
-            long leaseDay = DateUtil.betweenDay(item.getStartDate(), item.getEndDate(), true) + 1;
-            // 总租金=数量*租价/30天*(到期日期-起租日期)
-            BigDecimal leaseAmount = BigDecimal.valueOf(item.getQty())
-                    .multiply(item.getLeasePrice())
-                    .divide(BigDecimal.valueOf(30L), 2, BigDecimal.ROUND_HALF_UP)
-                    .multiply(BigDecimal.valueOf(leaseDay));
-
-            leaseAmount = leaseAmount.compareTo(BigDecimal.ZERO) <= 0 ? item.getLeasePrice().multiply(BigDecimal.valueOf(leaseDay)) : leaseAmount;
-
-            leaseAmount = leaseAmount.compareTo(BigDecimal.ZERO) <= 0 ? item.getLeasePrice() : leaseAmount;
-
-            item.setLeaseAmount(leaseAmount);
-            item.setLeaseDay(Math.toIntExact(leaseDay));
-        }
-    }
-
-
-    @Transactional
-    public void recover(String id, Date realEndDate) {
-        AdminUserCom adminUser = commonLogic.getAdminUser();
-        final LeaseOrder order = leaseOrderService.getById(id);
-        String curStatus = LeaseOrderStatusEnum.LEASE.getKey() + "|" + LeaseOrderStatusEnum.OVER.getKey();
-        if (!curStatus.contains(order.getStatus())) {
-            throw new RemoteServiceException("租赁订单非“租赁中”或“已到期,待回收”状态,确定回收失败");
-        }
-        leaseOrderService.lambdaUpdate()
-                .set(LeaseOrder::getRecoverBy, adminUser.getNickName())
-                .set(LeaseOrder::getRecoverTime, DateUtil.date())
-                .set(LeaseOrder::getRecoverMobile, adminUser.getLinkPhone())
-                .set(LeaseOrder::getStatus, LeaseOrderStatusEnum.RECOVER.getKey())
-                .eq(LeaseOrder::getId, id)
-                .update();
-        leaseOrderItemService.lambdaUpdate()
-                .set(LeaseOrderItem::getRealEndDate, realEndDate)
-                .eq(LeaseOrderItem::getLeaseOrderId, id)
-                .update();
-    }
-
-    @Transactional
-    public void renewal(String id, Date realEndDate) {
-        AdminUserCom adminUser = commonLogic.getAdminUser();
-        final LeaseOrder order = leaseOrderService.getById(id);
-        final LeaseOrderItem item = leaseOrderItemService.lambdaQuery()
-                .eq(LeaseOrderItem::getLeaseOrderId, id)
-                .last("limit 1")
-                .one();
-        String curStatus = LeaseOrderStatusEnum.LEASE.getKey() + "|" + LeaseOrderStatusEnum.OVER.getKey();
-        if (!curStatus.contains(order.getStatus())) {
-            throw new RemoteServiceException("租赁订单非“租赁中”或“已到期,待回收”状态,续期失败");
-        }
-
-        if (Objects.nonNull(item.getRealEndDate()) && item.getRealEndDate().after(DateUtil.date())) {
-            throw new RemoteServiceException("上次续租日期未到期,请到期后操作");
-        }
-
-        Date useEndDate = Objects.isNull(item.getRealEndDate()) ? item.getEndDate() : item.getRealEndDate();
-        if (realEndDate.getTime() <= useEndDate.getTime()) {
-            throw new RemoteServiceException("实际到期日期必须大于到期日期");
-        }
-        // 续租总租金=数量*续租单价/30天*(实际到期日期-到期日期)
-        long leaseDay = DateUtil.betweenDay(useEndDate, realEndDate, true);
-        BigDecimal totalAmount = BigDecimal.ZERO;
-        BigDecimal renewalLeaseAmount = BigDecimal.ZERO;
-
-        totalAmount = BigDecimal.valueOf(item.getQty())
-                .multiply(item.getRenewalPrice())
-                .divide(BigDecimal.valueOf(30L), 2, BigDecimal.ROUND_HALF_UP)
-                .multiply(BigDecimal.valueOf(leaseDay));
-
-        totalAmount = totalAmount.compareTo(BigDecimal.ZERO) <= 0 ? item.getRenewalPrice().multiply(BigDecimal.valueOf(leaseDay)) : totalAmount;
-
-        totalAmount = totalAmount.compareTo(BigDecimal.ZERO) <= 0 ? item.getRenewalPrice() : totalAmount;
-
-        renewalLeaseAmount = totalAmount;
-
-        totalAmount = totalAmount.add(order.getTotalAmount());
-        leaseOrderService.lambdaUpdate()
-                .set(LeaseOrder::getUpdateBy, adminUser.getNickName())
-                .set(LeaseOrder::getUpdateTime, DateUtil.date())
-                .set(order.getStatus().equals(LeaseOrderStatusEnum.OVER.getKey()), LeaseOrder::getStatus, LeaseOrderStatusEnum.LEASE.getKey())
-                .set(LeaseOrder::getTotalAmount, totalAmount)
-                .eq(LeaseOrder::getId, id)
-                .update();
-
-        leaseOrderItemService.lambdaUpdate()
-                .set(LeaseOrderItem::getRenewalLeaseAmount, renewalLeaseAmount)
-                .set(LeaseOrderItem::getRealEndDate, realEndDate)
-                .set(LeaseOrderItem::getLeaseDay, item.getLeaseDay() + leaseDay)
-                .eq(LeaseOrderItem::getId, item.getId())
-                .update();
-        final Integer count = leaseOrderPayRecordService.lambdaQuery()
-                .eq(LeaseOrderPayRecord::getLeaseOrderId, id)
-                .count();
-        LeaseOrderPayRecord record = new LeaseOrderPayRecord();
-        record.setLeaseOrderId(order.getId())
-                .setCompanyWechatId(order.getCompanyWechatId())
-                .setCompanyWechatName(order.getCompanyWechatName())
-                .setPayStatus(true)
-                .setOrderType("RENEWAL")
-                .setStartDate(DateUtil.offsetDay(useEndDate, 1))
-                .setEndDate(realEndDate)
-                .setSort(count)
-                .setRenewalPrice(item.getRenewalPrice())
-                .insert();
-    }
-
-    public BigDecimal computeAmount(Boolean isRenewal, Date startDate, Date endDate, BigDecimal qty, BigDecimal price) {
-        long leaseDay = DateUtil.betweenDay(startDate, endDate, true);
-        if (!isRenewal) {
-            leaseDay++;
-        }
-        BigDecimal amount = qty.multiply(price)
-                .divide(BigDecimal.valueOf(30L), 2, BigDecimal.ROUND_HALF_UP)
-                .multiply(BigDecimal.valueOf(leaseDay));
-
-        amount = amount.compareTo(BigDecimal.ZERO) <= 0 ? price.multiply(BigDecimal.valueOf(leaseDay)) : amount;
-
-        return amount.compareTo(BigDecimal.ZERO) <= 0 ? price : amount;
-    }
-}

+ 1 - 1
mall-server-api/src/main/java/com/gree/mall/manager/logic/order/OrderDeliveryLogic.java

@@ -225,7 +225,7 @@ public class OrderDeliveryLogic {
         orderInfo.setLogisticsNo(deliverGoodsBean.getLogisticsNo());
 
         if (isOver) {
-            orderInfo.setOrderStatus(OrderStatusEnum.YFH.toString());
+            orderInfo.setOrderStatus(OrderStatusEnum.OVER.toString());
         }
 
         if (detail != null) {

+ 124 - 58
mall-server-api/src/main/java/com/gree/mall/manager/logic/order/OrderLogic.java

@@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.date.DateUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.google.common.collect.Lists;
 import com.gree.mall.manager.bean.ExcelData;
@@ -141,16 +142,21 @@ public class OrderLogic {
     GoodsMaterialStorageService goodsMaterialStorageService;
     @Resource
     GoodsMaterialStockLogic goodsMaterialStockLogic;
+    @Resource
+    UserCompanyAttrService userCompanyAttrService;
+
+
+
     /**
      * 订单列表
      *
      * @return
      */
-    public IPage<OrderDetailBean> list(HttpServletRequest request, String userId, String orderId, String productName, String userName, String phone,
-                                       String exchangeCode, List<String> orderStatus, String startCreateTime, String endCreateTime, String startPayTime,
-                                       String endPayTime, String websitId,
-                                       Integer pageNum, Integer pageSize,
-                                       String isNegative,String abnormalDispatch,String workerOrderNo,String goodsId
+    public IPage<OrderDetailBean> list(HttpServletRequest request, String userId, String orderId, String productName,
+                                       String userName, String phone, List<String> orderStatus, String startCreateTime,
+                                       String endCreateTime, String startPayTime, String endPayTime, Integer pageNum,
+                                       Integer pageSize,
+                                       String isNegative, String abnormalDispatch, String workerOrderNo, String goodsId
     ) {
         AdminUserCom adminUser = commonLogic.getAdminUser(request);
 
@@ -170,14 +176,13 @@ public class OrderLogic {
 
         IPage page = orderInfoService.lambdaQuery()
                 .in(CollectionUtils.isNotEmpty(adminUser.getCompanyWechatIds()),OrderInfo::getCompanyWechatId,adminUser.getCompanyWechatIds())
-                ////.//in(CollectionUtils.isNotEmpty(adminUser.getAdminWebsitIds()),OrderInfo::getWebsitId,adminUser.getAdminWebsitIds())
+                .in(CollectionUtils.isNotEmpty(adminUser.getStorageIds()), OrderInfo::getPickStorageId, adminUser.getStorageIds())
                 .eq(StringUtils.isNotBlank(userId), OrderInfo::getUserId, userId)
                 .like(StringUtils.isNotBlank(orderId), OrderInfo::getOrderId, orderId)
                 .like(StringUtils.isNotBlank(productName), OrderInfo::getOrderTitle, productName)
-                .in(CollectionUtils.isNotEmpty(orderIds),OrderInfo::getOrderId,orderIds)
+                .in(CollectionUtils.isNotEmpty(orderIds),OrderInfo::getOrderId, orderIds)
                 .and(StringUtils.isNotBlank(userName), v -> v.like(OrderInfo::getUserName,userName).or().like(OrderInfo::getReceUserName,userName))
                 .and(StringUtils.isNotBlank(phone), v -> v.like(OrderInfo::getPhone, phone).or().like(OrderInfo::getRecePhone,phone))
-          //      .in(!(adminWebsitBean.getType() && org.apache.commons.lang3.StringUtils.isBlank(websitId)), OrderInfo::getWebsitNumber, websitNoList)
                 .in(CollectionUtils.isNotEmpty(orderStatus), OrderInfo::getOrderStatus, orderStatus)
                 .between(StringUtils.isNotBlank(startCreateTime) && StringUtils.isNotBlank(endCreateTime), OrderInfo::getCreateTime, startCreateTime, endCreateTime + " 23:59:59")
                 .between(StringUtils.isNotBlank(startPayTime) && StringUtils.isNotBlank(endPayTime), OrderInfo::getPayTime, startPayTime, endPayTime + " 23:59:59")
@@ -306,7 +311,7 @@ public class OrderLogic {
         //查询物流公司
         String company = expressLogic.expressCompanyName(companyCode);
         OrderInfo orderInfo = orderInfoService.getById(orderId);
-        if(!orderInfo.getOrderStatus().equals(OrderStatusEnum.YFH.toString())){
+        if(!orderInfo.getOrderStatus().equals(OrderStatusEnum.OVER.toString())){
             throw new RemoteServiceException("非已发货订单不可修改物流单号");
         }
         orderInfo.setCompanyCode(companyCode);
@@ -328,10 +333,10 @@ public class OrderLogic {
 
     }
 
-
     /**
      * 取消订单
      */
+    @Transactional
     public void cancel(String orderId) throws Exception {
         AdminUserCom adminUser = commonLogic.getAdminUser();
         OrderInfo orderInfo = orderInfoService.getById(orderId);
@@ -340,27 +345,52 @@ public class OrderLogic {
             throw new RemoteServiceException("订单当前状态不可取消");
         }
 
-        if(StringUtils.equals(orderInfo.getOrderStatus(),OrderStatusEnum.DFH.toString())) {
-            log.info("【退款开始:】退款金额{}", orderInfo.getPayAmount().doubleValue());
-            if(orderInfo.getPayTypeId().equals(PayTypeEnum.WECHAT.getKey())) {
-                orderShareLogic.reloadAmount(orderId, null, 1);
-            }
+        if ((orderInfo.getOrderStatus().equals(OrderStatusEnum.DJH.toString())
+                || orderInfo.getOrderStatus().equals(OrderStatusEnum.DFH.toString())
+                || orderInfo.getOrderStatus().equals(OrderStatusEnum.DPS.toString()))
+                && orderInfo.getExamineStatus().equals(ExamineStatusEnum.OK.getKey())) {
+            // 待拣货\待发货\待配送取消订单回退库存
+            final List<OrderDetail> orderDetailList = orderDetailService.lambdaQuery()
+                    .eq(OrderDetail::getOrderId, orderId)
+                    .list();
+            this.handleGoodsMaterialStock(orderInfo, orderDetailList, adminUser, DirectFlagEnum.ADD, "订单取消", "取消订单");
+
+            // TODO 授权支付退还额度逻辑
         }
 
-//        if (orderInfo.getSaleType().equals(SaleTypeEnum.OFFLINE.getValue())
-//                && orderInfo.getOrderStatus().equals(OrderStatusEnum.DQR.toString())
-//                && orderInfo.getExamineStatus().equals(ExamineStatusEnum.OK.getKey())) {
-//            // 线下销售订单并且待确认并且审核通过的回退库存
-//            final List<OrderDetail> orderDetailList = orderDetailService.lambdaQuery()
-//                    .eq(OrderDetail::getOrderId, orderId)
-//                    .list();
-//            this.handleGoodsMaterialStock(orderInfo, orderDetailList, adminUser);
-//        }
+        // 授权支付不需要确认退款
+        String changeOrderStatus = orderInfo.getPayType().equals(PayTypeEnum.CREDIT.getKey()) ? OrderStatusEnum.CLOSE.toString() : OrderStatusEnum.DTK.toString();
+        orderInfoService.lambdaUpdate()
+                .set(OrderInfo::getOrderStatus, changeOrderStatus)
+                .set(OrderInfo::getLastOrderStatus, orderInfo.getOrderStatus())
+                .set(OrderInfo::getCancelBy, adminUser.getNickName())
+                .set(OrderInfo::getCancelById, adminUser.getAdminUserId())
+                .set(OrderInfo::getCancelTime, DateUtil.date())
+                .eq(OrderInfo::getOrderId, orderId)
+                .update();
+    }
+
+    @Transactional
+    public void confirmRefund(String orderId) {
+        AdminUserCom adminUser = commonLogic.getAdminUser();
+        OrderInfo orderInfo = orderInfoService.getById(orderId);
+
+        if(!orderInfo.getOrderStatus().equals(OrderStatusEnum.DTK.toString())) {
+            throw new RemoteServiceException("订单当前状态非“待退款”");
+        }
 
-        this.updateOrderStatus(orderId, OrderStatusEnum.CLOSE.toString());
+        orderInfoService.lambdaUpdate()
+                .set(OrderInfo::getOrderStatus, OrderStatusEnum.CLOSE.toString())
+                .set(OrderInfo::getLastOrderStatus, orderInfo.getOrderStatus())
+                .set(OrderInfo::getRefundBy, adminUser.getNickName())
+                .set(OrderInfo::getRefundById, adminUser.getAdminUserId())
+                .set(OrderInfo::getRefundTime, DateUtil.date())
+                .eq(OrderInfo::getOrderId, orderId)
+                .update();
     }
 
-    private void handleGoodsMaterialStock(OrderInfo orderInfo, List<OrderDetail> orderDetailList, AdminUserCom adminUser, DirectFlagEnum flagEnum) throws Exception {
+    private void handleGoodsMaterialStock(OrderInfo orderInfo, List<OrderDetail> orderDetailList, AdminUserCom adminUser,
+                                          DirectFlagEnum flagEnum, String refBillType, String remark) throws Exception {
         List<GoodsMaterialStockDTO> dtoList = new ArrayList<>();
         for (OrderDetail orderDetail : orderDetailList) {
             GoodsMaterialStockDTO dto = new GoodsMaterialStockDTO();
@@ -382,11 +412,11 @@ public class OrderLogic {
                     .setSdate(orderInfo.getExamineTime())
                     .setChangeQty(orderDetail.getNum())
                     .setRefBillNo(orderInfo.getOrderId())
-                    .setRefBillType("线下销售单")
+                    .setRefBillType(refBillType)
                     .setStorageId(orderInfo.getPickStorageId())
                     .setStorageName(orderInfo.getPickStorageName())
                     .setGoodsMaterialId(orderDetail.getGoodsMaterialId())
-                    .setRemark("取消订单")
+                    .setRemark(remark)
                     .setOperateBy(adminUser.getAdminUserId());
             dtoList.add(dto);
         }
@@ -651,7 +681,8 @@ public class OrderLogic {
      * 发货
      */
     @Transactional
-    public void deliverGoods(String orderId, String logisticsNo, String companyCode, String storageId, Boolean workOrder, Boolean exchange,String pickName,String pickPhone ,String pickType) throws Exception {
+    public void deliverGoods(String orderId, String logisticsNo, String companyCode, String storageId, Boolean workOrder,
+                             Boolean exchange,String pickName,String pickPhone ,String pickType) throws Exception {
         //仓库
         Storage detail = storageLogic.detail(storageId);
         //快递公司
@@ -746,7 +777,8 @@ public class OrderLogic {
         }
         orderInfo.setLogisticsNo(deliverGoodsBean.getLogisticsNo());
 
-        orderInfo.setOrderStatus(OrderStatusEnum.YFH.toString());
+        orderInfo.setOrderStatus(OrderStatusEnum.OVER.toString());
+        orderInfo.setOverTime(DateUtil.date());
         if(detail != null) {
             orderInfo.setStorageName(detail.getStorageName());
             orderInfo.setStorageAddress(detail.getStorageAddress());
@@ -756,8 +788,6 @@ public class OrderLogic {
         orderInfo.setWorkOrder(deliverGoodsBean.getSend());
         orderInfo.updateById();
 
-        orderShareLogic.updateOrderStatus(orderId, OrderStatusEnum.YFH.toString());
-
         //对接工单
         this.orderToWorkorder(orderInfo);
 
@@ -881,39 +911,16 @@ public class OrderLogic {
         orderInfo.setExamineTime(DateUtil.date());
         orderInfo.setExamineStatus(ExamineStatusEnum.OK.getKey());
         orderInfo.setExamineBy(adminUser.getNickName());
-        orderInfo.setOrderStatus(OrderStatusEnum.DFH.toString());
+        orderInfo.setOrderStatus(OrderStatusEnum.DJH.toString());
         orderInfo.updateById();
 
         // 确认订单减少物料库存
         final List<OrderDetail> orderDetailList = orderDetailService.lambdaQuery()
                 .eq(OrderDetail::getOrderId, orderInfo.getOrderId())
                 .list();
-        this.handleGoodsMaterialStock(orderInfo, orderDetailList, adminUser, DirectFlagEnum.SUB);
-    }
-
-
-    /**
-     * 修改订单状态,修改结算的订单状态
-     */
-    public void updateOrderStatus(String orderId, String orderStatus) {
-        orderInfoService.lambdaUpdate()
-                .set(OrderInfo::getOrderStatus, orderStatus)
-                .eq(OrderInfo::getOrderId, orderId)
-                .update();
-
-//        orderShareLogic.updateOrderStatus(orderId, orderStatus);
-    }
-
-    /**
-     * 查询订单详情
-     */
-    public List<OrderDetail> queryOrderDetails(String orderId){
-        List<OrderDetail> list = orderDetailService.lambdaQuery().in(OrderDetail::getOrderId, orderId).list();
-        return list;
+        this.handleGoodsMaterialStock(orderInfo, orderDetailList, adminUser, DirectFlagEnum.SUB, "确认订单", "确认订单");
     }
 
-
-
     /**
      * 导出excel
      *
@@ -956,7 +963,7 @@ public class OrderLogic {
                 String orderStatusName = Enum.valueOf(OrderStatusEnum.class, orderDetailBean.getOrderStatus().trim().toUpperCase()).getName();
                 if (orderDetailBean.getOrderStatus().equals(OrderStatusEnum.REFUND.toString())) {
                     if (org.apache.commons.lang3.StringUtils.isNotBlank(orderDetailBean.getLogisticsNo())) {
-                        orderStatusName = OrderStatusEnum.YFH.getName();
+                        orderStatusName = OrderStatusEnum.OVER.getName();
                     } else {
                         orderStatusName = OrderStatusEnum.DFH.getName();
                     }
@@ -1396,4 +1403,63 @@ public class OrderLogic {
         }
         apply.updateById();
     }
+
+    /**
+     * 完成拣货
+     * @param orderId
+     */
+    @Transactional
+    public void completesPick(String orderId) {
+        final OrderInfo orderInfo = orderInfoService.getById(orderId);
+
+        orderInfoService.lambdaUpdate()
+                .set(OrderInfo::getOrderStatus, orderInfo.getTakeGoodsType().equals(TakeGoodsTypeEnum.Z.getKey()) ? OrderStatusEnum.DFH.toString() : OrderStatusEnum.DPS.toString())
+                .set(OrderInfo::getLastOrderStatus, orderInfo.getOrderStatus())
+                .eq(OrderInfo::getOrderId, orderId)
+                .update();
+    }
+
+    /**
+     * 开始配送
+     * @param orderId
+     */
+    @Transactional
+    public void startDelivery(String orderId) {
+        final OrderInfo orderInfo = orderInfoService.getById(orderId);
+
+        if (StringUtils.isBlank(orderInfo.getDeliveryUserId())) {
+            throw new RemoteServiceException("请先选择配送员");
+        }
+
+        orderInfoService.lambdaUpdate()
+                .set(OrderInfo::getOrderStatus, OrderStatusEnum.PSZ.toString())
+                .set(OrderInfo::getLastOrderStatus, orderInfo.getOrderStatus())
+                .set(OrderInfo::getDeliverTime, DateUtil.date())
+                .eq(OrderInfo::getOrderId, orderId)
+                .update();
+    }
+
+    public void addDelivery(String orderId, String userId) {
+        final OrderInfo orderInfo = orderInfoService.getById(orderId);
+
+        if (StringUtils.isBlank(orderInfo.getDeliveryUserId())) {
+            throw new RemoteServiceException("请先选择配送员");
+        }
+        AdminUserCom adminUser = commonLogic.getAdminUser();
+        final User user = userService.getById(userId);
+        final UserCompanyAttr userCompanyAttr = userCompanyAttrService.lambdaQuery()
+                .eq(UserCompanyAttr::getCompanyWechatId, adminUser.getAdminCompanyWechat().getCompanyWechatId())
+                .eq(UserCompanyAttr::getUserId, user.getUserId())
+                .one();
+
+        if (!userCompanyAttr.getIsDelivery()) {
+            throw new RemoteServiceException("非“配送员”,请检查");
+        }
+
+        orderInfoService.lambdaUpdate()
+                .set(OrderInfo::getDeliveryUserId, user.getUserId())
+                .set(OrderInfo::getDeliveryUserName, user.getNickName())
+                .eq(OrderInfo::getOrderId, orderId)
+                .update();
+    }
 }

+ 22 - 31
mall-server-api/src/main/java/com/gree/mall/manager/logic/order/OrderOfflineLogic.java

@@ -17,6 +17,7 @@ import com.gree.mall.manager.commonmapper.CommonMapper;
 import com.gree.mall.manager.enums.ExamineStatusEnum;
 import com.gree.mall.manager.enums.IsYesNoEnum;
 import com.gree.mall.manager.enums.OrderStatusEnum;
+import com.gree.mall.manager.enums.TakeGoodsTypeEnum;
 import com.gree.mall.manager.enums.material.DirectFlagEnum;
 import com.gree.mall.manager.enums.material.GoodsMaterialTypeEnum;
 import com.gree.mall.manager.enums.material.PayTypeEnum;
@@ -61,8 +62,6 @@ public class OrderOfflineLogic {
     private final GoodsCategoryService goodsCategoryService;
     private final GoodsService goodsService;
     private final GoodsSpecService goodsSpecService;
-    private final OrderOldProductService orderOldProductService;
-    private final OrderOldProductItemService orderOldProductItemService;
     private final GoodsMaterialStorageService goodsMaterialStorageService;
     private final GoodsMaterialStockLogic goodsMaterialStockLogic;
 
@@ -102,6 +101,9 @@ public class OrderOfflineLogic {
                 throw new RemoteServiceException("订单已超时取消,请重新下单");
             }
         }
+        if (StringUtils.isBlank(orderInfoAddBean.getPickStorageId())) {
+            throw new RemoteServiceException("请选择出货仓库");
+        }
         if (orderInfo == null) {
             orderInfo = new OrderInfo();
         }
@@ -114,6 +116,8 @@ public class OrderOfflineLogic {
 
         Integer totalNum = 0;
         BigDecimal totalPrice = BigDecimal.ZERO;
+        //运费总额
+        BigDecimal totalFreight = BigDecimal.valueOf(0);
         StringBuilder orderTitle = new StringBuilder();
         List<OrderDetail> orderDetails = orderInfoAddBean.getOrderDetails();
         if (CollectionUtils.isEmpty(orderDetails)) {
@@ -174,7 +178,18 @@ public class OrderOfflineLogic {
                 orderDetail.setIsVr(goods.getIsVr());
                 orderDetail.setGoodsCategoryId(goods.getCategoryId());
                 orderDetail.setGoodsCategoryName(goodsCategory.getName());
+                BigDecimal freightAmountItem = orderInfo.getTakeGoodsType().equals(TakeGoodsTypeEnum.Z.getKey()) ? BigDecimal.valueOf(0) : goodsSpec.getFirstFee();
+                // 邮寄方式计算次件运费金额
+                if (orderInfo.getTakeGoodsType().equals(TakeGoodsTypeEnum.Y.getKey()) && orderDetail.getNum() > 1) {
+                    int surplusNum = orderDetail.getNum() - 1;
+                    BigDecimal continueAmountItem = new BigDecimal(surplusNum).multiply(goodsSpec.getContinueFee());
+                    freightAmountItem = freightAmountItem.add(continueAmountItem);
+                }
+                orderDetail.setFreight(freightAmountItem);
+                totalFreight = totalFreight.add(orderDetail.getFreight());
             }
+
+
             orderDetail.setTotalPrice(orderDetail.getPrice().multiply(BigDecimal.valueOf(orderDetail.getNum())));
             orderDetail.setPayAmount(orderDetail.getTotalPrice());
             orderDetail.setOrderSmallType(orderInfoAddBean.getOrderSmallType());
@@ -186,7 +201,8 @@ public class OrderOfflineLogic {
         orderInfo.setTotalNum(totalNum);
         orderInfo.setTotalAmount(totalPrice);
         orderInfo.setTotalProductAmount(totalPrice);
-        orderInfo.setPayAmount(totalPrice);
+        orderInfo.setFreight(totalFreight);
+        orderInfo.setPayAmount(totalPrice.add(totalFreight));
         orderInfo.setCompanyWechatId(adminUser.getCompanyWechatId());
         orderInfo.setCompanyWechatName(adminUser.getCompanyName());
         orderInfo.setPayTypeId(orderInfoAddBean.getPayType().getKey());
@@ -194,8 +210,11 @@ public class OrderOfflineLogic {
         orderInfo.setSaleType(2);
         orderInfo.setPhone(orderInfo.getRecePhone());
         orderInfo.setUserName(orderInfo.getReceUserName());
+        orderInfo.setTakeGoodsType(orderInfoAddBean.getTakeGoodsType());
         orderInfo.setAppointmentPickStartTime(DateUtil.parseDateTime(orderInfoAddBean.getPickStartTime()));
         orderInfo.setAppointmentPickEndTime(DateUtil.parseDateTime(orderInfoAddBean.getPickEndTime()));
+        orderInfo.setPickStorageId(orderInfoAddBean.getPickStorageId());
+        orderInfo.setPickStorageName(orderInfoAddBean.getPickStorageName());
         if (StringUtils.isNotBlank(orderTitle.toString())) {
             orderInfo.setOrderTitle(orderTitle.substring(0, orderTitle.length() - 1));
         }
@@ -207,21 +226,10 @@ public class OrderOfflineLogic {
         orderDetailService.lambdaUpdate().eq(OrderDetail::getOrderId, orderInfo.getOrderId()).remove();
         orderDetailService.saveBatch(orderDetails);
 
-//        List<OrderDetail> orderDetailList = orderDetailService.lambdaQuery().eq(OrderDetail::getOrderId, orderInfo.getOrderId()).list();
-//
-//        for (OrderDetail orderDetail : orderDetailList) {
-//            if (!StringUtil.isEmpty(orderDetail.getGoodsSpecId())) {
-//                GoodsSpec goodsSpec = goodsSpecService.getById(orderDetail.getGoodsSpecId());
-//                orderDetail.setGoodsMaterialId(goodsSpec.getGoodsCode());
-//                orderDetail.updateById();
-//            }
-//        }
-
 
         return orderInfo.getOrderId();
     }
 
-
     private OrderDetail supplyOrderDetail(String orderId, GoodsMaterial gm, OrderDetail orderDetail) {
         if (!StringUtils.equals(gm.getState(), StateEnum.ON.getKey())) {
             throw new RemoteServiceException("物料【" + gm.getGoodsName() + "】状态无效");
@@ -262,7 +270,6 @@ public class OrderOfflineLogic {
         return orderDetail;
     }
 
-
     /**
      * 详情
      *
@@ -308,22 +315,6 @@ public class OrderOfflineLogic {
         orderInfoDetailBean.setPayType(orderInfo.getPayTypeId());
         orderInfoDetailBean.setOrderDetails(orderDetails);
 
-        List<OrderOldProduct> list = orderOldProductService.lambdaQuery()
-                .eq(OrderOldProduct::getOrderId, orderId).list();
-
-        List<OrderOldProductDTO> orderOldProductDTOS = new ArrayList<>();
-
-        for (OrderOldProduct orderOldProduct : list) {
-            OrderOldProductDTO orderOldProductDTO = BeanUtil.toBean(orderOldProduct, OrderOldProductDTO.class);
-            List<OrderOldProductItem> orderOldProductItemList = orderOldProductItemService.lambdaQuery().eq(OrderOldProductItem::getOrderOldProductId, orderOldProduct.getId()).list();
-            orderOldProductDTO.setItemList(orderOldProductItemList);
-
-            orderOldProductDTOS.add(orderOldProductDTO);
-        }
-
-        orderInfoDetailBean.setOrderOldProductDTOList(orderOldProductDTOS);
-
-
         return orderInfoDetailBean;
     }
 

+ 34 - 34
mall-server-api/src/main/java/com/gree/mall/manager/schedule/OverOrderSchedule.java

@@ -37,18 +37,18 @@ import java.util.stream.Collectors;
 public class OverOrderSchedule {
 
 
-    @Autowired
-    OrderInfoService orderInfoService;
-    @Autowired
-    private OrderShareLogic orderShareLogic;
-    @Autowired
-    OrderShareService orderShareService;
-    @Autowired
-    OrderRefundService orderRefundService;
-    @Autowired
-    OrderLogic orderLogic;
-    @Autowired
-    PgIncreOrderService pgIncreOrderService;
+//    @Autowired
+//    OrderInfoService orderInfoService;
+//    @Autowired
+//    private OrderShareLogic orderShareLogic;
+//    @Autowired
+//    OrderShareService orderShareService;
+//    @Autowired
+//    OrderRefundService orderRefundService;
+//    @Autowired
+//    OrderLogic orderLogic;
+//    @Autowired
+//    PgIncreOrderService pgIncreOrderService;
 
 //
 
@@ -56,23 +56,23 @@ public class OverOrderSchedule {
      * 自动签收商城订单
      * @throws Exception
      */
-    @Transactional
-    @Scheduled(fixedDelay = 5 * 60 * 1000)
-    public void task() throws Exception {
-        Date timeByDay = DateUtils.getTimeByDay(new Date(), -7);
-
-        List<OrderInfo> list = orderInfoService.lambdaQuery()
-                .eq(OrderInfo::getOrderStatus, OrderStatusEnum.YFH.toString())
-                .lt(OrderInfo::getDeliverTime, timeByDay).list();
-        if (list.size() == 0) {
-            return;
-        }
-        List<String> orderIds = list.stream().map(OrderInfo::getOrderId).collect(Collectors.toList());
-        //1.将订单已完成
-        orderInfoService.lambdaUpdate()
-                .set(OrderInfo::getOverTime, new Date())
-                .set(OrderInfo::getOrderStatus, OrderStatusEnum.OVER.toString())
-                .in(OrderInfo::getOrderId, orderIds).update();
+//    @Transactional
+//    @Scheduled(fixedDelay = 5 * 60 * 1000)
+//    public void task() throws Exception {
+//        Date timeByDay = DateUtils.getTimeByDay(new Date(), -7);
+//
+//        List<OrderInfo> list = orderInfoService.lambdaQuery()
+//                .eq(OrderInfo::getOrderStatus, OrderStatusEnum.YFH.toString())
+//                .lt(OrderInfo::getDeliverTime, timeByDay).list();
+//        if (list.size() == 0) {
+//            return;
+//        }
+//        List<String> orderIds = list.stream().map(OrderInfo::getOrderId).collect(Collectors.toList());
+//        //1.将订单已完成
+//        orderInfoService.lambdaUpdate()
+//                .set(OrderInfo::getOverTime, new Date())
+//                .set(OrderInfo::getOrderStatus, OrderStatusEnum.OVER.toString())
+//                .in(OrderInfo::getOrderId, orderIds).update();
 
         //2.将订单推送到工单 (统一修改为发货那生成)
 //        for(OrderInfo orderInfo:list) {
@@ -80,11 +80,11 @@ public class OverOrderSchedule {
 //        }
 
         //3.将结算数据记录订单完成时间
-        orderShareService.lambdaUpdate()
-                .set(OrderShare::getOrderStatus,OrderStatusEnum.OVER.toString())
-                .set(OrderShare::getOrderFinishTime,new Date())
-                .in(OrderShare::getOrderId,orderIds).update();
-    }
+//        orderShareService.lambdaUpdate()
+//                .set(OrderShare::getOrderStatus,OrderStatusEnum.OVER.toString())
+//                .set(OrderShare::getOrderFinishTime,new Date())
+//                .in(OrderShare::getOrderId,orderIds).update();
+//    }
 
 
 }