diff --git a/mallinkAdmin/src/main/resources/db/migration/V2023070100001_merchant_permission.sql b/mallinkAdmin/src/main/resources/db/migration/V2023070100001_merchant_permission.sql new file mode 100644 index 000000000..ffbc913ba --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V2023070100001_merchant_permission.sql @@ -0,0 +1,4 @@ +INSERT INTO `mallink`.`mall_permission`(`id`, `name`, `parent_id`, `available`, `permission`, `resource_type`, `module_color`, `module_color_num`, `url`, `icon`, `version_type`, `sort`) VALUES (226, '区域商户管理', 202, 'Y', NULL, 1, NULL, NULL, 'regionMerchantList', NULL, 0, 222); + + +UPDATE `mallink`.`mall_sale_type` SET `menus` = '[1, 2, 4, 5, 6, 50, 105, 110, 201, 205, 202, 210, 211, 212, 221, 222, 223, 224, 226, 251, 261, 409, 410, 411, 416, 502, 504, 505, 506, 507, 511, 512, 521, 522, 523, 591, 592, 595, 601, 602, 605, 606, 610, 612, 615, 622, 676, 680, 711, 716, 901, 902, 904, 907, 5502, 60201, 61202, 61501, 61502]' WHERE `id` = 13; diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxCouponOrderController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxCouponOrderController.java index 131fe8d1e..9a1c21f43 100644 --- a/mallinkBApi/src/main/java/com/iformall/controller/WxCouponOrderController.java +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxCouponOrderController.java @@ -391,7 +391,7 @@ public class WxCouponOrderController extends BaseController { WxCouponOrder couponOrder = null; try { wxCouponOrder.setVerifyRemark(verifyRemark); - couponOrder = wxCouponOrderService.verify(wxCouponOrder, wxMerchantBUser, EnumCouponVerifyType.VERIFY_B); + couponOrder = wxCouponOrderService.verify(wxCouponOrder, null, EnumCouponVerifyType.VERIFY_B,wxMerchantBUser); } catch (MallinkException e) { logger.error("核销异常: " + e.getMessage()); return new ResultData(e.getErrorCode(), e.getMessage()); diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCouponOrderController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCouponOrderController.java index d4c8845ce..64533daa7 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCouponOrderController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCouponOrderController.java @@ -557,7 +557,7 @@ public class WxCouponOrderController extends BaseController { } WxCouponOrder couponOrder = null; try { - couponOrder = wxCouponOrderService.verify(wxCouponOrder,null,EnumCouponVerifyType.VERIFY_C); + couponOrder = wxCouponOrderService.verify(wxCouponOrder,null,EnumCouponVerifyType.VERIFY_C,null); } catch (MallinkException e) { logger.error("核销异常: " + e.getMessage()); return new ResultData(e.getErrorCode(), e.getMessage()); diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/CouponOrderExpiringSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/CouponOrderExpiringSchedule.java index e0a549726..3afcef59d 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/CouponOrderExpiringSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/CouponOrderExpiringSchedule.java @@ -117,7 +117,7 @@ public class CouponOrderExpiringSchedule { @Scheduled(cron = "0 0 5 * * ?") // 每天凌晨00:05 // @Scheduled(cron = "*/10 * * * * ?") // 测试10秒中一次 - public void couponOrderGoodsVerifySchedule() {//14天确认收获 系统自动核销 + public void couponOrderGoodsVerifySchedule() {//14天确认收货 系统自动核销 List malls = getMalls(); for (WxMall mall: malls) { @@ -126,7 +126,7 @@ public class CouponOrderExpiringSchedule { list.stream().forEach(co -> { WxCouponOrder couponOrder = null; try { - couponOrder = wxCouponOrderService.verify(co,null,EnumCouponVerifyType.VERIFY_C_AUTO); + couponOrder = wxCouponOrderService.verify(co,null,EnumCouponVerifyType.VERIFY_C_AUTO,null); } catch (MallinkException e) { logger.error("核销异常: " + e.getMessage()); } catch (Exception e) { diff --git a/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java b/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java index 97e01fc9d..34442c09f 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java @@ -58,7 +58,7 @@ public interface WxCouponOrderService { * @param couponOrder * @param bUser 核销人(登录用户) */ - WxCouponOrder verify(WxCouponOrder couponOrder, WxMerchantBUser bUser, EnumCouponVerifyType couponVerifyType); + WxCouponOrder verify(WxCouponOrder couponOrder, WxMerchant merchant, EnumCouponVerifyType couponVerifyType, WxMerchantBUser bUser); WxCouponOrder verifyByEquiment(Long couponOrderId,String tenantId,String parentTenantId,String remark); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderReservationServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderReservationServiceImpl.java index 1b619d298..dba9d3e83 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderReservationServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderReservationServiceImpl.java @@ -114,8 +114,6 @@ public class WxCouponOrderReservationServiceImpl implements WxCouponOrderReserva if(bUser == null){ return new ResultData(ErrorCode.USER_IS_EMPTY); } - record.setBtenantId(bUser.getTenantId()); - record.setMerchantId(bUser.getMerchantId()); record.setBuserName(bUser.getName()); record.setBuserPhone(bUser.getPhone()); } @@ -158,9 +156,7 @@ public class WxCouponOrderReservationServiceImpl implements WxCouponOrderReserva @Override public void finishReservation(WxCouponOrder couponOrder) { - if(!EnumCouponOrderStatus.COUPON_ORDER_USED.getCode().equals(couponOrder.getCouponOrderStatus())){ - return; - } + Long id = wxCouponOrderReservationMapper.getIdByCouponOrder(couponOrder.getId(), couponOrder.getTenantId()); if(id == null){ return; @@ -169,10 +165,9 @@ public class WxCouponOrderReservationServiceImpl implements WxCouponOrderReserva updReservation.setId(id); updReservation.updateTenantInfo(couponOrder); updReservation.setStatus(EnumCouponOrderReservationStatus.reservation_finish.getCode()); - if(couponOrder.getBUserId() != null && couponOrder.getBMerchantId() != 0){ - updReservation.setBtenantId(couponOrder.getBTenantId()); - updReservation.setBuserId(couponOrder.getBUserId()); - } + updReservation.setBtenantId(couponOrder.getBTenantId()); + updReservation.setMerchantId(couponOrder.getMerchantId()); + updReservation.setBuserId(couponOrder.getBUserId()); updReservation.setFinishTime(couponOrder.getUpdateDate()); this.saveOrUpdate(updReservation); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java index 5b82a28f7..39cc4b541 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java @@ -1383,14 +1383,18 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { List bolist = handleQueryResult(cUserEntry,list,wxCouponOrder); excelService.exportCsv(bolist, null, filename, WxCouponOrderBVo.class, filename + ".csv", response, false); } - - @Override + + @Override @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) - public WxCouponOrder verify(WxCouponOrder couponOrder, WxMerchantBUser bUser, EnumCouponVerifyType couponVerifyType) { + public WxCouponOrder verify(WxCouponOrder couponOrder, WxMerchant merchant, EnumCouponVerifyType couponVerifyType, WxMerchantBUser bUser) { if(EnumCouponVerifyType.VERIFY_B.equals(couponVerifyType) && bUser == null){ - logger.error("B端核销未传入门店"); + logger.error("B端核销未传入核销人"); throw new MallinkException(ErrorCode.VERIFY_ERROR); } +// if(EnumCouponVerifyType.VERIFY_C.equals(couponVerifyType) && cUser == null){ +// logger.error("C端核销未传入核销人"); +// throw new MallinkException(ErrorCode.VERIFY_ERROR); +// } // 1. 获取券信息 WxCoupon wxCoupon = wxCouponMapper.selectById(couponOrder.getCouponId(),couponOrder.getTenantId()); @@ -1408,66 +1412,53 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { throw new MallinkException(ErrorCode.COUPON_ORDER_IS_INVALID); } if (couponOrder.getCouponOrderStatus() == EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()) { - logger.error("已经核销过的券: couponOrder-" + couponOrder.getId()); + logger.error("已核销: couponOrder-" + couponOrder.getId()); throw new MallinkException(ErrorCode.COUPON_ORDER_IS_USED); } if (couponOrder.getCouponOrderStatus() == EnumCouponOrderStatus.POS_PRE_VERIFY.getCode()) { - logger.error("券已被预核销: couponOrder-" + couponOrder.getId()); + logger.error("已预核销: couponOrder-" + couponOrder.getId()); throw new MallinkException(ErrorCode.COUPON_ORDER_IS_PRE_VERIFY); } - //核销tenant + //核销tenant和核销商户 TenantEntity mallTenantEntity = new TenantEntity(); - if(bUser != null){ - mallTenantEntity.updateTenantInfo(bUser); - }else{ + Long merchantId = null; + if(EnumCouponVerifyType.VERIFY_B.equals(couponVerifyType)){ + if(merchant != null){ + mallTenantEntity.updateTenantInfo(merchant); + merchantId = merchant.getId(); + }else{ + mallTenantEntity.updateTenantInfo(bUser); + merchantId = bUser.getMerchantId(); + } + }else{ mallTenantEntity.updateTenantInfo(wxCoupon); } - - // 2. 检查适用门店 - Long merchantId = null; - if(EnumCouponType.COUPON_DISTRIBUTION.getCode().equals(wxCoupon.getType())){ - //可配送商品 - WxCouponMerchant wxCouponMerchant = new WxCouponMerchant(); - wxCouponMerchant.updateTenantInfo(mallTenantEntity); - wxCouponMerchant.setProductId(wxCoupon.getId()); - wxCouponMerchant.setStatus(EnumCouponMerchantStatus.COUPON_MERCHANT_STATUS_VALID.getCode()); - WxCouponMerchant cm = null; - try{ - cm = wxCouponMerchantMapper.selectOne(new QueryWrapper<>(wxCouponMerchant)); - }catch (Exception e){ - throw new MallinkException(ErrorCode.VERIFY_COUPON_ORDER_MERCHANT_IS_NULL); - } - if(cm == null){ - throw new MallinkException(ErrorCode.VERIFY_COUPON_ORDER_MERCHANT_IS_NULL); - } - if(EnumCouponVerifyType.VERIFY_B.equals(couponVerifyType) && !verifyMerchant(bUser,cm.getMerchantId())){ - throw new MallinkException(ErrorCode.VERIFY_COUPON_ORDER_MERCHANT_IS_NULL); - } - merchantId = cm.getMerchantId(); - }else if(EnumCouponType.COUPON_GIFT.getCode().equals(wxCoupon.getType())){ - if (StringUtils.isBlank(wxCoupon.getGiftList())){ - logger.error("券包: coupon-" + wxCoupon.getId() + "数据异常" + "couponOrder-" + couponOrder.getId()); - throw new MallinkException(ErrorCode.COUPON_ORDER_DATE_ERROR); - } -// if(!EnumCouponVerifyType.VERIFY_AUTO.equals(couponVerifyType)){ -// throw new MallinkException(ErrorCode.VERIFY_COUPON_TYPE_NOT_SUPPORT); -// } - }else{ - if(!EnumCouponVerifyType.VERIFY_B.equals(couponVerifyType)){ - throw new MallinkException(ErrorCode.VERIFY_COUPON_TYPE_NOT_SUPPORT); - } - WxCouponMerchant wxCouponMerchant = new WxCouponMerchant(); - wxCouponMerchant.updateTenantInfo(mallTenantEntity); - wxCouponMerchant.setProductId(wxCoupon.getId()); - wxCouponMerchant.setStatus(EnumCouponMerchantStatus.COUPON_MERCHANT_STATUS_VALID.getCode()); - List couponMerchantList = wxCouponMerchantMapper.findList(wxCouponMerchant); - if (!couponMerchantList.stream().anyMatch(cm -> verifyMerchant(bUser,cm.getMerchantId()))) { - logger.error("券: coupon-" + wxCoupon.getId() + "核销: couponMerchantId-" + bUser.getMerchantId()); - throw new MallinkException(ErrorCode.VERIFY_COUPON_ORDER_MERCHANT_IS_NULL); - } - merchantId = bUser.getMerchantId(); - } + // 检查适用门店 + if(EnumCouponType.COUPON_GIFT.getCode().equals(wxCoupon.getType())){ + if (StringUtils.isBlank(wxCoupon.getGiftList())){ + logger.error("券包: coupon-" + wxCoupon.getId() + "数据异常" + "couponOrder-" + couponOrder.getId()); + throw new MallinkException(ErrorCode.COUPON_ORDER_DATE_ERROR); + } + }else { + List couponMerchantIds = wxCouponMerchantMapper.findMerchantIdListByProduct(wxCoupon.getId(), mallTenantEntity.getTenantId()); + if(EnumCouponType.COUPON_DISTRIBUTION.getCode().equals(wxCoupon.getType())){ + if(couponMerchantIds.size() != 1){ + throw new MallinkException(ErrorCode.VERIFY_COUPON_ORDER_MERCHANT_IS_NULL); + } + if(merchantId != null && !merchantId.equals(couponMerchantIds.get(0))){ + throw new MallinkException(ErrorCode.VERIFY_COUPON_ORDER_MERCHANT_IS_NULL); + } + merchantId = couponMerchantIds.get(0); + }else{ + if(!EnumCouponVerifyType.VERIFY_B.equals(couponVerifyType)){ + throw new MallinkException(ErrorCode.VERIFY_COUPON_TYPE_NOT_SUPPORT); + } + if(!couponMerchantIds.contains(merchantId)){ + throw new MallinkException(ErrorCode.VERIFY_COUPON_ORDER_MERCHANT_IS_NULL); + } + } + } if(merchantId != null){ WxPayOrder wxPayOrderQ = new WxPayOrder(); @@ -1483,12 +1474,6 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { throw new MallinkException(ErrorCode.VERIFY_COUPON_ORDER_MERCHANT_IS_NULL.getCode(),"当前商户没有配置分账账号。"); } } -// else if(wxPayOrder != null && EnumPayMchType.DIRECT.getCode().equals(wxPayOrder.getMchType())){ -// merchantId = wxPayOrder.getChildOrderShare(couponOrder.getOrderId()).getMerchantId(); -// if (null == merchantId) { -// throw new MallinkException(ErrorCode.VERIFY_COUPON_ORDER_MERCHANT_IS_NULL.getCode(),"订单支付信息未包含商户"); -// } -// } } int num = 0; @@ -1521,10 +1506,12 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { logger.error("核销异常:updatete num " + num); throw new MallinkException(ErrorCode.VERIFY_ERROR.getCode(), "updatete num " + num); } + + //发券包子券 if(EnumCouponType.COUPON_GIFT.getCode().equals(wxCoupon.getType())){ try { List longs = JSON.parseArray(wxCoupon.getGiftList(), Long.class); - //发券包子券 + wxOrderService.sendSubCouponToUser(couponOrder,longs); } catch (MallinkException e) { throw e; @@ -1533,7 +1520,17 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { } } + if(EnumCouponType.COUPON_DOUYIN_GO_HOME.getCode().equals(wxCoupon.getType())){ + //完成预约 + try{ + wxCouponOrderReservationService.finishReservation(couponOrder); + }catch(Exception e){ + throw new MallinkException(ErrorCode.VERIFY_ERROR.getCode(), "完成预约失败"); + } + } + doAfterVerify(couponOrder, bUser, wxCoupon); + return couponOrder; } @@ -1599,7 +1596,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { WxCouponOrder couponOrder = null; try { wxCouponOrder.setVerifyRemark(remark); - couponOrder = this.verify(wxCouponOrder, wxMerchantBUser, EnumCouponVerifyType.VERIFY_B); + couponOrder = this.verify(wxCouponOrder, null, EnumCouponVerifyType.VERIFY_B,wxMerchantBUser); } catch (MallinkException e) { logger.error("核销异常: " ,e); throw new MallinkException(e.getErrorCode(), e.getMessage()); @@ -1768,13 +1765,6 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { @Override public void actionAfterVerify(WxCouponOrder couponOrder, WxMerchant merchant) { - //完成预约 - try{ - wxCouponOrderReservationService.finishReservation(couponOrder); - }catch(Exception e){ - logger.error("完成预约失败"+e.getMessage(),e); - } - try { boolean mulityShare = true; if(EnumComposeOrder.isSingle(couponOrder.getComposeOrderType())){ diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java index 5985f6379..308b9a59b 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java @@ -2245,7 +2245,7 @@ public class WxOrderServiceImpl implements WxOrderService { if (null != couponorderlist && couponorderlist.size() > 0 ) { WxCouponOrder couponOrder = couponorderlist.get(0); try { - wxCouponOrderService.verify(couponOrder,null,EnumCouponVerifyType.VERIFY_AUTO); + wxCouponOrderService.verify(couponOrder,null,EnumCouponVerifyType.VERIFY_AUTO,null); } catch (Exception e) { logger.error("系统券包核销异常:" + e.getMessage(),e); }