Browse Source

错误日志异步自动修复;SPU导入导出

v1.0
Yen 2 years ago
parent
commit
631a0f9d87
  1. 164
      src/main/java/com/qs/serve/modules/goods/controller/GoodsSpuController.java
  2. 41
      src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsSpuImportBo.java
  3. 2
      src/main/java/com/qs/serve/modules/sys/entity/SysSyncLog.java
  4. 13
      src/main/java/com/qs/serve/modules/third/PortalController.java
  5. 5
      src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationService.java
  6. 27
      src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java

164
src/main/java/com/qs/serve/modules/goods/controller/GoodsSpuController.java

@ -10,10 +10,7 @@ import com.qs.serve.common.model.enums.SystemModule;
import com.qs.serve.common.util.*;
import com.qs.serve.modules.goods.common.GoodsConst;
import com.qs.serve.modules.goods.entity.*;
import com.qs.serve.modules.goods.entity.bo.GoodsSpuBatchTasteBo;
import com.qs.serve.modules.goods.entity.bo.GoodsSpuBo;
import com.qs.serve.modules.goods.entity.bo.GoodsSpuEditBo;
import com.qs.serve.modules.goods.entity.bo.GoodsSpuTasteBo;
import com.qs.serve.modules.goods.entity.bo.*;
import com.qs.serve.modules.goods.entity.dto.InventoryCusPrice;
import com.qs.serve.modules.goods.entity.so.InventoryCusPriceQuery;
import com.qs.serve.modules.goods.entity.vo.GoodsSpuVo;
@ -96,12 +93,14 @@ public class GoodsSpuController {
try {
String supplierCode = param.getSupplierCode();
List<String> skuCodes = toSkuKeys.stream().map(OmsSpuToSkuKey::getInvCode).collect(Collectors.toList());
InventoryCusPriceQuery query = new InventoryCusPriceQuery();
query.setCusCode(supplierCode);
query.setInvCodes(skuCodes);
R<String> res = seeYonRequestBaseService.postBase(TbsSeeYonConst.ERP_CUS_INV_PRICE,query,"查询客户特殊价");
if(res.getStatus().equals(200)){
inventoryCusPrices = JsonUtil.jsonToList(res.getData(), InventoryCusPrice.class);
if(skuCodes.size()>0){
InventoryCusPriceQuery query = new InventoryCusPriceQuery();
query.setCusCode(supplierCode);
query.setInvCodes(skuCodes);
R<String> res = seeYonRequestBaseService.postBase(TbsSeeYonConst.ERP_CUS_INV_PRICE,query,"查询客户特殊价");
if(res.getStatus().equals(200)){
inventoryCusPrices = JsonUtil.jsonToList(res.getData(), InventoryCusPrice.class);
}
}
} catch (Exception e) {
log.error("客户特殊价异常:{}",e.getMessage());
@ -279,6 +278,151 @@ public class GoodsSpuController {
return R.ok(goodsSpuService.editTasteSpu(param));
}
/**
* 导入
* @param param
* @return
*/
@PostMapping("/importSpu")
@SysLog(module = SystemModule.GOODS, title = "import", biz = BizType.INSERT)
public R<?> importSpu(@RequestBody @Valid GoodsSpuImportBo param){
final String UPDATE = "update";
final String DELETE = "delete";
final String SAVE = "save";
//导入
List<String> spuCodes = new ArrayList<>();
List<String> cateNames = new ArrayList<>();
for (GoodsSpuImportBo.SpuItem item : param.getSpuList()) {
spuCodes.add(item.getSpuCode());
//删除只需要spu编码
if(StringUtils.hasText(item.getCategoryName())&&!item.getOpt().equals(DELETE)){
cateNames.add(item.getCategoryName());
}
}
if(spuCodes.size()<1){
return R.error("获取SKU编码失败");
}
LambdaQueryWrapper<GoodsSpu> spuLqw = new LambdaQueryWrapper<>();
spuLqw.in(GoodsSpu::getSpuCode,spuCodes);
List<GoodsSpu> spuList = goodsSpuService.list(spuLqw);
List<GoodsCategory> cateList = null;
if(cateNames.size()>0){
LambdaQueryWrapper<GoodsCategory> cateLqw = new LambdaQueryWrapper<>();
cateLqw.in(GoodsCategory::getName,cateNames);
cateLqw.eq(GoodsCategory::getLevel,3);
cateList = goodsCategoryService.list(cateLqw);
}
boolean isError = false;
for (GoodsSpuImportBo.SpuItem item : param.getSpuList()) {
spuCodes.add(item.getSpuCode());
//更新或者保存,需要校验类目名称
if(StringUtils.hasText(item.getCategoryName())&&!item.getOpt().equals(DELETE)){
if(cateList==null){
isError = true;
item.setErrMsg("["+item.getCategoryName()+"]类目不存在");
}else {
String cateName = item.getCategoryName();
boolean existCate = cateList.stream().anyMatch(a->a.getName().equals(cateName));
if(!existCate){
isError = true;
item.setErrMsg("["+item.getCategoryName()+"]类目不存在");
}
}
}
String spuCode = item.getSpuCode();
boolean existSpu = spuList.stream().anyMatch(a->a.getSpuCode().equals(spuCode));
if(existSpu&&item.getOpt().equals(SAVE)){
isError = true;
item.setErrMsg("SKU编码已存在");
}else if(!existSpu && item.getOpt().equals(UPDATE)){
isError = true;
item.setErrMsg("SKU编码不存在");
}
}
if(isError){
return R.error("数据异常",param);
}
List<Long> rmIds = new ArrayList<>();
List<GoodsSpu> spuUpdateList = new ArrayList<>();
List<GoodsSpu> spuSaveList = new ArrayList<>();
for (GoodsSpuImportBo.SpuItem spuItem : param.getSpuList()) {
if(spuItem.getOpt().equals(SAVE)){
GoodsSpu goodsSpu = new GoodsSpu();
goodsSpu.setSpuCode(spuItem.getSpuCode());
goodsSpu.setName(spuItem.getName());
//修改类目
this.toSetSpuCate(cateList, spuItem, goodsSpu);
goodsSpu.setShelf(1);
goodsSpu.setCostFlag(1);
spuSaveList.add(goodsSpu);
continue;
}
for (GoodsSpu spu : spuList) {
if(spu.getSpuCode().equals(spuItem.getSpuCode())){
//删除
if(spuItem.getOpt().equals(DELETE)){
rmIds.add(spu.getId());
continue;
}
//更新start
if(StringUtils.hasText(spuItem.getName())){
spu.setName(spuItem.getName());
}
//修改类目
this.toSetSpuCate(cateList, spuItem, spu);
//关联
if(spuItem.getOpt().equals(UPDATE)){
spuUpdateList.add(spu);
}
}
}
}
if(rmIds.size()>0){
goodsSpuService.removeBatchByIds(rmIds);
}
if(spuUpdateList.size()>0){
goodsSpuService.updateBatchById(spuUpdateList);
}
if(spuSaveList.size()>0){
goodsSpuService.saveBatch(spuSaveList);
}
return R.ok();
}
/**
* 修改类目
* @param cateList
* @param spuItem
* @param spu
*/
private void toSetSpuCate(List<GoodsCategory> cateList, GoodsSpuImportBo.SpuItem spuItem, GoodsSpu spu) {
if(cateList !=null){
for (GoodsCategory category : cateList) {
if(category.getName().equals(spuItem.getCategoryName())){
String[] cateIds = category.getLevelPath().split("_");
if(cateIds.length==3){
spu.setCategoryFirst(cateIds[0]);
spu.setCategorySecond(cateIds[1]);
spu.setCategoryThird(cateIds[2]);
spu.setCategoryLast(cateIds[2]);
}
}
}
}
}
}

41
src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsSpuImportBo.java

@ -0,0 +1,41 @@
package com.qs.serve.modules.goods.entity.bo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.qs.serve.common.framework.mybatis.handler.meta.SplitStringTypeHandler;
import lombok.Data;
import org.apache.ibatis.type.JdbcType;
import java.util.List;
/**
* 口味品类
* @author YenHex
* @since 2022/10/10
*/
@Data
public class GoodsSpuImportBo {
private List<SpuItem> spuList;
@Data
public static class SpuItem{
/**
* 操作方式save,update,delete
*/
private String opt;
/** 商品编码 */
private String spuCode;
/** 商品名字 */
private String name;
/** 分类名称 */
private String categoryName;
private String errMsg;
}
}

2
src/main/java/com/qs/serve/modules/sys/entity/SysSyncLog.java

@ -58,6 +58,8 @@ public class SysSyncLog implements Serializable {
/** 是否需要处理 */
private Integer todoState;
private Integer tryTimes;
/** 备注 */
@Length(max = 255,message = "备注长度不能超过255字")
private String remark;

13
src/main/java/com/qs/serve/modules/third/PortalController.java

@ -13,6 +13,7 @@ import com.qs.serve.modules.seeyon.service.XiaoLuTonService;
import com.qs.serve.modules.sys.service.SysUserLoginService;
import com.qs.serve.modules.third.entity.AptPolicyPayment;
import com.qs.serve.modules.third.entity.param.SSOLoginParam;
import com.qs.serve.modules.vtb.service.VtbVerificationService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
@ -35,6 +36,7 @@ import java.util.Map;
public class PortalController {
private SysUserLoginService sysUserLoginService;
private VtbVerificationService vtbVerificationService;
/**
* 单点登录
@ -76,4 +78,15 @@ public class PortalController {
}
/**
* 同步错误的支付
* @apiNote headers+ => tenant-id = 001 \n headers+ => v-token = MD5.encrypt('jslApi-'+yyyy-MM-dd)
* @return
*/
@RequestMapping("/syncErrorPay")
public R<?> sync(){
vtbVerificationService.toPayRequest();
return R.ok("sync_success");
}
}

5
src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationService.java

@ -84,5 +84,10 @@ public interface VtbVerificationService extends IService<VtbVerification> {
*/
boolean checkCommitting(Long activityId);
/**
* 支付请求
*/
void toPayRequest();
}

27
src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java

@ -917,7 +917,7 @@ public class VtbVerificationServiceImpl extends ServiceImpl<VtbVerificationMappe
if(activity.getActivityState().equals(TbsActivityState.STATE_1_Baning)){
Assert.throwEx("活动冻结中");
}
if(activity.getReleaseFlag().equals(1)||activity.getActivityState().equals(TbsActivityState.STATE_4_Release)){
if((activity.getReleaseFlag()!=null&&activity.getReleaseFlag().equals(1))||activity.getActivityState().equals(TbsActivityState.STATE_4_Release)){
Assert.throwEx("费用已释放");
}
if(activity.getFinishedFlag().equals(1)){
@ -1263,5 +1263,30 @@ public class VtbVerificationServiceImpl extends ServiceImpl<VtbVerificationMappe
lqw.eq(VtbVerification::getVerificationState, VtbVerificationState.Commiting.getCode());
return this.count(lqw)>0;
}
@Override
public void toPayRequest() {
String COST_TO_PAY_API = projectApisProperties.getCostToPay();
LambdaQueryWrapper<SysSyncLog> lqw = new LambdaQueryWrapper<>();
lqw.eq(SysSyncLog::getFrom,"to支付请求")
.eq(SysSyncLog::getSuccessStatus,0)
.eq(SysSyncLog::getTodoState,1)
//重试两次
.lt(SysSyncLog::getTryTimes,3);
List<SysSyncLog> sysSyncLogs = sysSyncLogService.list(lqw);
for (SysSyncLog syncLog : sysSyncLogs) {
SysSyncLog syncLogBack = ThirtyVerificationUtil.requestToPayment("to支付请求",syncLog.getRemark(), COST_TO_PAY_API, syncLog.getRequestJson());
if(syncLogBack.getSuccessStatus().equals(1)){
syncLog.setSuccessStatus(1);
sysSyncLogService.updateById(syncLog);
}else {
syncLog.setFailReason(syncLogBack.getFailReason()+"");
syncLog.setTryTimes(syncLog.getTryTimes()+1);
syncLog.setUpdateTime(null);
sysSyncLogService.updateById(syncLog);
}
}
}
}

Loading…
Cancel
Save