Merge branch 'bd_dev' of gitee.com:cabbage_qd/java-base-app into bd_dev
This commit is contained in:
commit
589c86d0e8
|
|
@ -0,0 +1,118 @@
|
||||||
|
package com.hzs.sale.all.controller.api;
|
||||||
|
|
||||||
|
import cn.hutool.core.codec.Base64Decoder;
|
||||||
|
import cn.hutool.core.codec.Base64Encoder;
|
||||||
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
|
import com.hzs.common.core.constant.MagicNumberConstants;
|
||||||
|
import com.hzs.common.core.enums.ESysName;
|
||||||
|
import com.hzs.common.core.utils.StringUtils;
|
||||||
|
import com.hzs.common.core.web.controller.BaseController;
|
||||||
|
import com.hzs.common.core.web.domain.AjaxResult;
|
||||||
|
import com.hzs.common.domain.sale.all.AllProduct;
|
||||||
|
import com.hzs.common.domain.sale.all.AllProductDetail;
|
||||||
|
import com.hzs.sale.all.param.SyncDataDetailParam;
|
||||||
|
import com.hzs.sale.all.param.SyncDateParam;
|
||||||
|
import com.hzs.sale.all.service.IAllProductDetailService;
|
||||||
|
import com.hzs.sale.all.service.IAllProductService;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/api/all-product")
|
||||||
|
@Slf4j
|
||||||
|
public class ApiAllProductController extends BaseController {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IAllProductService iAllProductService;
|
||||||
|
@Autowired
|
||||||
|
private IAllProductDetailService iAllProductDetailService;
|
||||||
|
|
||||||
|
@PostMapping("/sync-data")
|
||||||
|
public AjaxResult syncData(@RequestHeader("authorization") String authorization,
|
||||||
|
@RequestBody SyncDateParam param) {
|
||||||
|
log.info("全网产品同步数据, authorization: {}", authorization);
|
||||||
|
if (StringUtils.isEmpty(authorization)) {
|
||||||
|
return AjaxResult.error("缺少参数");
|
||||||
|
}
|
||||||
|
log.info("全网产品同步数据, param: {}", param);
|
||||||
|
if (null == param) {
|
||||||
|
return AjaxResult.error("缺少参数");
|
||||||
|
}
|
||||||
|
|
||||||
|
String header = new String(Base64Decoder.decode(authorization));
|
||||||
|
ESysName headSys = ESysName.getEnumByValue(header.split("!")[0]);
|
||||||
|
if (null == headSys) {
|
||||||
|
log.warn("head请求来源为空");
|
||||||
|
return AjaxResult.error("数据错误");
|
||||||
|
}
|
||||||
|
if (!headSys.getValue().equals(param.getSource())) {
|
||||||
|
log.warn("head请求来源错误");
|
||||||
|
return AjaxResult.error("数据错误");
|
||||||
|
}
|
||||||
|
String headOrder = header.split("!")[1];
|
||||||
|
if (null == headOrder) {
|
||||||
|
log.warn("head请求订单为空");
|
||||||
|
return AjaxResult.error("数据错误");
|
||||||
|
}
|
||||||
|
if (!headOrder.equals(param.getOrderCode())) {
|
||||||
|
log.warn("head请求订单错误");
|
||||||
|
return AjaxResult.error("数据错误");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (iAllProductDetailService.count(Wrappers.<AllProductDetail>lambdaQuery()
|
||||||
|
.eq(AllProductDetail::getSource, param.getSource())
|
||||||
|
.eq(AllProductDetail::getOrderCode, param.getOrderCode())
|
||||||
|
) > 0) {
|
||||||
|
log.info("订单已经处理过");
|
||||||
|
return AjaxResult.success();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 产品明细
|
||||||
|
List<SyncDataDetailParam> detailList = param.getDetailList();
|
||||||
|
if (CollectionUtil.isNotEmpty(detailList)) {
|
||||||
|
// 获取仓储编号等数据
|
||||||
|
Set<String> wmsCodeList = detailList.stream().map(SyncDataDetailParam::getWmsCode).collect(Collectors.toSet());
|
||||||
|
List<AllProduct> productList = iAllProductService.list(Wrappers.<AllProduct>lambdaQuery()
|
||||||
|
.in(AllProduct::getWmsCode, wmsCodeList)
|
||||||
|
);
|
||||||
|
Map<String, AllProduct> wmsCodeMap = productList.stream().collect(Collectors.toMap(AllProduct::getWmsCode, item -> item));
|
||||||
|
|
||||||
|
// 商品明细列表
|
||||||
|
List<AllProductDetail> productDetailList = new ArrayList<>();
|
||||||
|
for (SyncDataDetailParam syncDataDetailParam : detailList) {
|
||||||
|
AllProduct allProduct = wmsCodeMap.get(syncDataDetailParam.getWmsCode());
|
||||||
|
if (null == allProduct) {
|
||||||
|
// 仓储编号不存在,则创建
|
||||||
|
allProduct = AllProduct.builder()
|
||||||
|
.wmsCode(syncDataDetailParam.getWmsCode())
|
||||||
|
.remark("仓储编号不存在,自动创建")
|
||||||
|
.build();
|
||||||
|
allProduct.setPkCreator(MagicNumberConstants.PK_ADMIN);
|
||||||
|
iAllProductService.save(allProduct);
|
||||||
|
wmsCodeMap.put(syncDataDetailParam.getWmsCode(), allProduct);
|
||||||
|
}
|
||||||
|
|
||||||
|
AllProductDetail productDetail = AllProductDetail.builder()
|
||||||
|
.pkAllProduct(allProduct.getPkId())
|
||||||
|
.source(param.getSource())
|
||||||
|
.orderCode(param.getOrderCode())
|
||||||
|
.changeNum(syncDataDetailParam.getChangeNum() * -1)
|
||||||
|
.remark(param.getSource() + "系统,订单编号:" + param.getOrderCode() + ",扣减:" + syncDataDetailParam.getWmsCode() + "库存" + syncDataDetailParam.getChangeNum())
|
||||||
|
.build();
|
||||||
|
productDetail.setPkCreator(1L);
|
||||||
|
productDetailList.add(productDetail);
|
||||||
|
}
|
||||||
|
iAllProductService.syncData(productDetailList);
|
||||||
|
}
|
||||||
|
return AjaxResult.success();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -3,7 +3,7 @@ package com.hzs.sale.all.controller.manage;
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
import cn.hutool.core.collection.CollectionUtil;
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.hzs.common.core.enums.EProductSource;
|
import com.hzs.common.core.enums.ESysName;
|
||||||
import com.hzs.common.core.utils.DateUtils;
|
import com.hzs.common.core.utils.DateUtils;
|
||||||
import com.hzs.common.core.utils.StringUtils;
|
import com.hzs.common.core.utils.StringUtils;
|
||||||
import com.hzs.common.core.utils.poi.ExcelUtil;
|
import com.hzs.common.core.utils.poi.ExcelUtil;
|
||||||
|
|
@ -62,7 +62,7 @@ public class AllProductDetailController extends BaseController {
|
||||||
if (CollectionUtil.isNotEmpty(productList)) {
|
if (CollectionUtil.isNotEmpty(productList)) {
|
||||||
for (AllProductDetail allProductDetail : productList) {
|
for (AllProductDetail allProductDetail : productList) {
|
||||||
AllProductDetailQueryVO vo = BeanUtil.copyProperties(allProductDetail, AllProductDetailQueryVO.class);
|
AllProductDetailQueryVO vo = BeanUtil.copyProperties(allProductDetail, AllProductDetailQueryVO.class);
|
||||||
vo.setSourceVal(EProductSource.getLabelByValue(vo.getSource()));
|
vo.setSourceVal(ESysName.getLabelByValue(vo.getSource()));
|
||||||
resultList.add(vo);
|
resultList.add(vo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -101,7 +101,7 @@ public class AllProductDetailController extends BaseController {
|
||||||
if (CollectionUtil.isNotEmpty(productList)) {
|
if (CollectionUtil.isNotEmpty(productList)) {
|
||||||
for (AllProductDetail allProductDetail : productList) {
|
for (AllProductDetail allProductDetail : productList) {
|
||||||
AllProductDetailQueryVO vo = BeanUtil.copyProperties(allProductDetail, AllProductDetailQueryVO.class);
|
AllProductDetailQueryVO vo = BeanUtil.copyProperties(allProductDetail, AllProductDetailQueryVO.class);
|
||||||
vo.setSourceVal(EProductSource.getLabelByValue(vo.getSource()));
|
vo.setSourceVal(ESysName.getLabelByValue(vo.getSource()));
|
||||||
resultList.add(vo);
|
resultList.add(vo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
package com.hzs.sale.all.param;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class SyncDataDetailParam {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 仓储编号
|
||||||
|
*/
|
||||||
|
private String wmsCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 变动数量
|
||||||
|
*/
|
||||||
|
private Integer changeNum;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
package com.hzs.sale.all.param;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class SyncDateParam {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 来源系统
|
||||||
|
*/
|
||||||
|
private String source;
|
||||||
|
/**
|
||||||
|
* 订单编号
|
||||||
|
*/
|
||||||
|
private String orderCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 产品明细列表
|
||||||
|
*/
|
||||||
|
private List<SyncDataDetailParam> detailList;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -3,7 +3,7 @@ package com.hzs.sale.all.service.impl;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.hzs.common.core.enums.EDelFlag;
|
import com.hzs.common.core.enums.EDelFlag;
|
||||||
import com.hzs.common.core.enums.EProductSource;
|
import com.hzs.common.core.enums.ESysName;
|
||||||
import com.hzs.common.domain.sale.all.AllProduct;
|
import com.hzs.common.domain.sale.all.AllProduct;
|
||||||
import com.hzs.common.domain.sale.all.AllProductDetail;
|
import com.hzs.common.domain.sale.all.AllProductDetail;
|
||||||
import com.hzs.sale.all.mapper.AllProductMapper;
|
import com.hzs.sale.all.mapper.AllProductMapper;
|
||||||
|
|
@ -32,7 +32,7 @@ public class AllProductServiceImpl extends ServiceImpl<AllProductMapper, AllProd
|
||||||
|
|
||||||
AllProductDetail productDetail = AllProductDetail.builder()
|
AllProductDetail productDetail = AllProductDetail.builder()
|
||||||
.pkAllProduct(param.getPkId())
|
.pkAllProduct(param.getPkId())
|
||||||
.source(EProductSource.MANAGE.getValue())
|
.source(ESysName.MANAGE.getValue())
|
||||||
.changeNum(param.getInventory())
|
.changeNum(param.getInventory())
|
||||||
.remark(param.getRemark())
|
.remark(param.getRemark())
|
||||||
.build();
|
.build();
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
package com.hzs.sale.order.mapper;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import com.hzs.common.domain.sale.order.SaOrderSync;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单产品同步记录 Mapper 接口
|
||||||
|
*/
|
||||||
|
public interface SaOrderSyncMapper extends BaseMapper<SaOrderSync> {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
package com.hzs.sale.order.service;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
import com.hzs.common.domain.sale.order.SaOrderSync;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单产品同步记录 服务类
|
||||||
|
*/
|
||||||
|
public interface ISaOrderSyncService extends IService<SaOrderSync> {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -1,9 +1,12 @@
|
||||||
package com.hzs.sale.order.service.impl;
|
package com.hzs.sale.order.service.impl;
|
||||||
|
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import cn.hutool.core.codec.Base64Encoder;
|
||||||
import cn.hutool.core.collection.CollectionUtil;
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.hutool.crypto.SecureUtil;
|
import cn.hutool.crypto.SecureUtil;
|
||||||
|
import cn.hutool.http.HttpRequest;
|
||||||
|
import cn.hutool.http.HttpUtil;
|
||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
|
@ -11,6 +14,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.hzs.activity.pick.service.IAcPickService;
|
import com.hzs.activity.pick.service.IAcPickService;
|
||||||
|
import com.hzs.common.core.config.BdConfig;
|
||||||
import com.hzs.common.core.constant.*;
|
import com.hzs.common.core.constant.*;
|
||||||
import com.hzs.common.core.constant.msg.ConfigMsgConstants;
|
import com.hzs.common.core.constant.msg.ConfigMsgConstants;
|
||||||
import com.hzs.common.core.constant.msg.MemberMsgConstants;
|
import com.hzs.common.core.constant.msg.MemberMsgConstants;
|
||||||
|
|
@ -20,6 +24,7 @@ import com.hzs.common.core.exception.ServiceException;
|
||||||
import com.hzs.common.core.service.RedisService;
|
import com.hzs.common.core.service.RedisService;
|
||||||
import com.hzs.common.core.utils.*;
|
import com.hzs.common.core.utils.*;
|
||||||
import com.hzs.common.core.utils.reflect.ReflectUtils;
|
import com.hzs.common.core.utils.reflect.ReflectUtils;
|
||||||
|
import com.hzs.common.core.web.domain.AjaxResult;
|
||||||
import com.hzs.common.domain.member.account.CuMemberAccount;
|
import com.hzs.common.domain.member.account.CuMemberAccount;
|
||||||
import com.hzs.common.domain.member.base.CuMember;
|
import com.hzs.common.domain.member.base.CuMember;
|
||||||
import com.hzs.common.domain.member.base.CuMemberRegister;
|
import com.hzs.common.domain.member.base.CuMemberRegister;
|
||||||
|
|
@ -32,6 +37,7 @@ import com.hzs.common.domain.member.ext.CuMemberAccountExt;
|
||||||
import com.hzs.common.domain.member.ext.CuMemberExt;
|
import com.hzs.common.domain.member.ext.CuMemberExt;
|
||||||
import com.hzs.common.domain.sale.ext.*;
|
import com.hzs.common.domain.sale.ext.*;
|
||||||
import com.hzs.common.domain.sale.order.*;
|
import com.hzs.common.domain.sale.order.*;
|
||||||
|
import com.hzs.common.domain.sale.product.BdProduct;
|
||||||
import com.hzs.common.domain.sale.wares.BdWares;
|
import com.hzs.common.domain.sale.wares.BdWares;
|
||||||
import com.hzs.common.domain.sale.wares.BdWaresExtend;
|
import com.hzs.common.domain.sale.wares.BdWaresExtend;
|
||||||
import com.hzs.common.domain.sale.wares.BdWaresMemberLimit;
|
import com.hzs.common.domain.sale.wares.BdWaresMemberLimit;
|
||||||
|
|
@ -59,6 +65,7 @@ import com.hzs.sale.order.param.*;
|
||||||
import com.hzs.sale.order.service.*;
|
import com.hzs.sale.order.service.*;
|
||||||
import com.hzs.sale.order.vo.*;
|
import com.hzs.sale.order.vo.*;
|
||||||
import com.hzs.sale.product.service.IBdProductExtendService;
|
import com.hzs.sale.product.service.IBdProductExtendService;
|
||||||
|
import com.hzs.sale.product.service.IBdProductService;
|
||||||
import com.hzs.sale.wares.service.*;
|
import com.hzs.sale.wares.service.*;
|
||||||
import com.hzs.system.base.IAreaServiceApi;
|
import com.hzs.system.base.IAreaServiceApi;
|
||||||
import com.hzs.system.base.ICountryServiceApi;
|
import com.hzs.system.base.ICountryServiceApi;
|
||||||
|
|
@ -139,6 +146,8 @@ public class SaOrderServiceImpl extends ServiceImpl<SaOrderMapper, SaOrder> impl
|
||||||
@Autowired
|
@Autowired
|
||||||
private ISaOrderItemsService iSaOrderItemsService;
|
private ISaOrderItemsService iSaOrderItemsService;
|
||||||
@Autowired
|
@Autowired
|
||||||
|
private IBdProductService iBdProductService;
|
||||||
|
@Autowired
|
||||||
private IBdProductExtendService iBdProductExtendService;
|
private IBdProductExtendService iBdProductExtendService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private IBdWaresSpecsRelationService iBdWaresSpecsRelationService;
|
private IBdWaresSpecsRelationService iBdWaresSpecsRelationService;
|
||||||
|
|
@ -152,6 +161,8 @@ public class SaOrderServiceImpl extends ServiceImpl<SaOrderMapper, SaOrder> impl
|
||||||
private ISaOrderChargeLogService iSaOrderChargeLogService;
|
private ISaOrderChargeLogService iSaOrderChargeLogService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private IBdWaresMemberLimitService iBdWaresMemberLimitService;
|
private IBdWaresMemberLimitService iBdWaresMemberLimitService;
|
||||||
|
@Autowired
|
||||||
|
private ISaOrderSyncService iSaOrderSyncService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private UserTokenService userTokenService;
|
private UserTokenService userTokenService;
|
||||||
|
|
@ -759,6 +770,9 @@ public class SaOrderServiceImpl extends ServiceImpl<SaOrderMapper, SaOrder> impl
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
// 同步全网产品库存
|
||||||
|
this.allProductSync(saOrderExt);
|
||||||
|
|
||||||
log.info("生产活动消息,activity.exchange:{}", JSONUtil.toJsonStr(saOrderExt));
|
log.info("生产活动消息,activity.exchange:{}", JSONUtil.toJsonStr(saOrderExt));
|
||||||
rabbitTemplate.convertAndSend(RabbitMqConstants.ACTIVITY_EXCHANGE, RabbitMqConstants.ACTIVITY_KEY, saOrderExt);
|
rabbitTemplate.convertAndSend(RabbitMqConstants.ACTIVITY_EXCHANGE, RabbitMqConstants.ACTIVITY_KEY, saOrderExt);
|
||||||
// 推送秒结数据处理 -- 注册订单
|
// 推送秒结数据处理 -- 注册订单
|
||||||
|
|
@ -871,6 +885,9 @@ public class SaOrderServiceImpl extends ServiceImpl<SaOrderMapper, SaOrder> impl
|
||||||
throw new RuntimeException("保存会员失败!!!");
|
throw new RuntimeException("保存会员失败!!!");
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
|
// 同步全网产品库存
|
||||||
|
this.allProductSync(saOrderExt);
|
||||||
|
|
||||||
rabbitTemplate.convertAndSend(RabbitMqConstants.ACTIVITY_EXCHANGE, RabbitMqConstants.ACTIVITY_KEY, saOrderExt);
|
rabbitTemplate.convertAndSend(RabbitMqConstants.ACTIVITY_EXCHANGE, RabbitMqConstants.ACTIVITY_KEY, saOrderExt);
|
||||||
// 推送秒结数据处理 -- 升级订单
|
// 推送秒结数据处理 -- 升级订单
|
||||||
rabbitTemplate.convertAndSend(RabbitMqConstants.ORDER_SECOND_EXCHANGE, RabbitMqConstants.ORDER_SECOND_KEY, saOrderExt);
|
rabbitTemplate.convertAndSend(RabbitMqConstants.ORDER_SECOND_EXCHANGE, RabbitMqConstants.ORDER_SECOND_KEY, saOrderExt);
|
||||||
|
|
@ -967,6 +984,9 @@ public class SaOrderServiceImpl extends ServiceImpl<SaOrderMapper, SaOrder> impl
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
// 同步全网产品库存
|
||||||
|
this.allProductSync(saOrderExt);
|
||||||
|
|
||||||
// 推送秒结数据处理 -- 其它订单
|
// 推送秒结数据处理 -- 其它订单
|
||||||
rabbitTemplate.convertAndSend(RabbitMqConstants.ORDER_SECOND_EXCHANGE, RabbitMqConstants.ORDER_SECOND_KEY, saOrderExt);
|
rabbitTemplate.convertAndSend(RabbitMqConstants.ORDER_SECOND_EXCHANGE, RabbitMqConstants.ORDER_SECOND_KEY, saOrderExt);
|
||||||
// if (EOrderType.RENEWAL_ORDER.getValue() == saOrderExt.getOrderType()) {
|
// if (EOrderType.RENEWAL_ORDER.getValue() == saOrderExt.getOrderType()) {
|
||||||
|
|
@ -2437,4 +2457,59 @@ public class SaOrderServiceImpl extends ServiceImpl<SaOrderMapper, SaOrder> impl
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 同步全网产品库存
|
||||||
|
*
|
||||||
|
* @param saOrderExt
|
||||||
|
*/
|
||||||
|
private void allProductSync(SaOrderExt saOrderExt) {
|
||||||
|
if (EYesNo.NO.getIntValue() == BdConfig.getProductSync()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Map<Integer, BdProduct> productMap = iBdProductService.queryProductMap(saOrderExt.getOrderItemsList().stream().map(SaOrderItems::getPkProduct).collect(Collectors.toSet()), null);
|
||||||
|
// 开启线程调用全网产品库存
|
||||||
|
// 请求参数
|
||||||
|
Map<String, Object> bodyMap = new HashMap<>();
|
||||||
|
bodyMap.put("source", BdConfig.getSysName());
|
||||||
|
bodyMap.put("orderCode", saOrderExt.getOrderCode());
|
||||||
|
List<Map<String, Object>> bodyDetailList = new ArrayList<>();
|
||||||
|
for (SaOrderItems saOrderItems : saOrderExt.getOrderItemsList()) {
|
||||||
|
Map<String, Object> detailMap = new HashMap<>();
|
||||||
|
detailMap.put("wmsCode", productMap.get(saOrderItems.getPkProduct()).getWmsCode());
|
||||||
|
detailMap.put("changeNum", saOrderItems.getQuantity());
|
||||||
|
bodyDetailList.add(detailMap);
|
||||||
|
}
|
||||||
|
bodyMap.put("detailList", bodyDetailList);
|
||||||
|
// 请求头
|
||||||
|
String header = Base64Encoder.encode(BdConfig.getSysName() + "!" + saOrderExt.getOrderCode());
|
||||||
|
ThreadUtils.threadPoolExecutor.submit(() -> {
|
||||||
|
log.info("同步产品,header: {}", header);
|
||||||
|
log.info("同步产品,bodyMap: {}", bodyMap);
|
||||||
|
HttpRequest httpRequest = HttpUtil.createPost(BdConfig.getProductSyncUrl());
|
||||||
|
httpRequest.header("authorization", header);
|
||||||
|
httpRequest.body(JSONUtil.toJsonStr(bodyMap));
|
||||||
|
httpRequest.setReadTimeout(5000);
|
||||||
|
try {
|
||||||
|
// 同步产品接口返回
|
||||||
|
String resultStr = httpRequest.execute().body();
|
||||||
|
AjaxResult ajaxResult = JSONUtil.toBean(resultStr, AjaxResult.class);
|
||||||
|
log.info("同步产品,resultStr: {}", resultStr);
|
||||||
|
if (!ajaxResult.isSuccess()) {
|
||||||
|
// 同步产品失败,250毫秒后重试
|
||||||
|
Thread.sleep(250);
|
||||||
|
resultStr = httpRequest.execute().body();
|
||||||
|
log.info("同步产品失败重试,resultStr: {}", resultStr);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("同步产品库存异常", e);
|
||||||
|
// 保存订单产品同步记录
|
||||||
|
iSaOrderSyncService.save(SaOrderSync.builder()
|
||||||
|
.orderCode(saOrderExt.getOrderCode())
|
||||||
|
.bodyDetail(JSONUtil.toJsonStr(bodyDetailList))
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
package com.hzs.sale.order.service.impl;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
|
import com.hzs.common.domain.sale.order.SaOrderSync;
|
||||||
|
import com.hzs.sale.order.mapper.SaOrderSyncMapper;
|
||||||
|
import com.hzs.sale.order.service.ISaOrderSyncService;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单产品同步记录 服务实现类
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class SaOrderSyncServiceImpl extends ServiceImpl<SaOrderSyncMapper, SaOrderSync> implements ISaOrderSyncService {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -427,6 +427,15 @@
|
||||||
#{item}
|
#{item}
|
||||||
</foreach>
|
</foreach>
|
||||||
</if>
|
</if>
|
||||||
|
<!-- 在售 -->
|
||||||
|
and (bwe.pre_sale_status = 0
|
||||||
|
<if test="param.pkWaresList != null and param.pkWaresList.size > 0">
|
||||||
|
or soi.pk_wares in
|
||||||
|
<foreach collection="param.pkWaresList" item="item" separator="," open="(" close=")">
|
||||||
|
#{item}
|
||||||
|
</foreach>
|
||||||
|
</if>
|
||||||
|
)
|
||||||
<!-- 地区权限处理 -->
|
<!-- 地区权限处理 -->
|
||||||
<if test="param.areaScopeList != null and param.areaScopeList.size > 0">
|
<if test="param.areaScopeList != null and param.areaScopeList.size > 0">
|
||||||
and so.rec_province in
|
and so.rec_province in
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="com.hzs.sale.order.mapper.SaOrderSyncMapper">
|
||||||
|
|
||||||
|
</mapper>
|
||||||
|
|
@ -2631,7 +2631,7 @@ public class EnumsController extends BaseController {
|
||||||
@GetMapping("/product-source")
|
@GetMapping("/product-source")
|
||||||
public AjaxResult productSource() {
|
public AjaxResult productSource() {
|
||||||
List<Map<String, String>> enumEntityList = new ArrayList<>();
|
List<Map<String, String>> enumEntityList = new ArrayList<>();
|
||||||
for (EProductSource value : EProductSource.values()) {
|
for (ESysName value : ESysName.values()) {
|
||||||
HashMap<String, String> tmpEnumEntity = new HashMap<>();
|
HashMap<String, String> tmpEnumEntity = new HashMap<>();
|
||||||
tmpEnumEntity.put("value", value.getValue());
|
tmpEnumEntity.put("value", value.getValue());
|
||||||
tmpEnumEntity.put("label", value.getLabel());
|
tmpEnumEntity.put("label", value.getLabel());
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,15 @@ public class BdConfig {
|
||||||
*/
|
*/
|
||||||
private static String android;
|
private static String android;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 商品同步是否开启(0=开启,1=不开启)
|
||||||
|
*/
|
||||||
|
private static Integer productSync;
|
||||||
|
/**
|
||||||
|
* 商品同步地址
|
||||||
|
*/
|
||||||
|
private static String productSyncUrl;
|
||||||
|
|
||||||
public static String getSysName() {
|
public static String getSysName() {
|
||||||
return sysName;
|
return sysName;
|
||||||
}
|
}
|
||||||
|
|
@ -85,4 +94,19 @@ public class BdConfig {
|
||||||
BdConfig.android = android;
|
BdConfig.android = android;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Integer getProductSync() {
|
||||||
|
return productSync;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setProductSync(Integer productSync) {
|
||||||
|
BdConfig.productSync = productSync;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getProductSyncUrl() {
|
||||||
|
return productSyncUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setProductSyncUrl(String productSyncUrl) {
|
||||||
|
BdConfig.productSyncUrl = productSyncUrl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,55 +0,0 @@
|
||||||
package com.hzs.common.core.enums;
|
|
||||||
|
|
||||||
import lombok.AllArgsConstructor;
|
|
||||||
import lombok.Getter;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 产品数据来源
|
|
||||||
*/
|
|
||||||
@AllArgsConstructor
|
|
||||||
@Getter
|
|
||||||
public enum EProductSource {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 管理后台
|
|
||||||
*/
|
|
||||||
MANAGE("MANAGE", "管理后台"),
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 乐学
|
|
||||||
*/
|
|
||||||
CN("CN", "CN"),
|
|
||||||
/**
|
|
||||||
* 北大
|
|
||||||
*/
|
|
||||||
BD("BD", "BD"),
|
|
||||||
/**
|
|
||||||
* 新零售
|
|
||||||
*/
|
|
||||||
BF("BF", "BF"),
|
|
||||||
/**
|
|
||||||
* 新零售店铺
|
|
||||||
*/
|
|
||||||
BL("BL", "BL"),
|
|
||||||
|
|
||||||
;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 实际值
|
|
||||||
*/
|
|
||||||
private final String value;
|
|
||||||
/**
|
|
||||||
* 显示标签
|
|
||||||
*/
|
|
||||||
private final String label;
|
|
||||||
|
|
||||||
public static String getLabelByValue(String value) {
|
|
||||||
for (EProductSource enums : EProductSource.values()) {
|
|
||||||
if (enums.getValue().equals(value)) {
|
|
||||||
return enums.getLabel();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -10,15 +10,24 @@ import lombok.Getter;
|
||||||
@Getter
|
@Getter
|
||||||
public enum ESysName {
|
public enum ESysName {
|
||||||
|
|
||||||
|
MANAGE("manage", "后台管理"),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 乐学
|
* 乐学
|
||||||
*/
|
*/
|
||||||
LX("lx", "乐学"),
|
LX("lx", "乐学CN"),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 北大
|
* 北大
|
||||||
*/
|
*/
|
||||||
BD("bd", "北大"),
|
BD("bd", "北大BD"),
|
||||||
|
/**
|
||||||
|
* 新零售
|
||||||
|
*/
|
||||||
|
BF("bf", "新零售BF"),
|
||||||
|
/**
|
||||||
|
* 新零售店铺
|
||||||
|
*/
|
||||||
|
BL("bl", "新零售店铺BL"),
|
||||||
|
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
@ -31,4 +40,23 @@ public enum ESysName {
|
||||||
*/
|
*/
|
||||||
private final String label;
|
private final String label;
|
||||||
|
|
||||||
|
public static ESysName getEnumByValue(String value) {
|
||||||
|
for (ESysName enums : ESysName.values()) {
|
||||||
|
if (enums.getValue().equals(value)) {
|
||||||
|
return enums;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static String getLabelByValue(String value) {
|
||||||
|
for (ESysName enums : ESysName.values()) {
|
||||||
|
if (enums.getValue().equals(value)) {
|
||||||
|
return enums.getLabel();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,21 +6,12 @@ import org.springframework.stereotype.Component;
|
||||||
import java.util.concurrent.*;
|
import java.util.concurrent.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Description: 线程工具类
|
* 线程工具类
|
||||||
* Author: jiang chao
|
|
||||||
* Time: 2022/8/30 10:10
|
|
||||||
* Classname: ThreadUtil
|
|
||||||
* PackageName: com.hzs.common.core.utils
|
|
||||||
*/
|
*/
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Component
|
@Component
|
||||||
public class ThreadUtils {
|
public class ThreadUtils {
|
||||||
|
|
||||||
/**
|
|
||||||
* 初始化创建4个长度的固定线程池
|
|
||||||
*/
|
|
||||||
public static ExecutorService executorService = Executors.newFixedThreadPool(4);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建线程池
|
* 创建线程池
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,57 @@
|
||||||
|
package com.hzs.common.domain.sale.order;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import lombok.*;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单产品同步记录
|
||||||
|
*/
|
||||||
|
@Builder
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = false)
|
||||||
|
@Accessors(chain = true)
|
||||||
|
@TableName("SA_ORDER_SYNC")
|
||||||
|
public class SaOrderSync implements Serializable {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主键ID
|
||||||
|
*/
|
||||||
|
@TableId("PK_ID")
|
||||||
|
private Long pkId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单编号
|
||||||
|
*/
|
||||||
|
@TableField("ORDER_CODE")
|
||||||
|
private String orderCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 产品明细列表
|
||||||
|
*/
|
||||||
|
@TableField("BODY_DETAIL")
|
||||||
|
private String bodyDetail;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建时间
|
||||||
|
*/
|
||||||
|
@TableField("CREATION_TIME")
|
||||||
|
private Date creationTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 同步状态(1=失败)
|
||||||
|
*/
|
||||||
|
@TableField("STATUS")
|
||||||
|
private Integer status;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -149,15 +149,6 @@ security:
|
||||||
- /member/manage/handle-business/online-petition-confirm
|
- /member/manage/handle-business/online-petition-confirm
|
||||||
- /member/manage/member-empty/submit
|
- /member/manage/member-empty/submit
|
||||||
- /member/manager/zeroRevoke/petition
|
- /member/manager/zeroRevoke/petition
|
||||||
- /activity/manage/gift-benefits/save-petition
|
|
||||||
- /activity/manage/gift-benefits/up-petition
|
|
||||||
- /activity/manage/gift-benefits/del-petition
|
|
||||||
- /activity/manage/new-people/save-petition
|
|
||||||
- /activity/manage/new-people/up-petition
|
|
||||||
- /activity/manage/new-people/del-petition
|
|
||||||
- /activity/manage/ac-bean-rule-config/save-petition
|
|
||||||
- /activity/manage/ac-bean-rule-config/up-petition
|
|
||||||
- /activity/manage/ac-bean-rule-config/del-petition
|
|
||||||
- /activity/manage/tourism/online-petition
|
- /activity/manage/tourism/online-petition
|
||||||
- /activity/manage/wares-rule-config/save-activity
|
- /activity/manage/wares-rule-config/save-activity
|
||||||
- /activity/manage/wares-rule-config/update
|
- /activity/manage/wares-rule-config/update
|
||||||
|
|
@ -189,6 +180,8 @@ security:
|
||||||
# 188分享注册白名单
|
# 188分享注册白名单
|
||||||
- /member/api/member/fans-convert-code/*
|
- /member/api/member/fans-convert-code/*
|
||||||
- /member/api/member/fans-order/*
|
- /member/api/member/fans-order/*
|
||||||
|
# 库存商品同步
|
||||||
|
- /sale/api/all-product/sync-data
|
||||||
|
|
||||||
# 日志配置
|
# 日志配置
|
||||||
logging:
|
logging:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue