|
|
@@ -26,7 +26,13 @@ import org.springblade.core.mp.support.Query;
|
|
|
import org.springblade.core.secure.BladeUser;
|
|
|
import org.springblade.core.secure.utils.AuthUtil;
|
|
|
import org.springblade.core.tool.api.R;
|
|
|
+import org.springblade.core.tool.utils.BeanUtil;
|
|
|
+import org.springblade.core.tool.utils.ObjectUtil;
|
|
|
import org.springblade.salesPart.entity.PjCorpsDesc;
|
|
|
+import org.springblade.salesPart.entity.PjGoodsDesc;
|
|
|
+import org.springblade.salesPart.entity.PjOrderItems;
|
|
|
+import org.springblade.salesPart.entity.PjProductLaunch;
|
|
|
+import org.springblade.salesPart.excel.ShipItemImportXSCodeExcel;
|
|
|
import org.springblade.salesPart.feign.IPJCorpClient;
|
|
|
import org.springblade.system.entity.Dept;
|
|
|
import org.springblade.system.feign.ISysClient;
|
|
|
@@ -62,23 +68,23 @@ public class CenterOrderPlanServiceImpl extends ServiceImpl<CenterOrderPlanMappe
|
|
|
|
|
|
private final ICenterShipService centerShipService;
|
|
|
|
|
|
- private final ICenterShipItemsService centerShipItemsService;
|
|
|
-
|
|
|
private final ICenterShipCostService centerShipCostService;
|
|
|
|
|
|
private final ICenterStockDescService centerStockDescService;
|
|
|
|
|
|
+ private final IPJCorpClient pjCorpClient;
|
|
|
+
|
|
|
|
|
|
public CenterOrderPlanServiceImpl(CenterOrderPlanItemMapper centerOrderPlanItemMapper, IPJCorpClient corpClient,
|
|
|
ICenterOrderPlanItemService centerOrderPlanItemService, ISysClient sysClient,
|
|
|
- ICenterShipService centerShipService, ICenterShipItemsService centerShipItemsService,
|
|
|
- ICenterShipCostService centerShipCostService, ICenterStockDescService centerStockDescService) {
|
|
|
+ ICenterShipService centerShipService, ICenterShipCostService centerShipCostService,
|
|
|
+ ICenterStockDescService centerStockDescService, IPJCorpClient pjCorpClient) {
|
|
|
this.centerOrderPlanItemMapper = centerOrderPlanItemMapper;
|
|
|
this.corpClient = corpClient;
|
|
|
this.centerOrderPlanItemService = centerOrderPlanItemService;
|
|
|
this.sysClient = sysClient;
|
|
|
this.centerShipService = centerShipService;
|
|
|
- this.centerShipItemsService = centerShipItemsService;
|
|
|
+ this.pjCorpClient = pjCorpClient;
|
|
|
this.centerShipCostService = centerShipCostService;
|
|
|
this.centerStockDescService = centerStockDescService;
|
|
|
|
|
|
@@ -198,16 +204,17 @@ public class CenterOrderPlanServiceImpl extends ServiceImpl<CenterOrderPlanMappe
|
|
|
// centerStockDescService
|
|
|
if(CommonEnum.ONE.info.equals(centerOrderPlanVo.getStatus())) {
|
|
|
// 提交生成库存
|
|
|
+ List<CenterOrderPlanItem> planItemsStockList = centerOrderPlanItemList.stream().filter(e -> !NumberEnum.ONE.number.equals(e.getIsDeleted())).collect(Collectors.toList());
|
|
|
List<CenterStockDesc> centerStockDescList = centerStockDescService.list(new LambdaQueryWrapper<CenterStockDesc>()
|
|
|
.eq(CenterStockDesc::getTenantId, bladeUser.getTenantId())
|
|
|
.eq(CenterStockDesc::getIsDeleted, 0)
|
|
|
+ .eq(CenterStockDesc::getCustomerId, insertCenterOrderPlan.getCustomerId())
|
|
|
.eq(CenterStockDesc::getStorageId, insertCenterOrderPlan.getStorageId())
|
|
|
- .in(CenterStockDesc::getGoodsId, centerOrderPlanItemList.stream().map(CenterOrderPlanItem::getGoodsId).distinct().collect(Collectors.toList())));
|
|
|
+ .in(CenterStockDesc::getGoodsId, planItemsStockList.stream().map(CenterOrderPlanItem::getGoodsId).distinct().collect(Collectors.toList())));
|
|
|
List<CenterStockDesc> insertOrUpdateList = new ArrayList<>();
|
|
|
- for (CenterOrderPlanItem planItem : centerOrderPlanItemList) {
|
|
|
- CenterStockDesc desc = centerStockDescList.stream().filter(item -> item.getPlanId().equals(insertCenterOrderPlan.getId())
|
|
|
- && item.getRegionId().equals(planItem.getRegionId())
|
|
|
- && item.getGoodsId().equals(planItem.getGoodsId()) && item.getDot().equals(planItem.getDot())).findFirst().orElse(new CenterStockDesc());
|
|
|
+ for (CenterOrderPlanItem planItem : planItemsStockList) {
|
|
|
+ CenterStockDesc desc = centerStockDescList.stream().filter(item -> item.getPlanId().equals(insertCenterOrderPlan.getId()) && item.getRegionId().equals(planItem.getRegionId())
|
|
|
+ && item.getGoodsId().equals(planItem.getGoodsId()) && item.getDot().equals(planItem.getDot())).findFirst().orElse(new CenterStockDesc());
|
|
|
// TODO: 应加一步redis锁,避免并发问题
|
|
|
insertOrUpdateList.add(desc);
|
|
|
if (Objects.isNull(desc.getId())) {
|
|
|
@@ -356,10 +363,11 @@ public class CenterOrderPlanServiceImpl extends ServiceImpl<CenterOrderPlanMappe
|
|
|
List<CenterStockDesc> centerStockDescList = centerStockDescService.list(new LambdaQueryWrapper<CenterStockDesc>()
|
|
|
.eq(CenterStockDesc::getTenantId, bladeUser.getTenantId())
|
|
|
.eq(CenterStockDesc::getIsDeleted, 0)
|
|
|
+ .eq(CenterStockDesc::getCustomerId, centerOrderPlanVo.getCustomerId())
|
|
|
.eq(CenterStockDesc::getStorageId, insertCenterOrderPlan.getStorageId())
|
|
|
.in(CenterStockDesc::getGoodsId, centerOrderPlanItemList.stream().map(CenterOrderPlanItem::getGoodsId).distinct().collect(Collectors.toList())));
|
|
|
List<CenterStockDesc> insertOrUpdateList = new ArrayList<>();
|
|
|
- Map<String, List<CenterOrderPlanItem>> mapList = centerOrderPlanItemList.stream().filter(item -> NumberEnum.Zero.number.equals(item.getIsDeleted()))
|
|
|
+ Map<String, List<CenterOrderPlanItem>> mapList = centerOrderPlanItemList.stream().filter(item -> !NumberEnum.ONE.number.equals(item.getIsDeleted()))
|
|
|
.collect(Collectors.groupingBy(plan -> plan.getBillId() + "-" + plan.getGoodsId() + "-" + plan.getDot() + "-" + plan.getRegionId()));
|
|
|
for (Map.Entry<String, List<CenterOrderPlanItem>> mapData : mapList.entrySet()) {
|
|
|
String[] params = mapData.getKey().split("-");
|
|
|
@@ -387,11 +395,65 @@ public class CenterOrderPlanServiceImpl extends ServiceImpl<CenterOrderPlanMappe
|
|
|
return R.data(String.valueOf(insertCenterOrderPlan.getId()));
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public R importCenterPlanItemCode(List<ShipItemImportXSCodeExcel> excelList) {
|
|
|
+ List<PjOrderItems> list = new ArrayList<>();
|
|
|
+ List<String> codesList = excelList.stream().map(ShipItemImportXSCodeExcel::getCode).distinct()
|
|
|
+ .filter(Objects::nonNull).collect(Collectors.toList());
|
|
|
+ if (excelList.size() != codesList.size()) {
|
|
|
+ throw new RuntimeException("导入数据存在重复商品编码,请处理后再导入");
|
|
|
+ }
|
|
|
+ BladeUser bladeUser = AuthUtil.getUser();
|
|
|
+ List<PjGoodsDesc> goodsDescList = pjCorpClient.selectGoodsByCodeAndTenantId(bladeUser.getTenantId(), codesList);
|
|
|
+ if (CollectionUtils.isEmpty(goodsDescList)) {
|
|
|
+ return R.fail("未找到商品数据,请核实后重试");
|
|
|
+ }
|
|
|
+ StringBuilder text = new StringBuilder();
|
|
|
+ int itemNum = 1;
|
|
|
+ for (ShipItemImportXSCodeExcel excelItem : excelList) {
|
|
|
+ boolean add = true;
|
|
|
+ if (!StringUtils.hasText(excelItem.getCode())) {
|
|
|
+ text.append("第").append(itemNum).append("行,编码为空").append("\n");
|
|
|
+ add = false;
|
|
|
+ }
|
|
|
+ if (ObjectUtil.isEmpty(excelItem.getGoodsNum())) {
|
|
|
+ text.append("第").append(itemNum).append("行,数量为空").append("\n");
|
|
|
+ add = false;
|
|
|
+ }
|
|
|
+ PjOrderItems item = new PjOrderItems();
|
|
|
+ item.setGoodsNum(excelItem.getGoodsNum());
|
|
|
+ item.setGoodsNo(excelItem.getCode());
|
|
|
+ item.setPrice(excelItem.getPrice());
|
|
|
+ PjGoodsDesc goodsDesc = goodsDescList.stream().filter(e -> e.getCode().equals(excelItem.getCode())).findFirst().orElse(null);
|
|
|
+ if (goodsDesc == null) {
|
|
|
+ text.append("第").append(itemNum).append("行,商品未找到").append("\n");
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ item.setUnits(goodsDesc.getUnit());
|
|
|
+ item.setGoodsId(goodsDesc.getId());
|
|
|
+ item.setGoodsName(goodsDesc.getCname());
|
|
|
+ item.setGoodsNo(goodsDesc.getCode());
|
|
|
+ item.setBrandId(goodsDesc.getBrandId());
|
|
|
+ item.setBrandName(goodsDesc.getBrandName());
|
|
|
+ item.setPropertyName(goodsDesc.getSpecificationAndModel());
|
|
|
+ item.setGoodsDescription(goodsDesc.getGoodsDescription());
|
|
|
+ item.setPattern(goodsDesc.getBrandItem());
|
|
|
+ item.setSendNum(BigDecimal.ZERO);
|
|
|
+ if (add) {
|
|
|
+ list.add(item);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return R.data(text.length() == 0 ? list : "导入失败:" + text);
|
|
|
+ }
|
|
|
+
|
|
|
private R<CenterOrderPlan> insertOrUpdatePlan (CenterOrderPlanVo centerOrderPlanVo, BladeUser bladeUser,
|
|
|
List<CenterOrderPlanItem> centerOrderPlanItemList) {
|
|
|
CenterOrderPlan insertCenterOrderPlan = new CenterOrderPlan();
|
|
|
BeanUtils.copyProperties(centerOrderPlanVo, insertCenterOrderPlan);
|
|
|
insertCenterOrderPlan.setNumberRows(centerOrderPlanItemList.size());
|
|
|
+ if (!CollectionUtils.isEmpty(centerOrderPlanItemList)) {
|
|
|
+ insertCenterOrderPlan.setGoodsTotalNum(centerOrderPlanItemList.stream().filter(item -> !NumberEnum.ONE.number.equals(item.getIsDeleted())).map(CenterOrderPlanItem::getGoodsNum).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ }
|
|
|
if (Objects.isNull(centerOrderPlanVo.getId())) {
|
|
|
R<Dept> dept = sysClient.getDept(Long.valueOf(bladeUser.getDeptId()));
|
|
|
if (!dept.isSuccess() || Objects.isNull(dept.getData())) {
|