diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxPressBatchController.java b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxPressBatchController.java index cc84f3ccc..2a5331cab 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxPressBatchController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxPressBatchController.java @@ -9,14 +9,20 @@ import com.iformall.controller.base.BaseController; import com.iformall.domain.po.AliBusinessCircleOrder; import com.iformall.domain.po.WxBusinessCircleOrder; import com.iformall.domain.po.WxCoupon; +import com.iformall.domain.po.WxCouponChannel; import com.iformall.domain.po.WxPressBatch; import com.iformall.domain.po.WxPressBatchItem; import com.iformall.domain.po.base.BaseEntity; import com.iformall.domain.po.base.TenantEntity; +import com.iformall.enums.EnumCouponChannelStatus; +import com.iformall.enums.EnumCouponChannelType; import com.iformall.enums.EnumCouponContentType; import com.iformall.enums.EnumCouponSourceType; +import com.iformall.enums.EnumCouponType; import com.iformall.enums.EnumRentContractAppStatus; import com.iformall.service.AliBusinessCircleOrderService; +import com.iformall.service.WxCouponChannelService; +import com.iformall.service.WxCouponService; import com.iformall.service.WxPressBatchService; import com.iformall.utils.Constant; import io.swagger.annotations.Api; @@ -36,6 +42,8 @@ import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; + +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -46,7 +54,13 @@ public class WxPressBatchController extends BaseController { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired - private WxPressBatchService wxPressBatchService; + WxPressBatchService wxPressBatchService; + + @Autowired + WxCouponService wxCouponService; + + @Autowired + WxCouponChannelService wxCouponChannelService; @ApiOperation("分页列表接口") @GetMapping("list") @@ -84,16 +98,41 @@ public class WxPressBatchController extends BaseController { return new ResultData(order); } - @ApiOperation("详情接口") + @ApiOperation("砍价券接口") @GetMapping("itemList") @ApiImplicitParams({ - @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true)}) - public ResultData itemList(Long id) { + @ApiImplicitParam(name = "id", value = "id", dataType = "Long", paramType = "query", required = true), + @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), + @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) + public ResultData itemList(Long id, Integer pageNum, Integer pageSize) { if (null == id) { return new ResultData(Result.ERROR,"参数错误"); } - List list = wxPressBatchService.getItemList(id, getTenantInfo().getTenantId()); - return new ResultData(list); + TenantEntity tenantEntity = getTenantInfo(); + PageInfo itemPage = wxPressBatchService.getItemPage(id, tenantEntity.getTenantId(),pageNum,pageSize); + List items = itemPage.getList(); + if (null != items && items.size() > 0 ) { + List couponIdList = wxPressBatchService.getItemCouponIdList(id, tenantEntity.getTenantId()); + WxCoupon record = new WxCoupon(); + record.updateTenantInfo(getTenantInfo()); + if (null != couponIdList && couponIdList.size() > 0 ) { + record.setIds(couponIdList); + }else { + record.setId(0L); + } + List list = wxCouponService.list(record); + Map couponMap = new HashMap(); + if (null != list && list.size() > 0 ) { + for (WxCoupon c : list) { + couponMap.put(c.getId(), c); + } + } + for (WxPressBatchItem pbi : items) { + WxCoupon coupon = couponMap.get(pbi.getCouponId()); + pbi.setCoupon(coupon); + } + } + return new ResultData(itemPage); } @ApiOperation("删除接口") @@ -105,6 +144,31 @@ public class WxPressBatchController extends BaseController { wxPressBatchService.deleteBatch(record.getId(), getTenantInfo().getTenantId()); return new ResultData(); } + + @ApiOperation("已投放砍价券列表接口") + @GetMapping("couponList") + @ApiImplicitParams({ + @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), + @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true),}) + public ResultData couponList(@ModelAttribute WxCoupon record, Integer pageNum, Integer pageSize) { + WxCouponChannel couponChannelQ = new WxCouponChannel(); + couponChannelQ.updateTenantInfo(getTenantInfo()); + couponChannelQ.setType(EnumCouponType.COUPON_PRESS.getCode()); + couponChannelQ.setTargetAd(EnumCouponChannelType.COUPON_CHANNEL_ID_PRESS.getCode()); + couponChannelQ.setStatus(EnumCouponChannelStatus.STATUS_THROW_IN.getCode()); + List couponIds = wxCouponChannelService.findCouponIdList(couponChannelQ); + if (null == record) { + record = new WxCoupon(); + } + record.updateTenantInfo(couponChannelQ); + if (null != couponIds && couponIds.size() > 0 ) { + record.setIds(couponIds); + }else { + record.setId(0L); + } + PageInfo page = wxCouponService.simplelistAsPage(record, pageNum, pageSize); + return new ResultData(page); + } @ApiOperation("新增items") @@ -120,8 +184,58 @@ public class WxPressBatchController extends BaseController { return new ResultData(Result.ERROR,"参数错误"); } String[] cids = cidstr.split(","); - WxPressBatch order = wxPressBatchService.getById(record.getId(), tenantEntity.getTenantId()); - wxPressBatchService.saveItems(order, cids); + if (null == cids || cids.length <= 0 ) { + return new ResultData(Result.ERROR,"请选择砍价券"); + } + List rcids = new ArrayList(); + for (String cid: cids) { + rcids.add(Long.parseLong(cid)); + } + //已经存在了的不能再加入 + List arrayCouponIds = wxPressBatchService.getCouponIds(tenantEntity.getTenantId()); + if (null != arrayCouponIds && arrayCouponIds.size() > 0 ) { + if (arrayCouponIds.containsAll(rcids)) { + return new ResultData(Result.ERROR,"所选择的券已经加入了一个批次,不能再加"); + } + List extraCouponIds = new ArrayList(); + extraCouponIds.addAll(rcids); + extraCouponIds.removeAll(arrayCouponIds); + + List sameCouponIds = new ArrayList(); + sameCouponIds.addAll(rcids); + sameCouponIds.removeAll(extraCouponIds); + + if (sameCouponIds.size() > 0) { + WxCoupon couponQ = new WxCoupon(); + couponQ.updateTenantInfo(tenantEntity); + couponQ.setIds(sameCouponIds); + List couponList = wxCouponService.list(couponQ); + if (null == couponList || couponList.size() <= 0 ) { + return new ResultData(Result.ERROR,"未查询到这些券"); + } + + Map couponNameMap = new HashMap(); + for (WxCoupon c: couponList) { + couponNameMap.put(c.getId(),c.getTitle()); + } + + StringBuffer sb = new StringBuffer("已经存在一个批次的券:"); + for (Long _cid: sameCouponIds) { + sb.append(couponNameMap.get(_cid)).append(","); + } + return new ResultData(Result.ERROR,sb.toString()); + } + } + + List batchCids = wxPressBatchService.getItemCouponIdList(record.getId(), tenantEntity.getTenantId()); + if (null != cids && cids.length > 0 ) { + + if (null != batchCids && batchCids.size() > 0 ) { + rcids.removeAll(batchCids); + } + WxPressBatch order = wxPressBatchService.getById(record.getId(), tenantEntity.getTenantId()); + wxPressBatchService.saveItems(order, rcids); + } return new ResultData(); } @@ -155,7 +269,7 @@ public class WxPressBatchController extends BaseController { WxPressBatch record1 = wxPressBatchService.getById(record.getId(), getTenantInfo().getTenantId()); record1.setPromoterLimitRule(record.getPromoterLimitRule()); record1.setPromoterAllowCount(record.getPromoterAllowCount()); - record1.setBargainerAllowCount(record1.getBargainerAllowCount()); + record1.setBargainerAllowCount(record.getBargainerAllowCount()); record1.setBargainerAllowSame(record.getBargainerAllowSame()); wxPressBatchService.saveOrUpdate(record1); return new ResultData(); diff --git a/mallinkAdmin/src/main/resources/db/migration/V2022090100001_press_batch.sql b/mallinkAdmin/src/main/resources/db/migration/V2022090100001_press_batch.sql index 13e85c43f..3fd3a73cc 100644 --- a/mallinkAdmin/src/main/resources/db/migration/V2022090100001_press_batch.sql +++ b/mallinkAdmin/src/main/resources/db/migration/V2022090100001_press_batch.sql @@ -24,3 +24,208 @@ CREATE TABLE `wx_press_batch_item` ( `update_date` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +create table wx_press_batch_0 like wx_press_batch; +create table wx_press_batch_1 like wx_press_batch; +create table wx_press_batch_2 like wx_press_batch; +create table wx_press_batch_3 like wx_press_batch; +create table wx_press_batch_4 like wx_press_batch; +create table wx_press_batch_5 like wx_press_batch; +create table wx_press_batch_6 like wx_press_batch; +create table wx_press_batch_7 like wx_press_batch; +create table wx_press_batch_8 like wx_press_batch; +create table wx_press_batch_9 like wx_press_batch; +create table wx_press_batch_10 like wx_press_batch; +create table wx_press_batch_11 like wx_press_batch; +create table wx_press_batch_12 like wx_press_batch; +create table wx_press_batch_13 like wx_press_batch; +create table wx_press_batch_14 like wx_press_batch; +create table wx_press_batch_15 like wx_press_batch; +create table wx_press_batch_16 like wx_press_batch; +create table wx_press_batch_17 like wx_press_batch; +create table wx_press_batch_18 like wx_press_batch; +create table wx_press_batch_19 like wx_press_batch; +create table wx_press_batch_20 like wx_press_batch; +create table wx_press_batch_21 like wx_press_batch; +create table wx_press_batch_22 like wx_press_batch; +create table wx_press_batch_23 like wx_press_batch; +create table wx_press_batch_24 like wx_press_batch; +create table wx_press_batch_25 like wx_press_batch; +create table wx_press_batch_26 like wx_press_batch; +create table wx_press_batch_27 like wx_press_batch; +create table wx_press_batch_28 like wx_press_batch; +create table wx_press_batch_29 like wx_press_batch; +create table wx_press_batch_30 like wx_press_batch; +create table wx_press_batch_31 like wx_press_batch; +create table wx_press_batch_32 like wx_press_batch; +create table wx_press_batch_33 like wx_press_batch; +create table wx_press_batch_34 like wx_press_batch; +create table wx_press_batch_35 like wx_press_batch; +create table wx_press_batch_36 like wx_press_batch; +create table wx_press_batch_37 like wx_press_batch; +create table wx_press_batch_38 like wx_press_batch; +create table wx_press_batch_39 like wx_press_batch; +create table wx_press_batch_40 like wx_press_batch; +create table wx_press_batch_41 like wx_press_batch; +create table wx_press_batch_42 like wx_press_batch; +create table wx_press_batch_43 like wx_press_batch; +create table wx_press_batch_44 like wx_press_batch; +create table wx_press_batch_45 like wx_press_batch; +create table wx_press_batch_46 like wx_press_batch; +create table wx_press_batch_47 like wx_press_batch; +create table wx_press_batch_48 like wx_press_batch; +create table wx_press_batch_49 like wx_press_batch; +create table wx_press_batch_50 like wx_press_batch; +create table wx_press_batch_51 like wx_press_batch; +create table wx_press_batch_52 like wx_press_batch; +create table wx_press_batch_53 like wx_press_batch; +create table wx_press_batch_54 like wx_press_batch; +create table wx_press_batch_55 like wx_press_batch; +create table wx_press_batch_56 like wx_press_batch; +create table wx_press_batch_57 like wx_press_batch; +create table wx_press_batch_58 like wx_press_batch; +create table wx_press_batch_59 like wx_press_batch; +create table wx_press_batch_60 like wx_press_batch; +create table wx_press_batch_61 like wx_press_batch; +create table wx_press_batch_62 like wx_press_batch; +create table wx_press_batch_63 like wx_press_batch; +create table wx_press_batch_64 like wx_press_batch; +create table wx_press_batch_65 like wx_press_batch; +create table wx_press_batch_66 like wx_press_batch; +create table wx_press_batch_67 like wx_press_batch; +create table wx_press_batch_68 like wx_press_batch; +create table wx_press_batch_69 like wx_press_batch; +create table wx_press_batch_70 like wx_press_batch; +create table wx_press_batch_71 like wx_press_batch; +create table wx_press_batch_72 like wx_press_batch; +create table wx_press_batch_73 like wx_press_batch; +create table wx_press_batch_74 like wx_press_batch; +create table wx_press_batch_75 like wx_press_batch; +create table wx_press_batch_76 like wx_press_batch; +create table wx_press_batch_77 like wx_press_batch; +create table wx_press_batch_78 like wx_press_batch; +create table wx_press_batch_79 like wx_press_batch; +create table wx_press_batch_80 like wx_press_batch; +create table wx_press_batch_81 like wx_press_batch; +create table wx_press_batch_82 like wx_press_batch; +create table wx_press_batch_83 like wx_press_batch; +create table wx_press_batch_84 like wx_press_batch; +create table wx_press_batch_85 like wx_press_batch; +create table wx_press_batch_86 like wx_press_batch; +create table wx_press_batch_87 like wx_press_batch; +create table wx_press_batch_88 like wx_press_batch; +create table wx_press_batch_89 like wx_press_batch; +create table wx_press_batch_90 like wx_press_batch; +create table wx_press_batch_91 like wx_press_batch; +create table wx_press_batch_92 like wx_press_batch; +create table wx_press_batch_93 like wx_press_batch; +create table wx_press_batch_94 like wx_press_batch; +create table wx_press_batch_95 like wx_press_batch; +create table wx_press_batch_96 like wx_press_batch; +create table wx_press_batch_97 like wx_press_batch; +create table wx_press_batch_98 like wx_press_batch; +create table wx_press_batch_99 like wx_press_batch; + +create table wx_press_batch_item_0 like wx_press_batch_item; +create table wx_press_batch_item_1 like wx_press_batch_item; +create table wx_press_batch_item_2 like wx_press_batch_item; +create table wx_press_batch_item_3 like wx_press_batch_item; +create table wx_press_batch_item_4 like wx_press_batch_item; +create table wx_press_batch_item_5 like wx_press_batch_item; +create table wx_press_batch_item_6 like wx_press_batch_item; +create table wx_press_batch_item_7 like wx_press_batch_item; +create table wx_press_batch_item_8 like wx_press_batch_item; +create table wx_press_batch_item_9 like wx_press_batch_item; +create table wx_press_batch_item_10 like wx_press_batch_item; +create table wx_press_batch_item_11 like wx_press_batch_item; +create table wx_press_batch_item_12 like wx_press_batch_item; +create table wx_press_batch_item_13 like wx_press_batch_item; +create table wx_press_batch_item_14 like wx_press_batch_item; +create table wx_press_batch_item_15 like wx_press_batch_item; +create table wx_press_batch_item_16 like wx_press_batch_item; +create table wx_press_batch_item_17 like wx_press_batch_item; +create table wx_press_batch_item_18 like wx_press_batch_item; +create table wx_press_batch_item_19 like wx_press_batch_item; +create table wx_press_batch_item_20 like wx_press_batch_item; +create table wx_press_batch_item_21 like wx_press_batch_item; +create table wx_press_batch_item_22 like wx_press_batch_item; +create table wx_press_batch_item_23 like wx_press_batch_item; +create table wx_press_batch_item_24 like wx_press_batch_item; +create table wx_press_batch_item_25 like wx_press_batch_item; +create table wx_press_batch_item_26 like wx_press_batch_item; +create table wx_press_batch_item_27 like wx_press_batch_item; +create table wx_press_batch_item_28 like wx_press_batch_item; +create table wx_press_batch_item_29 like wx_press_batch_item; +create table wx_press_batch_item_30 like wx_press_batch_item; +create table wx_press_batch_item_31 like wx_press_batch_item; +create table wx_press_batch_item_32 like wx_press_batch_item; +create table wx_press_batch_item_33 like wx_press_batch_item; +create table wx_press_batch_item_34 like wx_press_batch_item; +create table wx_press_batch_item_35 like wx_press_batch_item; +create table wx_press_batch_item_36 like wx_press_batch_item; +create table wx_press_batch_item_37 like wx_press_batch_item; +create table wx_press_batch_item_38 like wx_press_batch_item; +create table wx_press_batch_item_39 like wx_press_batch_item; +create table wx_press_batch_item_40 like wx_press_batch_item; +create table wx_press_batch_item_41 like wx_press_batch_item; +create table wx_press_batch_item_42 like wx_press_batch_item; +create table wx_press_batch_item_43 like wx_press_batch_item; +create table wx_press_batch_item_44 like wx_press_batch_item; +create table wx_press_batch_item_45 like wx_press_batch_item; +create table wx_press_batch_item_46 like wx_press_batch_item; +create table wx_press_batch_item_47 like wx_press_batch_item; +create table wx_press_batch_item_48 like wx_press_batch_item; +create table wx_press_batch_item_49 like wx_press_batch_item; +create table wx_press_batch_item_50 like wx_press_batch_item; +create table wx_press_batch_item_51 like wx_press_batch_item; +create table wx_press_batch_item_52 like wx_press_batch_item; +create table wx_press_batch_item_53 like wx_press_batch_item; +create table wx_press_batch_item_54 like wx_press_batch_item; +create table wx_press_batch_item_55 like wx_press_batch_item; +create table wx_press_batch_item_56 like wx_press_batch_item; +create table wx_press_batch_item_57 like wx_press_batch_item; +create table wx_press_batch_item_58 like wx_press_batch_item; +create table wx_press_batch_item_59 like wx_press_batch_item; +create table wx_press_batch_item_60 like wx_press_batch_item; +create table wx_press_batch_item_61 like wx_press_batch_item; +create table wx_press_batch_item_62 like wx_press_batch_item; +create table wx_press_batch_item_63 like wx_press_batch_item; +create table wx_press_batch_item_64 like wx_press_batch_item; +create table wx_press_batch_item_65 like wx_press_batch_item; +create table wx_press_batch_item_66 like wx_press_batch_item; +create table wx_press_batch_item_67 like wx_press_batch_item; +create table wx_press_batch_item_68 like wx_press_batch_item; +create table wx_press_batch_item_69 like wx_press_batch_item; +create table wx_press_batch_item_70 like wx_press_batch_item; +create table wx_press_batch_item_71 like wx_press_batch_item; +create table wx_press_batch_item_72 like wx_press_batch_item; +create table wx_press_batch_item_73 like wx_press_batch_item; +create table wx_press_batch_item_74 like wx_press_batch_item; +create table wx_press_batch_item_75 like wx_press_batch_item; +create table wx_press_batch_item_76 like wx_press_batch_item; +create table wx_press_batch_item_77 like wx_press_batch_item; +create table wx_press_batch_item_78 like wx_press_batch_item; +create table wx_press_batch_item_79 like wx_press_batch_item; +create table wx_press_batch_item_80 like wx_press_batch_item; +create table wx_press_batch_item_81 like wx_press_batch_item; +create table wx_press_batch_item_82 like wx_press_batch_item; +create table wx_press_batch_item_83 like wx_press_batch_item; +create table wx_press_batch_item_84 like wx_press_batch_item; +create table wx_press_batch_item_85 like wx_press_batch_item; +create table wx_press_batch_item_86 like wx_press_batch_item; +create table wx_press_batch_item_87 like wx_press_batch_item; +create table wx_press_batch_item_88 like wx_press_batch_item; +create table wx_press_batch_item_89 like wx_press_batch_item; +create table wx_press_batch_item_90 like wx_press_batch_item; +create table wx_press_batch_item_91 like wx_press_batch_item; +create table wx_press_batch_item_92 like wx_press_batch_item; +create table wx_press_batch_item_93 like wx_press_batch_item; +create table wx_press_batch_item_94 like wx_press_batch_item; +create table wx_press_batch_item_95 like wx_press_batch_item; +create table wx_press_batch_item_96 like wx_press_batch_item; +create table wx_press_batch_item_97 like wx_press_batch_item; +create table wx_press_batch_item_98 like wx_press_batch_item; +create table wx_press_batch_item_99 like wx_press_batch_item; + +drop table wx_press_batch; +drop table wx_press_batch_item; \ No newline at end of file diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxPressOrderController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxPressOrderController.java index 1e3077ca7..b4d4d3249 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxPressOrderController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxPressOrderController.java @@ -175,6 +175,7 @@ public class WxPressOrderController extends BaseController { //验证砍价批次规则 ResultData result = wxPressBatchService.checkBargainerPressBatchRule(order, memberId); if (Result.SUCCESS != result.code) { + redisLock.unlock(orderIdStr, timeStr); return result; } try { diff --git a/mallinkService/src/main/java/com/iformall/config/BaseMyBatisConfiguration.java b/mallinkService/src/main/java/com/iformall/config/BaseMyBatisConfiguration.java index 2a402d40b..1f6881f30 100644 --- a/mallinkService/src/main/java/com/iformall/config/BaseMyBatisConfiguration.java +++ b/mallinkService/src/main/java/com/iformall/config/BaseMyBatisConfiguration.java @@ -302,6 +302,20 @@ public class BaseMyBatisConfiguration { wxComposeOrderSharding.setRule(EnumShardingRule.HASH.getCode()); shardingList.add(wxComposeOrderSharding); + ShardingSphere wxPressBatchSharding = new ShardingSphere(); + wxPressBatchSharding.setColumn("tenant_id"); + wxPressBatchSharding.setTableName("wx_press_batch"); + wxPressBatchSharding.setCount(100); + wxPressBatchSharding.setRule(EnumShardingRule.HASH.getCode()); + shardingList.add(wxPressBatchSharding); + + ShardingSphere wxPressBatchItemSharding = new ShardingSphere(); + wxPressBatchItemSharding.setColumn("tenant_id"); + wxPressBatchItemSharding.setTableName("wx_press_batch_item"); + wxPressBatchItemSharding.setCount(100); + wxPressBatchItemSharding.setRule(EnumShardingRule.HASH.getCode()); + shardingList.add(wxPressBatchItemSharding); + //初始化 shardingSpherePlugin.setShardingSpheres(shardingList); Properties properties = new Properties(); diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxPressBatchItem.java b/mallinkService/src/main/java/com/iformall/domain/po/WxPressBatchItem.java index 916fa890a..34bd8cb62 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxPressBatchItem.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxPressBatchItem.java @@ -1,5 +1,6 @@ package com.iformall.domain.po; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.iformall.domain.po.base.TenantEntity; import lombok.Data; @@ -27,4 +28,7 @@ public class WxPressBatchItem extends TenantEntity { private Date createDate; @io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateDate") private Date updateDate; + + @TableField(exist = false) + private WxCoupon coupon; } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxCouponChannelMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxCouponChannelMapper.java index 772e28109..7a6ab3547 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxCouponChannelMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxCouponChannelMapper.java @@ -13,6 +13,8 @@ public interface WxCouponChannelMapper extends CommonMapper findList(WxCouponChannel wxCouponChannel); + + List findCouponIdList(WxCouponChannel wxCouponChannel); int countCoupon(WxCouponChannel wxCouponChannel); diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxOrderPressMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxOrderPressMapper.java index 01bb9adde..59fc01ef5 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxOrderPressMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxOrderPressMapper.java @@ -13,5 +13,6 @@ public interface WxOrderPressMapper extends CommonMapper { WxOrderPress selectById(@Param("id")Long id,@Param("tenantId")String tenantId); List findList(WxOrderPress wxOrderPress); List findPressList(Map paramMap); + Integer findCount(WxOrderPress wxOrderPress); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxCouponChannelService.java b/mallinkService/src/main/java/com/iformall/service/WxCouponChannelService.java index 2053055f8..5f53778b7 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCouponChannelService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCouponChannelService.java @@ -26,6 +26,7 @@ public interface WxCouponChannelService { */ PageInfo listAsPage(WxCouponChannel record, Integer pageIndex, Integer pageSize); List findList(WxCouponChannel record); + List findCouponIdList(WxCouponChannel record); WxCouponCVo findDetailVo(Long id,String tenantId,boolean hasMerchant); diff --git a/mallinkService/src/main/java/com/iformall/service/WxCouponService.java b/mallinkService/src/main/java/com/iformall/service/WxCouponService.java index 486c62be9..4fd278442 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCouponService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCouponService.java @@ -31,6 +31,8 @@ public interface WxCouponService { * @return */ PageInfo listAsPage(WxCoupon record, Integer pageIndex, Integer pageSize); + + PageInfo simplelistAsPage(WxCoupon record, Integer pageIndex, Integer pageSize); /** * 卡类列表,包括统计 diff --git a/mallinkService/src/main/java/com/iformall/service/WxPressBatchService.java b/mallinkService/src/main/java/com/iformall/service/WxPressBatchService.java index 970a2629c..77c5cc581 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxPressBatchService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxPressBatchService.java @@ -39,9 +39,12 @@ public interface WxPressBatchService { WxPressBatch getById(Long id,String tenantId); + PageInfo getItemPage(Long batchId,String tenantId, Integer pageIndex, Integer pageSize); List getItemList(Long batchId,String tenantId); + List getItemCouponIdList(Long batchId,String tenantId); + List getCouponIds(String tenantId); - void saveItems(WxPressBatch pressBatch,String[] couponIds); + void saveItems(WxPressBatch pressBatch,List couponIds); void deleteBatch(Long id,String tenantId); void deleteItemById(Long itemId,String tenantId); diff --git a/mallinkService/src/main/java/com/iformall/service/cuser/wx/WxBUserServiceAdapter.java b/mallinkService/src/main/java/com/iformall/service/cuser/wx/WxBUserServiceAdapter.java index 42795178d..88401b201 100644 --- a/mallinkService/src/main/java/com/iformall/service/cuser/wx/WxBUserServiceAdapter.java +++ b/mallinkService/src/main/java/com/iformall/service/cuser/wx/WxBUserServiceAdapter.java @@ -61,6 +61,7 @@ public class WxBUserServiceAdapter extends BasicCUserService implements CUserSer if (null == appInfo) { throw new MallinkException(ErrorCode.USER_APPINFO_NOT_EXIST.getCode(), "当前token查询不到APP"); } + entity.setAppinfo(appInfo); entity.setRealUser(wxBuser); return entity; } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponChannelServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponChannelServiceImpl.java index d70db8505..403e1bdf6 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponChannelServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponChannelServiceImpl.java @@ -113,6 +113,11 @@ public class WxCouponChannelServiceImpl implements WxCouponChannelService { return wxCouponChannelMapper.findList(record); } + @Override + public List findCouponIdList(WxCouponChannel record) { + return wxCouponChannelMapper.findCouponIdList(record); + } + @Override public WxCouponChannel getById(Long id,String tenantId) { return wxCouponChannelMapper.selectById(id,tenantId); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java index 323481746..3becbb531 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponServiceImpl.java @@ -210,6 +210,11 @@ public class WxCouponServiceImpl implements WxCouponService { public List list(WxCoupon wxCoupon){ return wxCouponMapper.findList(wxCoupon); } + + @Override + public PageInfo simplelistAsPage(WxCoupon record, Integer pageNum, Integer pageSize) { + return PageHelper.startPage(pageNum, pageSize).doSelectPageInfo(() -> wxCouponMapper.findList(record)); + } @Override public PageInfo listAsPage(WxCoupon record, Integer pageIndex, Integer pageSize) { @@ -674,20 +679,24 @@ public class WxCouponServiceImpl implements WxCouponService { } PayShareAdapterService payShareServie = payServiceFactory.getPayShareAdapterService(payWay.getCode(),payAccount.getPayVersion()); + List merchantIds = new ArrayList<>(); + for (JSONObject o:merchantParamList) { + merchantIds.add(o.getLong("id")); + } + WxMerchant merchantQ = new WxMerchant(); + merchantQ.updateTenantInfo(record); + merchantQ.setIds(merchantIds); + Map idAndNamesMap = wxMerchantService.getIdAndNamesMap(merchantQ); if (EnumPayMchType.DIRECT.equals(payMchType)) { Long merchantId = null; - if (merchantParamList.size() > 1) { - List merchantIds = new ArrayList<>(); - for (JSONObject o:merchantParamList) { - merchantIds.add(o.getLong("id")); - } - WxMerchant merchantQ = new WxMerchant(); - merchantQ.updateTenantInfo(record); - merchantQ.setIds(merchantIds); - merchantQ.setIsAdmin(EnumYesOrNo.YES.getCode()); - merchantQ.setStatus(EnumMerchantStatus.VALID.getCode()); - List list = wxMerchantMapper.findIdList(merchantQ); + if (merchantIds.size() > 1) { + WxMerchant merchantQ2 = new WxMerchant(); + merchantQ2.updateTenantInfo(record); + merchantQ2.setIds(merchantIds); + merchantQ2.setIsAdmin(EnumYesOrNo.YES.getCode()); + merchantQ2.setStatus(EnumMerchantStatus.VALID.getCode()); + List list = wxMerchantMapper.findIdList(merchantQ2); if(list == null || list.isEmpty()){ return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "直连模式多门店券需包含一个商管商户"); }else if(list.size() > 1){ @@ -697,28 +706,28 @@ public class WxCouponServiceImpl implements WxCouponService { merchantId = list.get(0); }else{ record.setMerchantType(EnumCouponMerchantType.ONE_MERCHANT.getCode()); - merchantId = merchantParamList.get(0).getLong("id"); + merchantId = merchantIds.get(0); } WxProfitSharingReceiver receiver = payShareServie.getReceiver(payAccount, merchantId, null, payMchTypeEnum.getCode()); if (receiver == null) { - return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "对应门店至少进件一种支付模式"); + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "["+idAndNamesMap.get(merchantId)+"]未配置收款账户"); } if (EnumAppPlat.TOUTIAO.equals(plat)) { if (!MerchantImportStatus.improt_success.getCode().equals(receiver.getWxImportStatus()) && !MerchantImportStatus.improt_success.getCode().equals(receiver.getAlipayImportStatus()) && !MerchantImportStatus.improt_success.getCode().equals(receiver.getHzImportStatus())) { - return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "对应门店至少进件一种支付模式"); + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "["+idAndNamesMap.get(merchantId)+"]未配置收款账户"); } } } else if (EnumPayShare.YES.equals(isShare)) { - for (int i = 0, size = merchantParamList.size(); i < size; i++) { - JSONObject jsonObject = merchantParamList.get(i); - Long merchantId = jsonObject.getLong("id"); + List merchantNames = new ArrayList(); + for (Long merchantId:merchantIds) { WxProfitSharingReceiver receiver = payShareServie.getReceiver(payAccount, merchantId, null, payMchTypeEnum.getCode()); - int n = i + 1; if (receiver == null) { - return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "第(" + n + ")个商户还未配置分账账户或未进件"); + merchantNames.add(idAndNamesMap.get(merchantId)); + continue; +// return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "第(" + n + ")个商户还未配置分账账户或未进件"); } if (EnumAppPlat.TOUTIAO.equals(plat)) { QueryMerchantResult openPayResult = payAccount.getOpenPayResult(); @@ -729,18 +738,27 @@ public class WxCouponServiceImpl implements WxCouponService { } if(EnumYesOrNo.YES.getCode().equals(openPayResult.getAlipay()) && !MerchantImportStatus.improt_success.getCode().equals(receiver.getAlipayImportStatus())){ - return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "第(" + n + ")个商户未进件支付宝"); + merchantNames.add(idAndNamesMap.get(merchantId)); + continue; +// return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "["+idAndNamesMap.get(merchantId)+"]未进件支付宝"); } if(EnumYesOrNo.YES.getCode().equals(openPayResult.getWx()) && !MerchantImportStatus.improt_success.getCode().equals(receiver.getWxImportStatus())){ - return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "第(" + n + ")个商户未进件微信"); + merchantNames.add(idAndNamesMap.get(merchantId)); + continue; +// return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "["+idAndNamesMap.get(merchantId)+"]未进件微信"); } if(EnumYesOrNo.YES.getCode().equals(openPayResult.getHz()) && !MerchantImportStatus.improt_success.getCode().equals(receiver.getHzImportStatus())){ - return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "第(" + n + ")个商户未进件抖音"); + merchantNames.add(idAndNamesMap.get(merchantId)); + continue; +// return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "["+idAndNamesMap.get(merchantId)+"]未进件抖音"); } } } + if(!merchantNames.isEmpty()){ + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), JSONArray.toJSONString(merchantNames)+"未配置分账账户"); + } } } return new ResultData(); 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 5d987703c..691a953f1 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java @@ -778,15 +778,32 @@ public class WxOrderServiceImpl implements WxOrderService { if (null != checkPressResult) { WxPressBatch pressBatch = checkPressResult.getPressBatch(); List cids = checkPressResult.getCouponIdList(); - couponOrderQ.setCouponIds(cids); - if (pressBatch.getPromoterLimitRule().equals(EnumCouponUseLimitRule.TOBEUSED_USELIMIT.getCode())) { - couponOrderQ.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USE_WAIT.getCode()); - } - int _count = wxCouponOrderMapper.findProductCount(couponOrderQ)+couponNumber; - if (_count > pressBatch.getPromoterAllowCount()) { - throw new MallinkException(ErrorCode.ORDER_IS_FAIL.getCode(),"当前用户已达砍价["+counpon.getTitle()+"]所在批次活动发起次数上限."); + if (null != cids && cids.size() > 0 ) { + couponOrderQ.setCouponIds(cids); + //判断这些券发起中+已完成的 + WxOrder orderq = new WxOrder(); + orderq.updateTenantInfo(counpon); + orderq.setCouponIds(cids); + orderq.setCUserId(user.getId()); + //if (pressBatch.getPromoterLimitRule().equals(EnumCouponUseLimitRule.TOBEUSED_USELIMIT.getCode())) { + List statusS = new ArrayList(); + statusS.add(EnumOrderStatus.ORDER_STATUS_PRESSING.getCode()); + statusS.add(EnumOrderStatus.ORDER_STATUS_PRESS_COMPLETE.getCode()); + statusS.add(EnumOrderStatus.ORDER_STATUS_PENDING_PAYMENT.getCode()); + statusS.add(EnumOrderStatus.ORDER_STATUS_PAYMENT_SUCCESS.getCode()); + statusS.add(EnumOrderStatus.ORDER_STATUS_PENDING_REFUND.getCode()); + statusS.add(EnumOrderStatus.ORDER_STATUS_REFUND_SUCCESS.getCode()); + statusS.add(EnumOrderStatus.ORDER_STATUS_REFUND_FAILD.getCode()); + orderq.setStatusS(statusS); + //} + int _count = wxOrderMapper.countCouponConditionType1(orderq); + if (_count >= pressBatch.getPromoterAllowCount()) { + throw new MallinkException(ErrorCode.ORDER_IS_FAIL.getCode(),"当前用户发起砍价次数已超限.["+pressBatch.getName()+"]"); + } + return _count; + }else { + throw new MallinkException(ErrorCode.ORDER_IS_FAIL.getCode(),"砍价批次["+pressBatch.getName()+"]未设置券."); } - return _count; }else { if (counpon.getUseLimitRule().equals(EnumCouponUseLimitRule.TOBEUSED_USELIMIT.getCode())) { couponOrderQ.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USE_WAIT.getCode()); @@ -800,7 +817,9 @@ public class WxOrderServiceImpl implements WxOrderService { couponOrderQ.setCouponId(counpon.getId()); } return wxCouponOrderMapper.findProductCount(couponOrderQ)+couponNumber; - } catch (Exception e) { + } catch(MallinkException e1) { + throw new MallinkException(ErrorCode.ORDER_IS_FAIL.getCode(),e1.getMessage()); + }catch (Exception e) { logger.error("购买是否超限-DB, couponId: " + counpon.getId() + ", e:" + e.getMessage(),e); throw new MallinkException(ErrorCode.ORDER_IS_FAIL.getCode(),"["+counpon.getTitle()+"]查询待使用订单错误."+e.getMessage()); } @@ -1004,7 +1023,7 @@ public class WxOrderServiceImpl implements WxOrderService { try { grouponCount = getUserOrderGroupCount(user, coupon); } catch (Exception e) { - throw new MallinkException(ErrorCode.DB_FAIL.getCode(),"["+coupon.getTitle()+"]查询拼团中订单错误."); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(),"["+coupon.getTitle()+"]"+e.getMessage()); } if (grouponCount >= coupon.getUseLimitQuantity()) { throw new MallinkException(ErrorCode.ORDER_IS_LIMITED.getCode(),"["+coupon.getTitle()+"]购买超限."); @@ -1014,7 +1033,7 @@ public class WxOrderServiceImpl implements WxOrderService { try { paidCount = getUserCouponOrderCount(user, coupon,number,isPressOrder); } catch (Exception e) { - throw new MallinkException(ErrorCode.DB_FAIL.getCode(),"["+coupon.getTitle()+"]查询待使用订单错误."+e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(),e.getMessage()); } if (paidCount > coupon.getUseLimitQuantity()) { throw new MallinkException(ErrorCode.ORDER_IS_LIMITED.getCode(),"此券购买数量已超限["+coupon.getTitle()+"], couponId: " + coupon.getId() + ", count: " + paidCount); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxPressBatchServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxPressBatchServiceImpl.java index bd7cfa1bb..35fb3635e 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxPressBatchServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxPressBatchServiceImpl.java @@ -86,6 +86,14 @@ public class WxPressBatchServiceImpl implements WxPressBatchService { return wxPressBatchMapper.getById(id, tenantId); } + @Override + public PageInfo getItemPage(Long batchId,String tenantId, Integer pageIndex, Integer pageSize) { + WxPressBatchItem iteq = new WxPressBatchItem(); + iteq.setTenantId(tenantId); + iteq.setPressBatchId(batchId); + return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxPressBatchItemMapper.findList(iteq)); + } + @Override public List getItemList(Long batchId, String tenantId) { WxPressBatchItem iteq = new WxPressBatchItem(); @@ -94,14 +102,29 @@ public class WxPressBatchServiceImpl implements WxPressBatchService { return wxPressBatchItemMapper.findList(iteq); } + @Override + public List getItemCouponIdList(Long batchId, String tenantId) { + WxPressBatchItem iteq = new WxPressBatchItem(); + iteq.setTenantId(tenantId); + iteq.setPressBatchId(batchId); + return wxPressBatchItemMapper.getCouponIds(batchId, tenantId, null); + } + + @Override + public List getCouponIds(String tenantId) { + WxPressBatchItem iteq = new WxPressBatchItem(); + iteq.setTenantId(tenantId); + return wxPressBatchItemMapper.getCouponIds(null, tenantId, null); + } + @Override @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) - public void saveItems(WxPressBatch pressBatch, String[] couponIds) { - for (String cid : couponIds) { + public void saveItems(WxPressBatch pressBatch, List couponIds) { + for (Long cid : couponIds) { WxPressBatchItem iteq = new WxPressBatchItem(); iteq.updateTenantInfo(pressBatch); iteq.setPressBatchId(pressBatch.getId()); - iteq.setCouponId(Long.parseLong(cid)); + iteq.setCouponId(cid); iteq.setPressBatchStatus(pressBatch.getStatus()); iteq.setCreateDate(new Date()); iteq.setUpdateDate(new Date()); @@ -170,7 +193,7 @@ public class WxPressBatchServiceImpl implements WxPressBatchService { orderPressQ1.setCouponId(order.getProductId()); int count1 = wxOrderPressMapper.selectCount(new QueryWrapper<>(orderPressQ1)); if(count1 >= 1) { - return new ResultData(Result.ERROR,"当前用户砍已砍过相同商品,"); + return new ResultData(Result.ERROR,"当前用户已砍过相同商品"); } } //查询当前用户参与这些券的砍价次数 @@ -178,9 +201,9 @@ public class WxPressBatchServiceImpl implements WxPressBatchService { orderPressQ.setTenantId(order.getTenantId()); orderPressQ.setUserId(cUserId); orderPressQ.setCouponIds(batchCouponIds); - int count = wxOrderPressMapper.selectCount(new QueryWrapper<>(orderPressQ)); + int count = wxOrderPressMapper.findCount(orderPressQ); if(count >= pressBatch.getBargainerAllowCount().intValue()) { - return new ResultData(Result.ERROR,"当前用户砍价次数已达批次活动设定上限,"); + return new ResultData(Result.ERROR,"当前用户帮砍次数已达批次活动设定上限["+pressBatch.getName()+"]"); } else { return new ResultData(); } diff --git a/mallinkService/src/main/resources/mapper/WxCouponChannelMapper.xml b/mallinkService/src/main/resources/mapper/WxCouponChannelMapper.xml index d4a0848e8..5f6cbef84 100644 --- a/mallinkService/src/main/resources/mapper/WxCouponChannelMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCouponChannelMapper.xml @@ -143,6 +143,11 @@ select from wx_coupon_channel cc + + update wx_coupon_channel diff --git a/mallinkService/src/main/resources/mapper/WxOrderPressMapper.xml b/mallinkService/src/main/resources/mapper/WxOrderPressMapper.xml index a3fe2c222..8949a6139 100644 --- a/mallinkService/src/main/resources/mapper/WxOrderPressMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxOrderPressMapper.xml @@ -67,4 +67,9 @@ where op.`order_id` = #{orderId} and op.tenant_id = #{tenantId} order by op.`create_date` desc + + diff --git a/mallinkService/src/main/resources/mapper/WxPressBatchItemMapper.xml b/mallinkService/src/main/resources/mapper/WxPressBatchItemMapper.xml index b3121f7d1..4614a2934 100644 --- a/mallinkService/src/main/resources/mapper/WxPressBatchItemMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxPressBatchItemMapper.xml @@ -83,7 +83,7 @@ - delete from wx_press_batch_item where `id` = #{id} and tenant_id=#{tenantId} and `press_batch_id` = #{pressBatchId} + delete from wx_press_batch_item where `id` = #{id} and tenant_id=#{tenantId} @@ -91,7 +91,10 @@