记得上下班打卡 | git大法好,push需谨慎

Commit d0135070 authored by 张国柄's avatar 张国柄

~API:商铺活动:优惠券库存编辑、导出;

parent 2e0573bd
...@@ -19,6 +19,22 @@ public interface IGoblinstoreMgtCouponService { ...@@ -19,6 +19,22 @@ public interface IGoblinstoreMgtCouponService {
*/ */
PagedResult<GoblinStoreMgtCouponListVo> couponList(GoblinStoreMgtCouponFilterParam mgtCouponFilterParam); PagedResult<GoblinStoreMgtCouponListVo> couponList(GoblinStoreMgtCouponFilterParam mgtCouponFilterParam);
/**
* 商铺活动:优惠券启用/停用
*
* @param mgtCouponActionParam GoblinStoreMgtCouponActionParam
* @param uid UID
*/
void couponActivityProcessing(GoblinStoreMgtCouponActionParam mgtCouponActionParam, String uid);
/**
* 商铺活动:删除优惠券
*
* @param mgtCouponActionParam GoblinStoreMgtCouponActionParam
* @param uid UID
*/
void couponRemove(GoblinStoreMgtCouponActionParam mgtCouponActionParam, String uid);
/** /**
* 商铺活动:优惠券添加 * 商铺活动:优惠券添加
* *
...@@ -55,20 +71,4 @@ public interface IGoblinstoreMgtCouponService { ...@@ -55,20 +71,4 @@ public interface IGoblinstoreMgtCouponService {
* @return boolean * @return boolean
*/ */
boolean couponEditStock(GoblinStoreCouponVo storeCouponVo, String uid, int operStock); boolean couponEditStock(GoblinStoreCouponVo storeCouponVo, String uid, int operStock);
/**
* 商铺活动:优惠券启用/停用
*
* @param mgtCouponActionParam GoblinStoreMgtCouponActionParam
* @param uid UID
*/
void couponActivityProcessing(GoblinStoreMgtCouponActionParam mgtCouponActionParam, String uid);
/**
* 商铺活动:删除优惠券
*
* @param mgtCouponActionParam GoblinStoreMgtCouponActionParam
* @param uid UID
*/
void couponRemove(GoblinStoreMgtCouponActionParam mgtCouponActionParam, String uid);
} }
package com.liquidnet.service.goblin.controller.manage; package com.liquidnet.service.goblin.controller.manage;
import com.alibaba.excel.EasyExcel;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.github.xiaoymin.knife4j.annotations.ApiSupport; import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.liquidnet.common.exception.constant.ErrorCode; import com.liquidnet.common.exception.constant.ErrorCode;
...@@ -8,16 +9,20 @@ import com.liquidnet.commons.lang.util.JsonUtils; ...@@ -8,16 +9,20 @@ import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.base.ErrorMapping; import com.liquidnet.service.base.ErrorMapping;
import com.liquidnet.service.base.PagedResult; import com.liquidnet.service.base.PagedResult;
import com.liquidnet.service.base.ResponseDto; import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.goblin.dto.GoblinStoreMgtCouponListVoExcel;
import com.liquidnet.service.goblin.dto.GoblinStoreMgtGoodsListVoExcel;
import com.liquidnet.service.goblin.dto.manage.GoblinStoreMgtCouponActionParam; import com.liquidnet.service.goblin.dto.manage.GoblinStoreMgtCouponActionParam;
import com.liquidnet.service.goblin.dto.manage.GoblinStoreMgtCouponAddParam; import com.liquidnet.service.goblin.dto.manage.GoblinStoreMgtCouponAddParam;
import com.liquidnet.service.goblin.dto.manage.GoblinStoreMgtCouponFilterParam; import com.liquidnet.service.goblin.dto.manage.GoblinStoreMgtCouponFilterParam;
import com.liquidnet.service.goblin.dto.manage.vo.GoblinStoreMgtCouponInfoVo; import com.liquidnet.service.goblin.dto.manage.vo.GoblinStoreMgtCouponInfoVo;
import com.liquidnet.service.goblin.dto.manage.vo.GoblinStoreMgtCouponListVo; import com.liquidnet.service.goblin.dto.manage.vo.GoblinStoreMgtCouponListVo;
import com.liquidnet.service.goblin.dto.manage.vo.GoblinStoreMgtGoodsListVo;
import com.liquidnet.service.goblin.dto.vo.GoblinStoreCouponBasicVo; import com.liquidnet.service.goblin.dto.vo.GoblinStoreCouponBasicVo;
import com.liquidnet.service.goblin.dto.vo.GoblinStoreCouponVo; import com.liquidnet.service.goblin.dto.vo.GoblinStoreCouponVo;
import com.liquidnet.service.goblin.service.manage.IGoblinstoreMgtCouponService; import com.liquidnet.service.goblin.service.manage.IGoblinstoreMgtCouponService;
import com.liquidnet.service.goblin.util.GoblinMongoUtils; import com.liquidnet.service.goblin.util.GoblinMongoUtils;
import com.liquidnet.service.goblin.util.GoblinRedisUtils; import com.liquidnet.service.goblin.util.GoblinRedisUtils;
import com.liquidnet.service.goblin.util.ObjectUtil;
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;
...@@ -29,9 +34,12 @@ import org.springframework.util.CollectionUtils; ...@@ -29,9 +34,12 @@ import org.springframework.util.CollectionUtils;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid; import javax.validation.Valid;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.List; import java.util.List;
@ApiSupport(order = 149006) @ApiSupport(order = 149006)
...@@ -65,21 +73,46 @@ public class GoblinStoreMgtCouponController { ...@@ -65,21 +73,46 @@ public class GoblinStoreMgtCouponController {
@ApiOperationSupport(order = 2) @ApiOperationSupport(order = 2)
@ApiOperation(value = "优惠券导出", notes = "#以POST模拟FORM表单请求该接口") @ApiOperation(value = "优惠券导出", notes = "#以POST模拟FORM表单请求该接口")
@PostMapping("export") @PostMapping("export")
public void export(@Valid GoblinStoreMgtCouponFilterParam mgtCouponFilterParam) { public void export(@Valid GoblinStoreMgtCouponFilterParam mgtCouponFilterParam, HttpServletResponse response) {
String currentUid = CurrentUtil.getCurrentUid();
try {
if (!goblinRedisUtils.hasStoreId(currentUid, mgtCouponFilterParam.getStoreId())) {
log.warn("商铺活动:优惠券导出:无权操作该店铺,请核实[UID={},GoblinStoreMgtCouponFilterParam={}]", currentUid, JsonUtils.toJson(mgtCouponFilterParam));
return;
}
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("商铺活动:优惠券导出:[mgtCouponFilterParam={}]", JsonUtils.toJson(mgtCouponFilterParam)); log.debug("商铺活动:优惠券导出:[mgtCouponFilterParam={}]", JsonUtils.toJson(mgtCouponFilterParam));
} }
mgtCouponFilterParam.setPageNum(1);
mgtCouponFilterParam.setPageSize(2000);
PagedResult<GoblinStoreMgtCouponListVo> pagedResult = goblinstoreMgtCouponService.couponList(mgtCouponFilterParam);
List<GoblinStoreMgtCouponListVo> rows = pagedResult.getList();
List<GoblinStoreMgtCouponListVoExcel> rowsToExcels = ObjectUtil.getGoblinStoreMgtCouponListVoExcelArrayList();
rows.forEach(row -> rowsToExcels.add(GoblinStoreMgtCouponListVoExcel.getNew().copy(row)));
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
String fileName = URLEncoder.encode("商铺活动-优惠券数据", "UTF-8").replaceAll("\\+", "%20");
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
EasyExcel.write(response.getOutputStream(), GoblinStoreMgtGoodsListVoExcel.class).sheet("优惠券活动").doWrite(rowsToExcels);
} catch (
IOException e) {
log.error("商品管理:SPU导出:异常[UID={},ex.msg={}]", currentUid, e.getLocalizedMessage());
}
} }
@ApiOperationSupport(order = 3) @ApiOperationSupport(order = 3)
@ApiOperation(value = "优惠券管理", notes = "#以POST模拟FORM表单请求该接口") @ApiOperation(value = "优惠券管理")
@PostMapping("action") @PostMapping("action")
public ResponseDto<Object> action(@Valid GoblinStoreMgtCouponActionParam mgtCouponActionParam) { public ResponseDto<Object> action(@Valid @RequestBody GoblinStoreMgtCouponActionParam mgtCouponActionParam) {
String currentUid = CurrentUtil.getCurrentUid(); String currentUid = CurrentUtil.getCurrentUid();
if (!goblinRedisUtils.hasStoreId(currentUid, mgtCouponActionParam.getStoreId())) { if (!goblinRedisUtils.hasStoreId(currentUid, mgtCouponActionParam.getStoreId())) {
return ResponseDto.failure(ErrorMapping.get("149002")); return ResponseDto.failure(ErrorMapping.get("149002"));
} }
if (CollectionUtils.isEmpty(mgtCouponActionParam.getStoreCouponIdList())) { List<String> storeCouponIdList = mgtCouponActionParam.getStoreCouponIdList();
if (CollectionUtils.isEmpty(storeCouponIdList)) {
return ResponseDto.failure(ErrorCode.HTTP_PARAM_ERROR.getCode(), "请选择优惠券操作"); return ResponseDto.failure(ErrorCode.HTTP_PARAM_ERROR.getCode(), "请选择优惠券操作");
} }
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
...@@ -88,10 +121,39 @@ public class GoblinStoreMgtCouponController { ...@@ -88,10 +121,39 @@ public class GoblinStoreMgtCouponController {
switch (mgtCouponActionParam.getAction()) {//ENABLED|DISABLED|REMOVE switch (mgtCouponActionParam.getAction()) {//ENABLED|DISABLED|REMOVE
case "ENABLED": case "ENABLED":
for (String storeCouponId : storeCouponIdList) {
GoblinStoreCouponVo storeCouponVo = goblinRedisUtils.getStoreCouponVo(storeCouponId);
if (null == storeCouponVo) {
return ResponseDto.failure(ErrorCode.HTTP_PARAM_ERROR.getCode(), "参数有误:优惠券不存在");
}
if (!storeCouponVo.getState().equals("3")) {// 只针对停用的优惠券
return ResponseDto.failure(ErrorCode.HTTP_PARAM_ERROR.getCode(), "只限已停用状态执行该操作");
}
}
goblinstoreMgtCouponService.couponActivityProcessing(mgtCouponActionParam, currentUid);
break;
case "DISABLED": case "DISABLED":
for (String storeCouponId : storeCouponIdList) {
GoblinStoreCouponVo storeCouponVo = goblinRedisUtils.getStoreCouponVo(storeCouponId);
if (null == storeCouponVo) {
return ResponseDto.failure(ErrorCode.HTTP_PARAM_ERROR.getCode(), "参数有误:优惠券不存在");
}
if (storeCouponVo.getState().equals("3")) {// 该优惠券已停用
return ResponseDto.failure(ErrorCode.HTTP_PARAM_ERROR.getCode(), "该优惠券已停用");
}
}
goblinstoreMgtCouponService.couponActivityProcessing(mgtCouponActionParam, currentUid); goblinstoreMgtCouponService.couponActivityProcessing(mgtCouponActionParam, currentUid);
break; break;
case "REMOVE": case "REMOVE":
for (String storeCouponId : storeCouponIdList) {
GoblinStoreCouponVo storeCouponVo = goblinRedisUtils.getStoreCouponVo(storeCouponId);
if (null == storeCouponVo) {
return ResponseDto.failure(ErrorCode.HTTP_PARAM_ERROR.getCode(), "参数有误:优惠券不存在");
}
if (storeCouponVo.getState().equals("1")) {// 活动中不可删除
return ResponseDto.failure(ErrorCode.HTTP_PARAM_ERROR.getCode(), "活动中不允许删除,请停用或活动结束后操作");
}
}
goblinstoreMgtCouponService.couponRemove(mgtCouponActionParam, currentUid); goblinstoreMgtCouponService.couponRemove(mgtCouponActionParam, currentUid);
break; break;
default: default:
...@@ -207,7 +269,8 @@ public class GoblinStoreMgtCouponController { ...@@ -207,7 +269,8 @@ public class GoblinStoreMgtCouponController {
if (storeCouponVo.getUseScope().equals("1")) { if (storeCouponVo.getUseScope().equals("1")) {
beforeSpuIdList = goblinRedisUtils.getStoreCouponSpuIds(storeCouponId); beforeSpuIdList = goblinRedisUtils.getStoreCouponSpuIds(storeCouponId);
} }
return ResponseDto.success(goblinstoreMgtCouponService.couponEdit(currentUid, storeCouponBasicVo, beforeSpuIdList)); boolean resultFlg = goblinstoreMgtCouponService.couponEdit(currentUid, storeCouponBasicVo, beforeSpuIdList);
return resultFlg ? ResponseDto.success() : ResponseDto.failure();
} }
@ApiOperationSupport(order = 7) @ApiOperationSupport(order = 7)
...@@ -236,11 +299,10 @@ public class GoblinStoreMgtCouponController { ...@@ -236,11 +299,10 @@ public class GoblinStoreMgtCouponController {
return ResponseDto.failure(ErrorCode.HTTP_PARAM_ERROR.getCode(), "参数无效:增减库存不能为0"); return ResponseDto.failure(ErrorCode.HTTP_PARAM_ERROR.getCode(), "参数无效:增减库存不能为0");
} }
int operStockVal = Math.abs(operStock), surplusStock = goblinRedisUtils.getStoreCouponStock(storeCouponId); int operStockVal = Math.abs(operStock), surplusStock = goblinRedisUtils.getStoreCouponStock(storeCouponId);
if (operStock < 0 && operStockVal > surplusStock) { if (operStock < 0 && (operStockVal > surplusStock || operStockVal > storeCouponVo.getStock())) {
return ResponseDto.failure(ErrorCode.HTTP_PARAM_ERROR.getCode(), "参数无效:该优惠券当前剩余库存为" + surplusStock); return ResponseDto.failure(ErrorCode.HTTP_PARAM_ERROR.getCode(), String.format("参数无效:该优惠券总库存%s,剩余库存%s", storeCouponVo.getStock(), surplusStock));
} }
log.info("商铺活动:优惠券库存编辑:[storeId={},storeCouponId={},operStock={},uid={}]", storeId, storeCouponId, operStock, currentUid); boolean resultFlg = goblinstoreMgtCouponService.couponEditStock(storeCouponVo, currentUid, operStock);
return resultFlg ? ResponseDto.success() : ResponseDto.failure();
return ResponseDto.success();
} }
} }
...@@ -82,20 +82,13 @@ public class GoblinStoreMgtGoodsController { ...@@ -82,20 +82,13 @@ public class GoblinStoreMgtGoodsController {
public void export(@Valid GoblinStoreMgtGoodsFilterParam storeMgtGoodsFilterParam, HttpServletResponse response) { public void export(@Valid GoblinStoreMgtGoodsFilterParam storeMgtGoodsFilterParam, HttpServletResponse response) {
String currentUid = CurrentUtil.getCurrentUid(); String currentUid = CurrentUtil.getCurrentUid();
try { try {
List<String> storeIds = goblinRedisUtils.getStoreIds(currentUid); if (!goblinRedisUtils.hasStoreId(currentUid, storeMgtGoodsFilterParam.getStoreId())) {
String storeId = storeMgtGoodsFilterParam.getStoreId(); log.warn("商品管理:SPU导出:无权操作该店铺,请核实[UID={},GoblinStoreMgtGoodsFilterParam={}]", currentUid, JsonUtils.toJson(storeMgtGoodsFilterParam));
boolean storeIdIsBlank = StringUtils.isBlank(storeId);
if (CollectionUtils.isEmpty(storeIds) || (
!storeIdIsBlank && !goblinRedisUtils.hasStoreId(currentUid, storeId)
)) {
return; return;
} }
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("商品管理:SPU导出:[UID={},GoblinStoreMgtGoodsFilterParam={}]", currentUid, JsonUtils.toJson(storeMgtGoodsFilterParam)); log.debug("商品管理:SPU导出:[UID={},GoblinStoreMgtGoodsFilterParam={}]", currentUid, JsonUtils.toJson(storeMgtGoodsFilterParam));
} }
if (storeIdIsBlank) {
storeMgtGoodsFilterParam.setStoreId(storeIds.get(0));
}
storeMgtGoodsFilterParam.setPageNum(1); storeMgtGoodsFilterParam.setPageNum(1);
storeMgtGoodsFilterParam.setPageSize(2000); storeMgtGoodsFilterParam.setPageSize(2000);
......
package com.liquidnet.service.goblin.dto;
import com.alibaba.excel.annotation.ExcelProperty;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.service.goblin.dto.manage.vo.GoblinStoreMgtCouponListVo;
import com.liquidnet.service.goblin.dto.manage.vo.GoblinStoreMgtGoodsListVo;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import org.apache.commons.lang3.StringUtils;
import java.io.Serializable;
@Getter
@Setter
@EqualsAndHashCode
public class GoblinStoreMgtCouponListVoExcel implements Serializable, Cloneable {
private static final long serialVersionUID = 3264197773499339729L;
@ExcelProperty("卡券编码")
private String storeCouponNo;
@ExcelProperty("卡券名称")
private String title;
@ExcelProperty("卡券状态")
private String state;
@ExcelProperty("开始时间")
private String startTime;
@ExcelProperty("结束时间")
private String endTime;
@ExcelProperty("创建时间")
private String createdAt;
@ExcelProperty("已领取库存")
private Integer receiveStock;
@ExcelProperty("已使用库存")
private Integer usedStock;
@ExcelProperty("总库存")
private Integer stock;
private static final GoblinStoreMgtCouponListVoExcel obj = new GoblinStoreMgtCouponListVoExcel();
public static GoblinStoreMgtCouponListVoExcel getNew() {
try {
return (GoblinStoreMgtCouponListVoExcel) obj.clone();
} catch (CloneNotSupportedException e) {
return new GoblinStoreMgtCouponListVoExcel();
}
}
public GoblinStoreMgtCouponListVoExcel copy(GoblinStoreMgtCouponListVo source) {
if (null == source) return this;
this.setStoreCouponNo(source.getStoreCouponNo());
this.setTitle(source.getTitle());
switch (source.getState()) {
case "0":
this.setState("等待开始");break;
case "1":
this.setState("活动中");break;
case "2":
this.setState("活动结束");break;
case "3":
this.setState("已上架");break;
default:
this.setState("停用");break;
}
DateUtil.Formatter yyyyMMddHHmmss = DateUtil.Formatter.yyyyMMddHHmmss;
this.setStartTime(yyyyMMddHHmmss.format(source.getStartTime()));
this.setEndTime(yyyyMMddHHmmss.format(source.getEndTime()));
this.setCreatedAt(yyyyMMddHHmmss.format(source.getCreatedAt()));
this.setReceiveStock(source.getReceiveStock());
this.setUsedStock(source.getUsedStock());
this.setStock(source.getStock());
return this;
}
}
...@@ -57,6 +57,59 @@ public class GoblinStoreMgtCouponServiceImpl implements IGoblinstoreMgtCouponSer ...@@ -57,6 +57,59 @@ public class GoblinStoreMgtCouponServiceImpl implements IGoblinstoreMgtCouponSer
return mgtCouponListVoPagedResult; return mgtCouponListVoPagedResult;
} }
@Override
public void couponActivityProcessing(GoblinStoreMgtCouponActionParam mgtCouponActionParam, String uid) {
LocalDateTime now = LocalDateTime.now();
String storeId = mgtCouponActionParam.getStoreId();
String state = mgtCouponActionParam.getAction().equals("DISABLED") ? "3" : "0";
List<String> storeCouponIdList = mgtCouponActionParam.getStoreCouponIdList();
if (goblinMongoUtils.activityMgtStoreCouponBasicVo(uid, now, state, storeCouponIdList)) {
storeCouponIdList.forEach(storeCouponId -> goblinRedisUtils.del(GoblinRedisConst.STORE_COUPON.concat(storeCouponId)));// 删除REDIS缓存
List<GoblinStoreMarketDto> storeMarketDtos = goblinRedisUtils.getStoreMarketDtos(storeId);
if (!CollectionUtils.isEmpty(storeMarketDtos)) {
int beforeSize = storeMarketDtos.size();
storeMarketDtos.removeIf(dto -> (dto.getType() == 1 && storeCouponIdList.contains(dto.getId())));
if (beforeSize > storeMarketDtos.size()) {
goblinRedisUtils.setStoreMarketDtos(storeId, storeMarketDtos);
}
}
LinkedList<Object[]> activityStoreCouponObjs = CollectionUtil.linkedListObjectArr();
storeCouponIdList.forEach(storeCouponId -> activityStoreCouponObjs.add(new Object[]{state, uid, now, storeCouponId}));
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.SQL_STORE.getKey(),
SqlMapping.get("goblin_store_coupon.activity", activityStoreCouponObjs));
}
}
@Override
public void couponRemove(GoblinStoreMgtCouponActionParam mgtCouponActionParam, String uid) {
LocalDateTime now = LocalDateTime.now();
String storeId = mgtCouponActionParam.getStoreId();
List<String> storeCouponIdList = mgtCouponActionParam.getStoreCouponIdList();
if (goblinMongoUtils.delMgtStoreCouponBasicVos(storeCouponIdList, uid, now)) {
storeCouponIdList.forEach(storeCouponId -> goblinRedisUtils.del(GoblinRedisConst.STORE_COUPON.concat(storeCouponId)));// 删除REDIS缓存
List<GoblinStoreMarketDto> storeMarketDtos = goblinRedisUtils.getStoreMarketDtos(storeId);
if (!CollectionUtils.isEmpty(storeMarketDtos)) {
int beforeSize = storeMarketDtos.size();
storeMarketDtos.removeIf(dto -> (dto.getType() == 1 && storeCouponIdList.contains(dto.getId())));
if (beforeSize > storeMarketDtos.size()) {
goblinRedisUtils.setStoreMarketDtos(storeId, storeMarketDtos);
}
}
LinkedList<Object[]> deleteStoreCouponObjs = CollectionUtil.linkedListObjectArr();
storeCouponIdList.forEach(storeCouponId -> deleteStoreCouponObjs.add(new Object[]{uid, now, storeCouponId}));
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.SQL_STORE.getKey(),
SqlMapping.get("goblin_store_coupon.delete", deleteStoreCouponObjs));
}
}
@Override @Override
public void couponAdd(String uid, GoblinStoreCouponBasicVo storeCouponBasicVo) { public void couponAdd(String uid, GoblinStoreCouponBasicVo storeCouponBasicVo) {
String storeCouponId = IDGenerator.nextMilliId(); String storeCouponId = IDGenerator.nextMilliId();
...@@ -133,10 +186,10 @@ public class GoblinStoreMgtCouponServiceImpl implements IGoblinstoreMgtCouponSer ...@@ -133,10 +186,10 @@ public class GoblinStoreMgtCouponServiceImpl implements IGoblinstoreMgtCouponSer
updateStoreCouponObjs.add(new Object[]{ updateStoreCouponObjs.add(new Object[]{
storeCouponBasicVo.getTitle(), storeCouponBasicVo.getLabel(), storeCouponBasicVo.getNotice(), storeCouponBasicVo.getTitle(), storeCouponBasicVo.getLabel(), storeCouponBasicVo.getNotice(),
storeCouponBasicVo.getType(), storeCouponBasicVo.getTriggers(), storeCouponBasicVo.getValFace(), storeCouponBasicVo.getType(), storeCouponBasicVo.getTriggers(), storeCouponBasicVo.getValFace(),
storeCouponBasicVo.getDiscount(), storeCouponBasicVo.getValOver(),storeCouponBasicVo.getValMinus(), storeCouponBasicVo.getDiscount(), storeCouponBasicVo.getValOver(), storeCouponBasicVo.getValMinus(),
storeCouponBasicVo.getDeduction(), storeCouponBasicVo.getReceiveLimit(),storeCouponBasicVo.getReceiveCurb(), storeCouponBasicVo.getDeduction(), storeCouponBasicVo.getReceiveLimit(), storeCouponBasicVo.getReceiveCurb(),
storeCouponBasicVo.getUseScope(), storeCouponBasicVo.getStartTime(), storeCouponBasicVo.getEndTime(), storeCouponBasicVo.getUseScope(), storeCouponBasicVo.getStartTime(), storeCouponBasicVo.getEndTime(),
storeCouponBasicVo.getUpdatedBy(), storeCouponBasicVo.getUpdatedAt() storeCouponBasicVo.getUpdatedBy(), storeCouponBasicVo.getUpdatedAt(), storeCouponId
}); });
toMqSqls.add(SqlMapping.get("goblin_store_coupon_rule.update_del")); toMqSqls.add(SqlMapping.get("goblin_store_coupon_rule.update_del"));
LinkedList<Object[]> delStoreCouponRuleObjs = CollectionUtil.linkedListObjectArr(); LinkedList<Object[]> delStoreCouponRuleObjs = CollectionUtil.linkedListObjectArr();
...@@ -156,60 +209,28 @@ public class GoblinStoreMgtCouponServiceImpl implements IGoblinstoreMgtCouponSer ...@@ -156,60 +209,28 @@ public class GoblinStoreMgtCouponServiceImpl implements IGoblinstoreMgtCouponSer
@Override @Override
public boolean couponEditStock(GoblinStoreCouponVo storeCouponVo, String uid, int operStock) { public boolean couponEditStock(GoblinStoreCouponVo storeCouponVo, String uid, int operStock) {
String storeCouponId = storeCouponVo.getStoreCouponId();
int stock = storeCouponVo.getStock(), surplusStock, operStockVal = Math.abs(operStock);
if (operStock < 0) {
surplusStock = goblinRedisUtils.decrStoreCouponStock(storeCouponId, operStockVal);
if (surplusStock < 0) {
goblinRedisUtils.incrStoreCouponStock(storeCouponId, operStock);
log.warn("商铺活动:优惠券库存编辑:[storeCouponId={},operStock={},surplusStock={},uid={}]", storeCouponId, operStock, surplusStock, uid);
return false; return false;
} }
stock -= operStockVal;
@Override } else {
public void couponActivityProcessing(GoblinStoreMgtCouponActionParam mgtCouponActionParam, String uid) { surplusStock = goblinRedisUtils.incrStoreCouponStock(storeCouponId, operStockVal);
LocalDateTime now = LocalDateTime.now(); stock += operStockVal;
String storeId = mgtCouponActionParam.getStoreId();
String state = mgtCouponActionParam.getAction().equals("DISABLED") ? "3" : "0";
List<String> storeCouponIdList = mgtCouponActionParam.getStoreCouponIdList();
if (goblinMongoUtils.activityMgtStoreCouponBasicVo(uid, now, state, storeCouponIdList)) {
storeCouponIdList.forEach(storeCouponId -> goblinRedisUtils.del(GoblinRedisConst.STORE_COUPON.concat(storeCouponId)));// 删除REDIS缓存
List<GoblinStoreMarketDto> storeMarketDtos = goblinRedisUtils.getStoreMarketDtos(storeId);
if (!CollectionUtils.isEmpty(storeMarketDtos)) {
int beforeSize = storeMarketDtos.size();
storeMarketDtos.removeIf(dto -> (dto.getType() == 1 && storeCouponIdList.contains(dto.getId())));
if (beforeSize > storeMarketDtos.size()) {
goblinRedisUtils.setStoreMarketDtos(storeId, storeMarketDtos);
}
} }
log.info("商铺活动:优惠券库存编辑:[storeCouponId={},operStock={},surplusStock={},uid={}]", storeCouponId, operStock, surplusStock, uid);
LinkedList<Object[]> activityStoreCouponObjs = CollectionUtil.linkedListObjectArr();
storeCouponIdList.forEach(storeCouponId -> activityStoreCouponObjs.add(new Object[]{state, uid, now, storeCouponId}));
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.SQL_STORE.getKey(),
SqlMapping.get("goblin_store_coupon.activity", activityStoreCouponObjs));
}
}
@Override
public void couponRemove(GoblinStoreMgtCouponActionParam mgtCouponActionParam, String uid) {
LocalDateTime now = LocalDateTime.now(); LocalDateTime now = LocalDateTime.now();
String storeId = mgtCouponActionParam.getStoreId();
List<String> storeCouponIdList = mgtCouponActionParam.getStoreCouponIdList();
if (goblinMongoUtils.delMgtStoreCouponBasicVos(storeCouponIdList, uid, now)) { goblinMongoUtils.updateMgtStoreCouponStock(storeCouponId, stock, uid, now);
storeCouponIdList.forEach(storeCouponId -> goblinRedisUtils.del(GoblinRedisConst.STORE_COUPON.concat(storeCouponId)));// 删除REDIS缓存 goblinRedisUtils.del(GoblinRedisConst.STORE_COUPON.concat(storeCouponId));// 删除REDIS缓存
List<GoblinStoreMarketDto> storeMarketDtos = goblinRedisUtils.getStoreMarketDtos(storeId);
if (!CollectionUtils.isEmpty(storeMarketDtos)) {
int beforeSize = storeMarketDtos.size();
storeMarketDtos.removeIf(dto -> (dto.getType() == 1 && storeCouponIdList.contains(dto.getId())));
if (beforeSize > storeMarketDtos.size()) {
goblinRedisUtils.setStoreMarketDtos(storeId, storeMarketDtos);
}
}
LinkedList<Object[]> deleteStoreCouponObjs = CollectionUtil.linkedListObjectArr();
storeCouponIdList.forEach(storeCouponId -> deleteStoreCouponObjs.add(new Object[]{uid, now, storeCouponId}));
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.SQL_STORE.getKey(), queueUtils.sendMsgByRedis(MQConst.GoblinQueue.SQL_STORE.getKey(),
SqlMapping.get("goblin_store_coupon.delete", deleteStoreCouponObjs)); SqlMapping.get("goblin_store_coupon.update_stock", stock, uid, now, storeCouponId));
} return true;
} }
} }
...@@ -948,6 +948,13 @@ public class GoblinMongoUtils { ...@@ -948,6 +948,13 @@ public class GoblinMongoUtils {
).getModifiedCount() > 0; ).getModifiedCount() > 0;
} }
public boolean updateMgtStoreCouponStock(String storeCouponId, int stock, String uid, LocalDateTime time) {
return mongoTemplate.getCollection(GoblinStoreCouponBasicVo.class.getSimpleName()).updateOne(
Query.query(Criteria.where("storeCouponId").is(storeCouponId).and("delFlg").is("0")).getQueryObject(),
Update.update("stock", stock).set("updatedBy", uid).set("updatedAt", time).getUpdateObject()
).getModifiedCount() > 0;
}
public boolean delMgtStoreCouponBasicVo(String storeCouponId, String uid, LocalDateTime time) { public boolean delMgtStoreCouponBasicVo(String storeCouponId, String uid, LocalDateTime time) {
return mongoTemplate.updateFirst( return mongoTemplate.updateFirst(
Query.query(Criteria.where("storeCouponId").is(storeCouponId).and("delFlg").is("0")), Query.query(Criteria.where("storeCouponId").is(storeCouponId).and("delFlg").is("0")),
......
...@@ -3,6 +3,7 @@ package com.liquidnet.service.goblin.util; ...@@ -3,6 +3,7 @@ package com.liquidnet.service.goblin.util;
import com.liquidnet.service.base.PagedResult; import com.liquidnet.service.base.PagedResult;
import com.liquidnet.service.goblin.dto.GoblinStoreMarketDto; import com.liquidnet.service.goblin.dto.GoblinStoreMarketDto;
import com.liquidnet.service.goblin.dto.GoblinGoodsSpecDto; import com.liquidnet.service.goblin.dto.GoblinGoodsSpecDto;
import com.liquidnet.service.goblin.dto.GoblinStoreMgtCouponListVoExcel;
import com.liquidnet.service.goblin.dto.GoblinStoreMgtGoodsListVoExcel; import com.liquidnet.service.goblin.dto.GoblinStoreMgtGoodsListVoExcel;
import com.liquidnet.service.goblin.dto.manage.vo.GoblinStoreMgtCouponListVo; import com.liquidnet.service.goblin.dto.manage.vo.GoblinStoreMgtCouponListVo;
import com.liquidnet.service.goblin.dto.manage.vo.GoblinStoreMgtCouponSpuListVo; import com.liquidnet.service.goblin.dto.manage.vo.GoblinStoreMgtCouponSpuListVo;
...@@ -70,6 +71,7 @@ public class ObjectUtil { ...@@ -70,6 +71,7 @@ public class ObjectUtil {
private static final ArrayList<GoblinStoreMgtCouponSpuListVo> goblinStoreMgtCouponSpuListVoArrayList = new ArrayList<>(); private static final ArrayList<GoblinStoreMgtCouponSpuListVo> goblinStoreMgtCouponSpuListVoArrayList = new ArrayList<>();
private static final ArrayList<GoblinStoreMarketDto> goblinStoreMarketDtoArrayList = new ArrayList<>(); private static final ArrayList<GoblinStoreMarketDto> goblinStoreMarketDtoArrayList = new ArrayList<>();
private static final ArrayList<GoblinStoreCouponVo> goblinStoreCouponVoArrayList = new ArrayList<>(); private static final ArrayList<GoblinStoreCouponVo> goblinStoreCouponVoArrayList = new ArrayList<>();
private static final ArrayList<GoblinStoreMgtCouponListVoExcel> goblinStoreMgtCouponListVoExcelArrayList = new ArrayList<>();
private static final BasicDBObject basicDBObject = new BasicDBObject(); private static final BasicDBObject basicDBObject = new BasicDBObject();
private static final ArrayList<WriteModel<Document>> writeModelDocumentArrayList = new ArrayList<>(); private static final ArrayList<WriteModel<Document>> writeModelDocumentArrayList = new ArrayList<>();
...@@ -266,6 +268,10 @@ public class ObjectUtil { ...@@ -266,6 +268,10 @@ public class ObjectUtil {
return (ArrayList<GoblinStoreCouponVo>) goblinStoreCouponVoArrayList.clone(); return (ArrayList<GoblinStoreCouponVo>) goblinStoreCouponVoArrayList.clone();
} }
public static ArrayList<GoblinStoreMgtCouponListVoExcel> getGoblinStoreMgtCouponListVoExcelArrayList() {
return (ArrayList<GoblinStoreMgtCouponListVoExcel>) goblinStoreMgtCouponListVoExcelArrayList.clone();
}
public static BasicDBObject cloneBasicDBObject() { public static BasicDBObject cloneBasicDBObject() {
return (BasicDBObject) basicDBObject.clone(); return (BasicDBObject) basicDBObject.clone();
} }
......
...@@ -111,6 +111,7 @@ goblin_shop.cart.update = update goblin_shopping_cart set `number` = ? where car ...@@ -111,6 +111,7 @@ goblin_shop.cart.update = update goblin_shopping_cart set `number` = ? where car
#---- 商铺活动:优惠券 #---- 商铺活动:优惠券
goblin_store_coupon.insert=INSERT INTO goblin_store_coupon (store_coupon_id,store_coupon_no,store_id,title,label, notice,type,stock,triggers,val_face, discount,val_over,val_minus,deduction,receive_limit, receive_curb,use_scope,state,start_time,end_time, created_by,created_at)VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) goblin_store_coupon.insert=INSERT INTO goblin_store_coupon (store_coupon_id,store_coupon_no,store_id,title,label, notice,type,stock,triggers,val_face, discount,val_over,val_minus,deduction,receive_limit, receive_curb,use_scope,state,start_time,end_time, created_by,created_at)VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
goblin_store_coupon.update=UPDATE goblin_store_coupon SET title=?,label=?,notice=?,type=?,triggers=?,val_face=?,discount=?,val_over=?,val_minus=?,deduction=?,receive_limit=?,receive_curb=?,use_scope=?,start_time=?,end_time=?,updated_by=?,updated_at=? WHERE store_coupon_id=? AND del_flg='0' goblin_store_coupon.update=UPDATE goblin_store_coupon SET title=?,label=?,notice=?,type=?,triggers=?,val_face=?,discount=?,val_over=?,val_minus=?,deduction=?,receive_limit=?,receive_curb=?,use_scope=?,start_time=?,end_time=?,updated_by=?,updated_at=? WHERE store_coupon_id=? AND del_flg='0'
goblin_store_coupon.update_stock=UPDATE goblin_store_coupon SET stock=?,updated_by=?,updated_at=? WHERE store_coupon_id=? AND del_flg='0'
goblin_store_coupon.activity=UPDATE goblin_store_coupon SET state=?,updated_by=?,updated_at=? WHERE store_coupon_id=? AND del_flg='0' goblin_store_coupon.activity=UPDATE goblin_store_coupon SET state=?,updated_by=?,updated_at=? WHERE store_coupon_id=? AND del_flg='0'
goblin_store_coupon.delete=UPDATE goblin_store_coupon SET del_flg='1',deleted_by=?,deleted_at=? WHERE store_coupon_id=? AND del_flg='0' goblin_store_coupon.delete=UPDATE goblin_store_coupon SET del_flg='1',deleted_by=?,deleted_at=? WHERE store_coupon_id=? AND del_flg='0'
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment