Просмотр исходного кода

Merge branch 'devlocal' into develop

release_toaliyun_real
Burce 6 лет назад
Родитель
Сommit
d5f2abcf95
10 измененных файлов: 169 добавлений и 130 удалений
  1. +6
    -1
      mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponSendConfigController.java
  2. +20
    -21
      mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponSendController.java
  3. +28
    -7
      mallinkBApi/src/main/java/com/iformall/controller/WxCouponSendController.java
  4. +26
    -17
      mallinkSchedule/src/main/java/com/iformall/schedule/CouponSendSchedule.java
  5. +10
    -1
      mallinkService/src/main/java/com/iformall/domain/po/WxCouponSend.java
  6. +1
    -1
      mallinkService/src/main/java/com/iformall/mapper/WxCouponSendMapper.java
  7. +6
    -0
      mallinkService/src/main/java/com/iformall/service/WxCouponSendService.java
  8. +1
    -1
      mallinkService/src/main/java/com/iformall/service/WxCouponService.java
  9. +50
    -74
      mallinkService/src/main/java/com/iformall/service/impl/WxCouponSendServiceImpl.java
  10. +21
    -7
      mallinkService/src/main/resources/mapper/WxCouponSendMapper.xml

+ 6
- 1
mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponSendConfigController.java Просмотреть файл

@@ -6,6 +6,7 @@ import com.iformall.common.ErrorCode;
import com.iformall.common.ResultData; import com.iformall.common.ResultData;
import com.iformall.controller.base.BaseController; import com.iformall.controller.base.BaseController;
import com.iformall.domain.po.WxCouponSendConfig; import com.iformall.domain.po.WxCouponSendConfig;
import com.iformall.enums.EnumCouponSendSendType;
import com.iformall.service.WxCouponSendConfigService; import com.iformall.service.WxCouponSendConfigService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
@@ -37,8 +38,12 @@ public class WxCouponSendConfigController extends BaseController {
PageInfo<WxCouponSendConfig> page = wxCouponSendConfigService.listAsPage(wxCouponSendConfig, 1, 1); PageInfo<WxCouponSendConfig> page = wxCouponSendConfigService.listAsPage(wxCouponSendConfig, 1, 1);
if (page.getSize() > 0) { if (page.getSize() > 0) {
return new ResultData(page.getList().get(0)); return new ResultData(page.getList().get(0));
} else {
//默认停用
wxCouponSendConfig.setRemark(EnumCouponSendSendType.getEnum(wxCouponSendConfig.getSendType()).getMessage() + "开关");
wxCouponSendConfig.setValue(0);
return new ResultData(wxCouponSendConfig);
} }
return new ResultData();
} }






+ 20
- 21
mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponSendController.java Просмотреть файл

@@ -57,13 +57,13 @@ public class WxCouponSendController extends BaseController {
if (null == wxCouponSend) wxCouponSend = new WxCouponSend(); if (null == wxCouponSend) wxCouponSend = new WxCouponSend();
wxCouponSend.setTenantId(getTenantId()); wxCouponSend.setTenantId(getTenantId());
Integer valid = EnumCouponSendStatus.VALID.getCode(); Integer valid = EnumCouponSendStatus.VALID.getCode();
if (Objects.equals(EnumCouponSendSendType.MERCHANT.getCode(), wxCouponSend.getSendType())) {
if (Objects.nonNull(wxCouponSend.getStatus())) {
valid = wxCouponSend.getStatus();
} else {
wxCouponSend.setStatus(null);
}
}
// if (Objects.equals(EnumCouponSendSendType.MERCHANT.getCode(), wxCouponSend.getSendType())) {
// if (Objects.nonNull(wxCouponSend.getStatus())) {
// valid = wxCouponSend.getStatus();
// } else {
// wxCouponSend.setStatus(null);
// }
// }
wxCouponSend.setStatus(valid); wxCouponSend.setStatus(valid);
wxCouponSend.setSortColumns(BaseEntity.SortField.CreateDate_DESC); wxCouponSend.setSortColumns(BaseEntity.SortField.CreateDate_DESC);
PageInfo<WxCouponSendVo> page = wxCouponSendService.listAsPage(wxCouponSend, pageNum, pageSize); PageInfo<WxCouponSendVo> page = wxCouponSendService.listAsPage(wxCouponSend, pageNum, pageSize);
@@ -126,15 +126,15 @@ public class WxCouponSendController extends BaseController {
return new ResultData(); return new ResultData();
} }


@ApiOperation("根据id更新接口")
@PostMapping("update")
@SystemControllerLog(description = "注券-更新")
public ResultData update(@RequestBody WxCouponSend wxCouponSend) {
logger.debug("[" + getIpAddr() + "] WxCouponSendController::update");
wxCouponSend.setTenantId(getTenantId());
wxCouponSendService.saveOrUpdate(wxCouponSend);
return new ResultData();
}
// @ApiOperation("根据id更新接口")
// @PostMapping("update")
// @SystemControllerLog(description = "注券-更新")
// public ResultData update(@RequestBody WxCouponSend wxCouponSend) {
// logger.debug("[" + getIpAddr() + "] WxCouponSendController::update");
// wxCouponSend.setTenantId(getTenantId());
// wxCouponSendService.saveOrUpdate(wxCouponSend);
// return new ResultData();
// }


@ApiOperation("根据id删除接口") @ApiOperation("根据id删除接口")
@GetMapping("/del") @GetMapping("/del")
@@ -143,14 +143,13 @@ public class WxCouponSendController extends BaseController {
@ApiImplicitParam(name = "sendType", value = "注券类型(会员生日券时必传)", dataType = "int", paramType = "query") @ApiImplicitParam(name = "sendType", value = "注券类型(会员生日券时必传)", dataType = "int", paramType = "query")
}) })
@SystemControllerLog(description = "注券-删除") @SystemControllerLog(description = "注券-删除")
public ResultData delete(Long id,Integer sendType) {
public ResultData delete(Long id) {
logger.debug("[" + getIpAddr() + "] WxCouponSendController::delete"); logger.debug("[" + getIpAddr() + "] WxCouponSendController::delete");
WxCouponSend wxCouponSend = wxCouponSendService.getById(id); WxCouponSend wxCouponSend = wxCouponSendService.getById(id);
if (wxCouponSend == null)
if (wxCouponSend == null) {
return new ResultData(ErrorCode.COUPON_SEND_IS_INVALID); return new ResultData(ErrorCode.COUPON_SEND_IS_INVALID);
wxCouponSend.setStatus(EnumCouponSendStatus.INVALID.getCode());
wxCouponSend.setUpdateDate(new Date());
wxCouponSendService.saveOrUpdate(wxCouponSend);
}
wxCouponSendService.updateInvalid(wxCouponSend);
return new ResultData(); return new ResultData();
} }




+ 28
- 7
mallinkBApi/src/main/java/com/iformall/controller/WxCouponSendController.java Просмотреть файл

@@ -1,17 +1,20 @@
package com.iformall.controller; package com.iformall.controller;


import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.iformall.common.ErrorCode;
import com.iformall.common.ResultData; import com.iformall.common.ResultData;
import com.iformall.domain.po.BaseEntity; import com.iformall.domain.po.BaseEntity;
import com.iformall.domain.po.WxCouponSend; import com.iformall.domain.po.WxCouponSend;
import com.iformall.domain.vo.WxCouponSendVo; import com.iformall.domain.vo.WxCouponSendVo;
import com.iformall.enums.EnumCouponSendStatus; import com.iformall.enums.EnumCouponSendStatus;
import com.iformall.exception.MallinkException;
import com.iformall.service.WxCouponActionLogService; import com.iformall.service.WxCouponActionLogService;
import com.iformall.service.WxCouponSendService; import com.iformall.service.WxCouponSendService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.ArrayUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -19,9 +22,12 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;


import javax.validation.constraints.NotNull;
import java.util.Objects;

@RestController @RestController
@RequestMapping("/api/couponSend") @RequestMapping("/api/couponSend")
@Api(description = "商户卡券相关接口")
@Api(description = "商户券相关接口")
public class WxCouponSendController extends BaseController { public class WxCouponSendController extends BaseController {
private final Logger logger = LoggerFactory.getLogger(this.getClass()); private final Logger logger = LoggerFactory.getLogger(this.getClass());


@@ -30,19 +36,20 @@ public class WxCouponSendController extends BaseController {
@Autowired @Autowired
private WxCouponActionLogService wxCouponActionLogService; private WxCouponActionLogService wxCouponActionLogService;


@ApiOperation("查询商户券列表")
@ApiOperation("查询商户券列表")
@GetMapping("/list") @GetMapping("/list")
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true),
@ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true), @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true),
@ApiImplicitParam(name = "sendType", value = "2:停车发券 3:核销发券 4: B端刷卡发券 5:商户发卷 6:定时发券 7:商户发券", dataType = "int", paramType = "query",required = true),
@ApiImplicitParam(name = "merchantId", value = "商户ID", dataType = "long", paramType = "query",required = true),
}) })
public ResultData list(Integer sendType, Integer pageNum, Integer pageSize) {
public ResultData list(WxCouponSend wxCouponSend, Integer pageNum, Integer pageSize) {
logger.debug("[" + getIpAddr() + "] WxCouponSendController::list"); logger.debug("[" + getIpAddr() + "] WxCouponSendController::list");
WxCouponSend wxCouponSend = new WxCouponSend();
wxCouponSend.setSendType(sendType);
if (Objects.isNull(wxCouponSend.getMerchantId()) || Objects.equals(wxCouponSend.getMerchantId(), 0) || Objects.isNull(wxCouponSend.getSendType())) {
throw new MallinkException(ErrorCode.SYS_PARAMETER_NOT_NULL);
}
wxCouponSend.setTenantId(getTenantId()); wxCouponSend.setTenantId(getTenantId());
wxCouponSend.setStatus(EnumCouponSendStatus.VALID.getCode());
wxCouponSend.setStatus(Objects.isNull(wxCouponSend.getStatus()) ? null : wxCouponSend.getStatus());
//库存大于0 //库存大于0
wxCouponSend.setMerchantLnventory(0); wxCouponSend.setMerchantLnventory(0);
wxCouponSend.setSortColumns(BaseEntity.SortField.CreateDate_DESC); wxCouponSend.setSortColumns(BaseEntity.SortField.CreateDate_DESC);
@@ -54,4 +61,18 @@ public class WxCouponSendController extends BaseController {
return new ResultData(page); return new ResultData(page);
} }


@ApiOperation("商户注券")
@GetMapping("/handsel")
@ApiImplicitParams({
@ApiImplicitParam(name = "wxCouponSendId", value = "wxCouponSendId", dataType = "long", paramType = "query",required = true),
@ApiImplicitParam(name = "cUserId", value = "用户ID", dataType = "long", paramType = "query",required = true),
})
public ResultData handsel(Long[] wxCouponSendIds,Long cUserId) {
if(ArrayUtils.isEmpty(wxCouponSendIds)||Objects.isNull(cUserId)) {
throw new MallinkException(ErrorCode.SYS_PARAMETER_NOT_NULL);
}
return new ResultData();
}


} }

+ 26
- 17
mallinkSchedule/src/main/java/com/iformall/schedule/CouponSendSchedule.java Просмотреть файл

@@ -257,20 +257,27 @@ public class CouponSendSchedule {
return; return;
} }


WxCouponSend config = wxCouponSendService.getConfig(EnumCouponSendSendType.BIRTHDAY.getCode(), cu.getTenantId());
if (Objects.isNull(config) || Objects.isNull(config.getConditions())) {
logger.info("生日发券: 会员生日券配置不存在 config = {}, 任务跳过不执行", config);
return;
}

//默认生日当天发送
int beforeDays = 0;
JSONObject configJo = JSONObject.parseObject(config.getConditions());
if (configJo.containsKey(WxCouponSend.KEY_BEFOREDAYS)) {
beforeDays = configJo.getIntValue(WxCouponSend.KEY_BEFOREDAYS);
}
// WxCouponSend config = wxCouponSendService.getConfig(EnumCouponSendSendType.BIRTHDAY.getCode(), cu.getTenantId());
//


boolean sent = false;
for (WxCouponSendVo cs : couponSendList) { for (WxCouponSendVo cs : couponSendList) {
String conditions = cs.getConditions();
JSONObject configJo = null;
try {
configJo = JSONObject.parseObject(conditions);
} catch (Exception e) {
logger.error("生日发券: 解析conditions异常: {}",e.getMessage());
}
if (Objects.isNull(conditions)||Objects.isNull(configJo)) {
logger.info("生日发券: 会员生日券配置不存在 conditions = {}, 任务跳过不执行", conditions);
return;
}
//默认生日当天发送
int beforeDays = 0;
if (configJo.containsKey(WxCouponSend.KEY_BEFOREDAYS)) {
beforeDays = configJo.getIntValue(WxCouponSend.KEY_BEFOREDAYS);
}
Map<String, Object> params = new HashMap<>(); Map<String, Object> params = new HashMap<>();
params.put("tenantId", cs.getTenantId()); params.put("tenantId", cs.getTenantId());
params.put("cUserId", cu.getId()); params.put("cUserId", cu.getId());
@@ -287,7 +294,8 @@ public class CouponSendSchedule {
continue; continue;
} }
//提前n天发送生日券,不满足跳过不执行 //提前n天发送生日券,不满足跳过不执行
if (DateUtils.birthdaysBetween(cu.getBirthdate()) == beforeDays) {
if (DateUtils.birthdaysBetween(cu.getBirthdate()) != beforeDays) {
logger.info("生日发券: [会员={},生日={}不满足提前{}天发券]", cu.getNickName(), cu.getBirthdate(),beforeDays);
continue; continue;
} }
if (cs.getRemainInventory() <= 0) { if (cs.getRemainInventory() <= 0) {
@@ -297,14 +305,12 @@ public class CouponSendSchedule {
// 发放免费券 // 发放免费券
try { try {
WxCouponOrder couponOrder = wxOrderService.sendFreeCouponToUser(cu.getId(), cs.getCouponId()); WxCouponOrder couponOrder = wxOrderService.sendFreeCouponToUser(cu.getId(), cs.getCouponId());
sendSMS(cu, mall);
wxCouponActionLogService.addOne(cu.getTenantId(), cs.getCouponId(), couponOrder.getId(), cs.getSendType(), cs.getId()); wxCouponActionLogService.addOne(cu.getTenantId(), cs.getCouponId(), couponOrder.getId(), cs.getSendType(), cs.getId());
} catch (Exception e) { } catch (Exception e) {
logger.error("定时发券:发券失败 levelId=" + cu.getId() + " couponId=" + cs.getCouponId() + " userId=" + cu.getId() + e.getMessage()); logger.error("定时发券:发券失败 levelId=" + cu.getId() + " couponId=" + cs.getCouponId() + " userId=" + cu.getId() + e.getMessage());
logger.info("定时发券:发券失败 levelId=" + cu.getId() + " couponId=" + cs.getCouponId() + " userId=" + cu.getId() + e.getMessage());
continue; continue;
} }
sent = true ;
logger.info("定时发券:商场[" + mall.getName() + logger.info("定时发券:商场[" + mall.getName() +
"]会员生日[" + cu.getBirthdate().toInstant() + "]会员生日[" + cu.getBirthdate().toInstant() +
"]发送券[" + cs.getTitle() + "]发送券[" + cs.getTitle() +
@@ -312,6 +318,9 @@ public class CouponSendSchedule {
" 电话-" + cu.getPhone() + " 电话-" + cu.getPhone() +
" id-" + cu.getId()); " id-" + cu.getId());
} }
if(sent) {
sendSMS(cu, mall);
}
}); });
}); });
logger.info("生日发券: 任务结束"); logger.info("生日发券: 任务结束");
@@ -352,7 +361,7 @@ public class CouponSendSchedule {
//没有配置积分规则 //没有配置积分规则
wxMsgRecord.setModelType(EnumMsgModel.COUPON_BIRTHDAY_OPENED_NO.getCode()); wxMsgRecord.setModelType(EnumMsgModel.COUPON_BIRTHDAY_OPENED_NO.getCode());
} }
dynamicContentMap.put("userName", cUserBasicInfo.getNickName());
dynamicContentMap.put("userName", Objects.isNull(cUserBasicInfo.getNickName()) ? "" : cUserBasicInfo.getNickName());
dynamicContentMap.put("mallName", mall.getName()); dynamicContentMap.put("mallName", mall.getName());
wxMsgRecord.setDynamicContentMap(dynamicContentMap); wxMsgRecord.setDynamicContentMap(dynamicContentMap);
mqBaseProducer.sendMessage(wxMsgRecord, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); mqBaseProducer.sendMessage(wxMsgRecord, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode());


+ 10
- 1
mallinkService/src/main/java/com/iformall/domain/po/WxCouponSend.java Просмотреть файл

@@ -47,6 +47,11 @@ public class WxCouponSend extends BaseEntity {
/**发卷所属商户名**/ /**发卷所属商户名**/
@Transient @Transient
private String merchantName; private String merchantName;
/**
* 商户ID
*/
@Transient
private Long merchantId;


@io.swagger.annotations.ApiModelProperty(value="租户ID",name="tenantId") @io.swagger.annotations.ApiModelProperty(value="租户ID",name="tenantId")
private String tenantId; private String tenantId;
@@ -59,7 +64,7 @@ public class WxCouponSend extends BaseEntity {
private Integer sendType; private Integer sendType;
@io.swagger.annotations.ApiModelProperty(value="发券条件",name="condition") @io.swagger.annotations.ApiModelProperty(value="发券条件",name="condition")
private String conditions; private String conditions;
@io.swagger.annotations.ApiModelProperty(value="全部时不传 0:有效 1:无效",name="status")
@io.swagger.annotations.ApiModelProperty(value="0:有效 1:无效,全部时不传",name="status")
private Integer status; private Integer status;


@io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate") @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createDate")
@@ -74,4 +79,8 @@ public class WxCouponSend extends BaseEntity {
@io.swagger.annotations.ApiModelProperty(value = "1是0否", name = "是否发送短信1是0否") @io.swagger.annotations.ApiModelProperty(value = "1是0否", name = "是否发送短信1是0否")
private Integer sendSms; private Integer sendSms;


@io.swagger.annotations.ApiModelProperty(value = "0未过期1已过期,全部时不传", name = "expired" )
@Transient
private Integer expired;

} }

+ 1
- 1
mallinkService/src/main/java/com/iformall/mapper/WxCouponSendMapper.java Просмотреть файл

@@ -8,7 +8,7 @@ import com.iformall.domain.vo.WxCouponSendVo;
public interface WxCouponSendMapper extends CommonMapper<WxCouponSend, String> { public interface WxCouponSendMapper extends CommonMapper<WxCouponSend, String> {


List<WxCouponSendVo> findListVo(WxCouponSend wxCouponSend); List<WxCouponSendVo> findListVo(WxCouponSend wxCouponSend);
List<WxCouponSendVo> findListVoFilterName(WxCouponSend wxCouponSend);
List<WxCouponSendVo> findListVoByNameAndDate(WxCouponSend wxCouponSend);


void updateStatusByCouponId(WxCouponSend wxCouponSend); void updateStatusByCouponId(WxCouponSend wxCouponSend);




+ 6
- 0
mallinkService/src/main/java/com/iformall/service/WxCouponSendService.java Просмотреть файл

@@ -34,6 +34,12 @@ public interface WxCouponSendService {
*/ */
void saveOrUpdate(WxCouponSend record); void saveOrUpdate(WxCouponSend record);


/**
* 更新为无效
* @param record
*/
void updateInvalid(WxCouponSend record) ;

/** /**
* 根据Id删除实体 * 根据Id删除实体
* *


+ 1
- 1
mallinkService/src/main/java/com/iformall/service/WxCouponService.java Просмотреть файл

@@ -213,7 +213,7 @@ public interface WxCouponService {
void reduceRemainInventory(Long id, Integer remainInventory, Integer number); void reduceRemainInventory(Long id, Integer remainInventory, Integer number);


/** /**
* 库存退
* 库存退
* *
* @param id 券ID * @param id 券ID
* @param remainInventory 当前库存 * @param remainInventory 当前库存


+ 50
- 74
mallinkService/src/main/java/com/iformall/service/impl/WxCouponSendServiceImpl.java Просмотреть файл

@@ -7,7 +7,6 @@ import com.github.pagehelper.PageInfo;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.iformall.common.ErrorCode; import com.iformall.common.ErrorCode;
import com.iformall.common.IdWorker; import com.iformall.common.IdWorker;
import com.iformall.common.ResultData;
import com.iformall.domain.po.*; import com.iformall.domain.po.*;
import com.iformall.domain.po.msg.AppUniformMsg; import com.iformall.domain.po.msg.AppUniformMsg;
import com.iformall.domain.po.msg.MpAppMsg; import com.iformall.domain.po.msg.MpAppMsg;
@@ -26,7 +25,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;


@@ -34,7 +32,7 @@ import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;


@Service @Service
public class WxCouponSendServiceImpl implements WxCouponSendService {
public class WxCouponSendServiceImpl implements WxCouponSendService {
private final Logger logger = LoggerFactory.getLogger(this.getClass()); private final Logger logger = LoggerFactory.getLogger(this.getClass());


@Autowired @Autowired
@@ -71,7 +69,7 @@ public class WxCouponSendServiceImpl implements WxCouponSendService {
PageInfo<WxCouponSendVo> pageInfo; PageInfo<WxCouponSendVo> pageInfo;
//设置商户购买券数 //设置商户购买券数
if (Objects.equals(EnumCouponSendSendType.MERCHANT.getCode(), record.getSendType())) { if (Objects.equals(EnumCouponSendSendType.MERCHANT.getCode(), record.getSendType())) {
pageInfo = PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCouponSendMapper.findListVoFilterName(record));
pageInfo = PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxCouponSendMapper.findListVoByNameAndDate(record));
for (WxCouponSendVo cs : pageInfo.getList()) { for (WxCouponSendVo cs : pageInfo.getList()) {
JSONObject jo = JSONObject.parseObject(cs.getConditions()); JSONObject jo = JSONObject.parseObject(cs.getConditions());
int inventory = jo.getInteger(WxCouponSend.KEY_MERCHANT_LNVENTORY); int inventory = jo.getInteger(WxCouponSend.KEY_MERCHANT_LNVENTORY);
@@ -98,22 +96,23 @@ public class WxCouponSendServiceImpl implements WxCouponSendService {
record.setConditions(config.getConditions()); record.setConditions(config.getConditions());
} }
} }

//商户卡库存校验 //商户卡库存校验
if(Objects.equals(record.getSendType(),EnumCouponSendSendType.MERCHANT.getCode())) { if(Objects.equals(record.getSendType(),EnumCouponSendSendType.MERCHANT.getCode())) {
JSONObject jo = JSONObject.parseObject(record.getConditions()) ; JSONObject jo = JSONObject.parseObject(record.getConditions()) ;
if(Objects.isNull(jo)||!jo.containsKey(WxCouponSend.KEY_MERCHANT_LNVENTORY)) { if(Objects.isNull(jo)||!jo.containsKey(WxCouponSend.KEY_MERCHANT_LNVENTORY)) {
throw new BizMessageException(ErrorCode.COUPON_SEND_LIMIT_VERIFY.getMessage()) ;
throw new MallinkException(ErrorCode.COUPON_SEND_LIMIT_VERIFY) ;
} }
//查询总库存
WxCoupon queryById = new WxCoupon() ; WxCoupon queryById = new WxCoupon() ;
queryById.setId(record.getId());
queryById.setId(record.getCouponId());
WxCoupon wxCouponOfDb = wxCouponService.findById(queryById); WxCoupon wxCouponOfDb = wxCouponService.findById(queryById);
if(Objects.isNull(wxCouponOfDb)) { if(Objects.isNull(wxCouponOfDb)) {
throw new BizMessageException(ErrorCode.COUPON_IS_EMPTY.getMessage()) ;
throw new MallinkException(ErrorCode.COUPON_IS_EMPTY) ;
} }
int merchantLnventory = jo.getInteger(WxCouponSend.KEY_MERCHANT_LNVENTORY) ; int merchantLnventory = jo.getInteger(WxCouponSend.KEY_MERCHANT_LNVENTORY) ;
//商家购券数不能大于总库存
if(merchantLnventory > wxCouponOfDb.getRemainInventory()) { if(merchantLnventory > wxCouponOfDb.getRemainInventory()) {
throw new BizMessageException(ErrorCode.REMAIN_IS_EMPTY.getMessage()) ;
throw new MallinkException(ErrorCode.REMAIN_IS_EMPTY) ;
} }
//更新库存 //更新库存
wxCouponService.reduceRemainInventory(wxCouponOfDb.getId(),wxCouponOfDb.getRemainInventory(),merchantLnventory); wxCouponService.reduceRemainInventory(wxCouponOfDb.getId(),wxCouponOfDb.getRemainInventory(),merchantLnventory);
@@ -128,52 +127,29 @@ public class WxCouponSendServiceImpl implements WxCouponSendService {
} }
} }


/**
* 会员生日券处理
*
* @param record
* @return
*/
private WxCouponSend buildConditions(WxCouponSend record) {
if (!Objects.equals(record.getSendType(), EnumCouponSendSendType.BIRTHDAY.getCode())) {
return record;
}

//添加会员生日券
JSONObject conditions = JSONObject.parseObject(record.getConditions());
Long couponId = record.getCouponId();
if (Objects.nonNull(couponId)) {
JSONArray couponIds;
if (Objects.isNull(record.getId())) {
//添加默认值
if (Objects.isNull(record.getTitle())) {
record.setTitle("");
}
if (Objects.isNull(record.getCouponId())) {
record.setCouponId(0L);
}
//添加新卡券
couponIds = new JSONArray();
couponIds.add(couponId);
} else {
//更新卡券列表
WxCouponSend couponSend = wxCouponSendMapper.selectByPrimaryKey(record.getId());
conditions = JSONObject.parseObject(couponSend.getConditions());
couponIds = conditions.getJSONArray(WxCouponSend.KEY_COUPONIDS);
if (Objects.isNull(couponIds)) {
couponIds = new JSONArray();
couponIds.add(couponId);
} else {
//添加新卡券
if (!couponIds.contains(couponId)) {
couponIds.add(couponId);
}
}
@Override
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = {Exception.class})
public void updateInvalid(WxCouponSend record) {
record.setStatus(EnumCouponSendStatus.INVALID.getCode());
record.setUpdateDate(new Date());
if(Objects.equals(record.getSendType(),EnumCouponSendSendType.MERCHANT.getCode())) {
//查询总库存
WxCoupon queryById = new WxCoupon() ;
queryById.setId(record.getCouponId());
WxCoupon wxCouponOfDb = wxCouponService.findById(queryById);
if(Objects.isNull(wxCouponOfDb)) {
throw new MallinkException(ErrorCode.COUPON_IS_EMPTY) ;
}
//查询商家
JSONObject jo = JSONObject.parseObject(record.getConditions()) ;
if(Objects.isNull(jo)||!jo.containsKey(WxCouponSend.KEY_MERCHANT_LNVENTORY)) {
throw new MallinkException(ErrorCode.COUPON_SEND_LIMIT_VERIFY) ;
} }
conditions.put(WxCouponSend.KEY_COUPONIDS, couponIds);
int merchantLnventory = jo.getInteger(WxCouponSend.KEY_MERCHANT_LNVENTORY) ;
//退回库存
wxCouponService.backRemainInventory(queryById.getId(),wxCouponOfDb.getRemainInventory(),merchantLnventory);
} }
record.setConditions(conditions.toJSONString());
return record;
wxCouponSendMapper.updateByPrimaryKeySelective(record);
} }


@Override @Override
@@ -496,34 +472,30 @@ public class WxCouponSendServiceImpl implements WxCouponSendService {


@Override @Override
public void saveOrUpdateConfig(Integer beforeDays, Integer sendType, String tenantId) { public void saveOrUpdateConfig(Integer beforeDays, Integer sendType, String tenantId) {
WxCouponSend couponSendQuery = new WxCouponSend();
couponSendQuery.setSendType(sendType);
couponSendQuery.setTenantId(tenantId);
List<WxCouponSend> wxCouponSendList = wxCouponSendMapper.select(couponSendQuery);
if (CollectionUtils.isEmpty(wxCouponSendList)) {
WxCouponSend couponSend = new WxCouponSend();
couponSend.setTitle(EnumCouponSendSendType.BIRTHDAY.getMessage()+"配置信息 ");
couponSend.setCouponId(0L);
couponSend.setSendType(sendType);
WxCouponSend config = getConfig(sendType, tenantId) ;
if (Objects.isNull(config)) {
WxCouponSend couponSendQuery = new WxCouponSend();
couponSendQuery.setSendType(sendType);
couponSendQuery.setTenantId(tenantId);
couponSendQuery.setCouponId(0L);
couponSendQuery.setTitle(EnumCouponSendSendType.BIRTHDAY.getMessage()+"配置信息 ");
final IdWorker idWorker = IdWorker.get(); final IdWorker idWorker = IdWorker.get();
couponSend.setId(idWorker.nextId());
couponSend.setTenantId(tenantId);
couponSend.setStatus(EnumCouponSendStatus.INVALID.getCode());
couponSend.setCreateDate(new Date());
couponSendQuery.setId(idWorker.nextId());
couponSendQuery.setStatus(EnumCouponSendStatus.INVALID.getCode());
couponSendQuery.setCreateDate(new Date());
JSONObject couponSendJo = new JSONObject(); JSONObject couponSendJo = new JSONObject();
couponSendJo.put(WxCouponSend.KEY_BEFOREDAYS, beforeDays); couponSendJo.put(WxCouponSend.KEY_BEFOREDAYS, beforeDays);
couponSend.setConditions(couponSendJo.toJSONString());
wxCouponSendMapper.insertSelective(couponSend);
couponSendQuery.setConditions(couponSendJo.toJSONString());
wxCouponSendMapper.insertSelective(couponSendQuery);
} else { } else {
WxCouponSend couponSend = wxCouponSendList.get(0);
JSONObject couponSendJo = JSONObject.parseObject(couponSend.getConditions());
JSONObject couponSendJo = JSONObject.parseObject(config.getConditions());
if(Objects.isNull(couponSendJo)) { if(Objects.isNull(couponSendJo)) {
couponSendJo = new JSONObject(); couponSendJo = new JSONObject();
} }
couponSendJo.put(WxCouponSend.KEY_BEFOREDAYS, beforeDays); couponSendJo.put(WxCouponSend.KEY_BEFOREDAYS, beforeDays);
couponSend.setConditions(couponSendJo.toJSONString());
couponSend.setUpdateDate(new Date());
wxCouponSendMapper.updateBirthdayConfig(couponSend);
config.setConditions(couponSendJo.toJSONString());
config.setUpdateDate(new Date());
wxCouponSendMapper.updateBirthdayConfig(config);
} }
} }


@@ -537,7 +509,11 @@ public class WxCouponSendServiceImpl implements WxCouponSendService {
couponSendQuery.setStatus(EnumCouponSendStatus.INVALID.getCode()); couponSendQuery.setStatus(EnumCouponSendStatus.INVALID.getCode());
List<WxCouponSend> wxCouponSendList = wxCouponSendMapper.select(couponSendQuery); List<WxCouponSend> wxCouponSendList = wxCouponSendMapper.select(couponSendQuery);
if (CollectionUtils.isEmpty(wxCouponSendList)) { if (CollectionUtils.isEmpty(wxCouponSendList)) {
return null;
//默认配置
JSONObject couponSendJo = new JSONObject();
couponSendJo.put(WxCouponSend.KEY_BEFOREDAYS, 0);
couponSendQuery.setConditions(couponSendJo.toJSONString());
return couponSendQuery;
} }
return wxCouponSendList.get(0); return wxCouponSendList.get(0);
} }


+ 21
- 7
mallinkService/src/main/resources/mapper/WxCouponSendMapper.xml Просмотреть файл

@@ -77,6 +77,15 @@
and cs.update_date = #{updateDate} and cs.update_date = #{updateDate}


</if> </if>
<if test=" null != merchantName and ''!=merchantName">
and cs.conditions -> '$.title' like concat('%',#{merchantName},'%')
</if>
<if test=" null != merchantId and ''!=merchantId ">
and cs.conditions->'$.id' = concat(#{merchantId},'')
</if>
<if test=" null != merchantLnventory ">
and cs.conditions -> '$.merchantLnventory'> #{merchantLnventory}
</if>
<if test=" null != ids "> <if test=" null != ids ">
and id in and id in
<foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")"> <foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")">
@@ -87,9 +96,6 @@
and cs.send_sms = #{sendSms} and cs.send_sms = #{sendSms}
</if> </if>
<if test=" null != merchantLnventory ">
and c.remain_inventory > #{merchantLnventory}
</if>
<if test=" null != sortColumns"> order by ${sortColumns} </if> <if test=" null != sortColumns"> order by ${sortColumns} </if>
</sql> </sql>


@@ -98,14 +104,22 @@
<include refid="dynamicWhereConditions" /> <include refid="dynamicWhereConditions" />
</select> </select>


<select id="findListVoFilterName" parameterType="com.iformall.domain.vo.WxCouponSendVo" resultMap="BaseResultMap">
<select id="findListVoByNameAndDate" parameterType="com.iformall.domain.vo.WxCouponSendVo" resultMap="BaseResultMap">
select tt.* from (select select tt.* from (select
<include refid="allColumns"/> <include refid="allColumns"/>
from wx_coupon_send cs left join wx_coupon c on c.id = cs.coupon_id from wx_coupon_send cs left join wx_coupon c on c.id = cs.coupon_id
<include refid="dynamicWhereConditions"/>) as tt <include refid="dynamicWhereConditions"/>) as tt
<if test=" null != merchantName ">
where tt.conditions like concat('%', #{merchantName},'%')
</if>
where 1=1
<choose>
<when test="expired == 0">
and <![CDATA[ tt.valid_end_date <= now() ]]>
</when>
<when test="expired == 1">
and <![CDATA[ tt.valid_end_date > now() ]]>
</when>
<otherwise>
</otherwise>
</choose>
</select> </select>


<update id="updateStatusByCouponId" parameterType="com.iformall.domain.po.WxCouponChannel"> <update id="updateStatusByCouponId" parameterType="com.iformall.domain.po.WxCouponChannel">


Загрузка…
Отмена
Сохранить