diff --git a/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpuController.java b/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpuController.java index 2f3c4c17..fd96ae56 100644 --- a/src/main/java/com/qs/serve/modules/goods/controller/GoodsSpuController.java +++ b/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 skuCodes = toSkuKeys.stream().map(OmsSpuToSkuKey::getInvCode).collect(Collectors.toList()); - InventoryCusPriceQuery query = new InventoryCusPriceQuery(); - query.setCusCode(supplierCode); - query.setInvCodes(skuCodes); - R 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 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 spuCodes = new ArrayList<>(); + List 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 spuLqw = new LambdaQueryWrapper<>(); + spuLqw.in(GoodsSpu::getSpuCode,spuCodes); + List spuList = goodsSpuService.list(spuLqw); + + List cateList = null; + if(cateNames.size()>0){ + LambdaQueryWrapper 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 rmIds = new ArrayList<>(); + List spuUpdateList = new ArrayList<>(); + List 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 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]); + } + } + } + } + } } diff --git a/src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsSpuImportBo.java b/src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsSpuImportBo.java new file mode 100644 index 00000000..46520a6a --- /dev/null +++ b/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 spuList; + + @Data + public static class SpuItem{ + /** + * 操作方式:save,update,delete + */ + private String opt; + + /** 商品编码 */ + private String spuCode; + + /** 商品名字 */ + private String name; + + /** 分类名称 */ + private String categoryName; + + private String errMsg; + } + +} diff --git a/src/main/java/com/qs/serve/modules/sys/entity/SysSyncLog.java b/src/main/java/com/qs/serve/modules/sys/entity/SysSyncLog.java index 21f93b1e..f4c22cdd 100644 --- a/src/main/java/com/qs/serve/modules/sys/entity/SysSyncLog.java +++ b/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; diff --git a/src/main/java/com/qs/serve/modules/third/PortalController.java b/src/main/java/com/qs/serve/modules/third/PortalController.java index e18705ef..31d2481a 100644 --- a/src/main/java/com/qs/serve/modules/third/PortalController.java +++ b/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"); + } + } diff --git a/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationService.java b/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationService.java index 0a49931e..5d013ab8 100644 --- a/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationService.java +++ b/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationService.java @@ -84,5 +84,10 @@ public interface VtbVerificationService extends IService { */ boolean checkCommitting(Long activityId); + /** + * 支付请求 + */ + void toPayRequest(); + } diff --git a/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java b/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java index c0cad725..81532785 100644 --- a/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java @@ -917,7 +917,7 @@ public class VtbVerificationServiceImpl extends ServiceImpl0; } + + @Override + public void toPayRequest() { + String COST_TO_PAY_API = projectApisProperties.getCostToPay(); + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(SysSyncLog::getFrom,"to支付请求") + .eq(SysSyncLog::getSuccessStatus,0) + .eq(SysSyncLog::getTodoState,1) + //重试两次 + .lt(SysSyncLog::getTryTimes,3); + List 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); + } + } + } + }