diff --git a/blade-service-api/logpm-basic-api/src/main/java/com/logpm/basic/feign/IBasicMaterialClient.java b/blade-service-api/logpm-basic-api/src/main/java/com/logpm/basic/feign/IBasicMaterialClient.java index 37c7d79d4..2f3e49097 100644 --- a/blade-service-api/logpm-basic-api/src/main/java/com/logpm/basic/feign/IBasicMaterialClient.java +++ b/blade-service-api/logpm-basic-api/src/main/java/com/logpm/basic/feign/IBasicMaterialClient.java @@ -22,6 +22,8 @@ import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; +import java.util.List; + /** * 物料基础信息 Feign接口类 * @@ -29,12 +31,13 @@ import org.springframework.web.bind.annotation.RequestParam; * @since 2023-05-26 */ @FeignClient( - value = "blade-basicMaterial" + value = "logpm-basic-cyz" ) public interface IBasicMaterialClient { String API_PREFIX = "material/client"; String TOP = API_PREFIX + "/top"; + String GETMATERIAL = API_PREFIX + "/getMaterial"; /** * 获取物料基础信息列表 @@ -46,4 +49,14 @@ public interface IBasicMaterialClient { @GetMapping(TOP) BladePage materialTop(@RequestParam("current") Integer current, @RequestParam("size") Integer size); + /** + * 查询某个物理信息 + * @param productCode + * @param name + * @param sku + * @return + */ + @GetMapping(GETMATERIAL) + BasicMaterialEntity getMaterialOwn(@RequestParam("productCode") String productCode, @RequestParam("name") String name, @RequestParam("sku") String sku); + } diff --git a/blade-service-api/logpm-basicdata-api/src/main/java/com/logpm/basicdata/entity/BasicdataClientEntity.java b/blade-service-api/logpm-basicdata-api/src/main/java/com/logpm/basicdata/entity/BasicdataClientEntity.java index 96e181915..7a2994284 100644 --- a/blade-service-api/logpm-basicdata-api/src/main/java/com/logpm/basicdata/entity/BasicdataClientEntity.java +++ b/blade-service-api/logpm-basicdata-api/src/main/java/com/logpm/basicdata/entity/BasicdataClientEntity.java @@ -70,6 +70,11 @@ public class BasicdataClientEntity extends TenantEntity { */ @ApiModelProperty(value = "客户名称") private String clientName; + /** + * 客户编码 + */ + @ApiModelProperty(value = "客户编码") + private String clientCode; /** * 客户类型 1 工厂 2 商场 3装饰 4个人 */ diff --git a/blade-service-api/logpm-basicdata-api/src/main/java/com/logpm/basicdata/feign/IBasicdataClientClient.java b/blade-service-api/logpm-basicdata-api/src/main/java/com/logpm/basicdata/feign/IBasicdataClientClient.java index a98485185..9c787d6be 100644 --- a/blade-service-api/logpm-basicdata-api/src/main/java/com/logpm/basicdata/feign/IBasicdataClientClient.java +++ b/blade-service-api/logpm-basicdata-api/src/main/java/com/logpm/basicdata/feign/IBasicdataClientClient.java @@ -30,12 +30,13 @@ import org.springframework.web.bind.annotation.RequestParam; * @since 2023-05-16 */ @FeignClient( - value = ModuleNameConstant.APPLICATION_BASICDATA_NAME + value = "logpm-basicdata-cyz" ) public interface IBasicdataClientClient { String API_PREFIX = "/client"; String TOP = API_PREFIX + "/top2"; + String GETCUSTOMER = API_PREFIX + "/customer"; /** * 获取基础客户表列表 @@ -49,4 +50,9 @@ public interface IBasicdataClientClient { @GetMapping(API_PREFIX+"/findByName") BasicdataClientEntity findByName(@RequestParam String customerName); + + + + @GetMapping(GETCUSTOMER) + BasicdataClientEntity getCustomer(@RequestParam("customerName") String customerName,@RequestParam("customerCode") String customerCode); } diff --git a/blade-service-api/logpm-basicdata-api/src/main/java/com/logpm/basicdata/feign/IBasicdataWarehouseClient.java b/blade-service-api/logpm-basicdata-api/src/main/java/com/logpm/basicdata/feign/IBasicdataWarehouseClient.java index b2cec6f94..6a27fbd71 100644 --- a/blade-service-api/logpm-basicdata-api/src/main/java/com/logpm/basicdata/feign/IBasicdataWarehouseClient.java +++ b/blade-service-api/logpm-basicdata-api/src/main/java/com/logpm/basicdata/feign/IBasicdataWarehouseClient.java @@ -31,12 +31,13 @@ import org.springframework.web.bind.annotation.RequestParam; * @since 2023-05-15 */ @FeignClient( - value = ModuleNameConstant.APPLICATION_BASICDATA_NAME + value ="logpm-basicdata-cyz" ) public interface IBasicdataWarehouseClient { String API_PREFIX = "warehouse/client"; String TOP = API_PREFIX + "/top"; + String GETWAREHOUSE = API_PREFIX + "/warehouse"; /** * 获取仓库列表 @@ -50,4 +51,13 @@ public interface IBasicdataWarehouseClient { @GetMapping(API_PREFIX+"/findByName") BasicdataWarehouseEntity findByName(@RequestParam String destinationWarehouse); + + /** + * 查询仓库信息 + * @param name + * @param warehouseCode + * @return + */ + @GetMapping(GETWAREHOUSE) + BasicdataWarehouseEntity getWarehouse(@RequestParam("name") String name,@RequestParam("warehouseCode") String warehouseCode); } diff --git a/blade-service-api/logpm-warehouse-api/src/main/java/com/logpm/warehouse/entity/WarehouseWarehousingEntryEntity.java b/blade-service-api/logpm-warehouse-api/src/main/java/com/logpm/warehouse/entity/WarehouseWarehousingEntryEntity.java index 00a36f236..5bb896603 100644 --- a/blade-service-api/logpm-warehouse-api/src/main/java/com/logpm/warehouse/entity/WarehouseWarehousingEntryEntity.java +++ b/blade-service-api/logpm-warehouse-api/src/main/java/com/logpm/warehouse/entity/WarehouseWarehousingEntryEntity.java @@ -73,6 +73,11 @@ public class WarehouseWarehousingEntryEntity extends TenantEntity { @ApiModelProperty(value = "入库时间") @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd") private Date receiptDate; + /** + * 客户编码 + */ + @ApiModelProperty(value = "客户编码") + private String customerCode; /** * 客户名称 */ @@ -123,6 +128,12 @@ public class WarehouseWarehousingEntryEntity extends TenantEntity { */ @ApiModelProperty(value = "入库状态") private String conditions; + + /** + * 存放位置 + */ + @ApiModelProperty(value = "存放位置") + private String positions; /** * 客户ID */ diff --git a/blade-service/logpm-basic/src/main/java/com/logpm/basic/feign/BasicMaterialClient.java b/blade-service/logpm-basic/src/main/java/com/logpm/basic/feign/BasicMaterialClient.java index dd8bcb69c..24da3947b 100644 --- a/blade-service/logpm-basic/src/main/java/com/logpm/basic/feign/BasicMaterialClient.java +++ b/blade-service/logpm-basic/src/main/java/com/logpm/basic/feign/BasicMaterialClient.java @@ -17,6 +17,8 @@ package com.logpm.basic.feign; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.AllArgsConstructor; import org.springblade.core.mp.support.BladePage; import org.springblade.core.mp.support.Condition; @@ -27,6 +29,8 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import springfox.documentation.annotations.ApiIgnore; +import java.util.List; + /** * 物料基础信息 Feign实现类 * @@ -50,4 +54,21 @@ public class BasicMaterialClient implements IBasicMaterialClient { return BladePage.of(page); } + /** + * 查询某个物料 + * @param productCode + * @param name + * @param sku + * @return + */ + @Override + public BasicMaterialEntity getMaterialOwn(String productCode, String name, String sku) { + BasicMaterialEntity one = basicMaterialService.getOne(Wrappers.query().lambda() + .eq(StringUtils.isNotEmpty(productCode), BasicMaterialEntity::getProductCode, productCode) + .eq(StringUtils.isNotEmpty(name), BasicMaterialEntity::getName, name) + .eq(StringUtils.isNotEmpty(sku), BasicMaterialEntity::getSku, sku) + ); + return one; + } + } diff --git a/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/feign/BasicdataClientClient.java b/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/feign/BasicdataClientClient.java index ac17d71e0..9373cab4e 100644 --- a/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/feign/BasicdataClientClient.java +++ b/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/feign/BasicdataClientClient.java @@ -18,6 +18,8 @@ package com.logpm.basicdata.feign; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.AllArgsConstructor; import org.springblade.core.mp.support.BladePage; import org.springblade.core.mp.support.Condition; @@ -58,4 +60,18 @@ public class BasicdataClientClient implements IBasicdataClientClient { return basicdataClientService.getOne(queryWrapper); } + /** + * 查询客户信息 + * @param customerName + * @param customerCode + * @return + */ + @Override + public BasicdataClientEntity getCustomer(String customerName, String customerCode) { + return basicdataClientService.getOne(Wrappers.query().lambda() + .eq(StringUtils.isNotEmpty(customerName),BasicdataClientEntity::getClientName,customerName) + .eq(StringUtils.isNotEmpty(customerCode),BasicdataClientEntity::getReserve1,customerCode) + ); + } + } diff --git a/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/feign/BasicdataWarehouseClient.java b/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/feign/BasicdataWarehouseClient.java index c205c1286..45a0ed040 100644 --- a/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/feign/BasicdataWarehouseClient.java +++ b/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/feign/BasicdataWarehouseClient.java @@ -18,6 +18,8 @@ package com.logpm.basicdata.feign; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.logpm.basicdata.entity.BasicdataWarehouseEntity; import com.logpm.basicdata.service.IBasicdataWarehouseService; import lombok.AllArgsConstructor; @@ -58,4 +60,18 @@ public class BasicdataWarehouseClient implements IBasicdataWarehouseClient { return warehouseWarehouseService.getOne(queryWrapper); } + /** + * 查询仓库数据 + * @param name + * @param warehouseCode + * @return + */ + @Override + public BasicdataWarehouseEntity getWarehouse(String name, String warehouseCode) { + return warehouseWarehouseService.getOne(Wrappers.query().lambda() + .eq(StringUtils.isNotEmpty(name),BasicdataWarehouseEntity::getName,name) + .eq(StringUtils.isNotEmpty(warehouseCode),BasicdataWarehouseEntity::getWarehouseCode,warehouseCode) + ); + } + } diff --git a/blade-service/logpm-warehouse/pom.xml b/blade-service/logpm-warehouse/pom.xml index 1e95d65b9..2088f96b1 100644 --- a/blade-service/logpm-warehouse/pom.xml +++ b/blade-service/logpm-warehouse/pom.xml @@ -57,6 +57,16 @@ 3.1.0.RELEASE compile + + org.springblade + blade-dict-api + ${bladex.project.version} + + + org.springblade + logpm-basic-api + ${bladex.project.version} + org.springblade logpm-old-project-api diff --git a/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/excel/WarehousingEntryDetailExcel.java b/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/excel/WarehousingEntryDetailExcel.java index 74e59bce4..6a009ec0b 100644 --- a/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/excel/WarehousingEntryDetailExcel.java +++ b/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/excel/WarehousingEntryDetailExcel.java @@ -4,6 +4,7 @@ import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ColumnWidth; import com.alibaba.excel.annotation.write.style.ContentRowHeight; import com.alibaba.excel.annotation.write.style.HeadRowHeight; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import java.io.Serializable; @@ -33,7 +34,15 @@ public class WarehousingEntryDetailExcel implements Serializable { */ @ColumnWidth(20) @ExcelProperty("入库时间") + @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd") private Date receiptDate; + /** + * 客户编码 + */ + @ColumnWidth(20) + @ExcelProperty("客户编码") + private String customerCode; + /** * 客户名称 */ @@ -62,8 +71,14 @@ public class WarehousingEntryDetailExcel implements Serializable { * 所在仓库 */ @ColumnWidth(20) - @ExcelProperty("仓库") + @ExcelProperty("仓库名称") private String warehouse; + /** + * 所在仓库 + */ + @ColumnWidth(20) + @ExcelProperty("仓库编码") + private String warehouseCode; /** * 物流车次 */ @@ -142,7 +157,7 @@ public class WarehousingEntryDetailExcel implements Serializable { */ @ColumnWidth(20) @ExcelProperty("入库数量") - private String createInventory; + private Integer createInventory; /** * 存放位置 */ diff --git a/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/service/impl/WarehouseWarehousingEntryServiceImpl.java b/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/service/impl/WarehouseWarehousingEntryServiceImpl.java index 3247fc683..1700b048a 100644 --- a/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/service/impl/WarehouseWarehousingEntryServiceImpl.java +++ b/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/service/impl/WarehouseWarehousingEntryServiceImpl.java @@ -16,9 +16,17 @@ */ package com.logpm.warehouse.service.impl; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.google.common.eventbus.AllowConcurrentEvents; +import com.logpm.basic.entity.BasicMaterialEntity; +import com.logpm.basic.feign.IBasicMaterialClient; +import com.logpm.basicdata.entity.BasicdataClientEntity; +import com.logpm.basicdata.entity.BasicdataWarehouseEntity; +import com.logpm.basicdata.feign.IBasicdataClientClient; +import com.logpm.basicdata.feign.IBasicdataWarehouseClient; import com.logpm.distribution.entity.DistributionStockListEntity; import com.logpm.distribution.feign.IDistributionStockListClient; import com.logpm.distribution.vo.DistributionStockListVO; @@ -32,9 +40,13 @@ import com.logpm.warehouse.excel.WarehouseWarehousingEntryExcel; import com.logpm.warehouse.mapper.WarehouseWarehousingEntryMapper; import com.logpm.warehouse.service.IWarehouseWarehousingEntryService; import lombok.AllArgsConstructor; +import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.support.Condition; +import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.BeanUtil; import org.springblade.core.tool.utils.Func; +import org.springblade.system.entity.DictBiz; +import org.springblade.system.feign.IDictBizClient; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.Wrapper; @@ -42,9 +54,9 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseServiceImpl; import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; +import java.util.*; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.stream.Collectors; /** * 仓库入库单 服务实现类 @@ -57,6 +69,10 @@ import java.util.List; public class WarehouseWarehousingEntryServiceImpl extends BaseServiceImpl implements IWarehouseWarehousingEntryService { private final IWarehouseWarehousingDetailService warehouseWarehousingDetailService; private final IDistributionStockListClient distributionStockListClient; + private final IDictBizClient dictBizClient; + private final IBasicMaterialClient basicMaterialClient; + private final IBasicdataClientClient basicdataClientClient; + private final IBasicdataWarehouseClient basicdataWarehouseClient; @@ -84,17 +100,19 @@ public class WarehouseWarehousingEntryServiceImpl extends BaseServiceImpl detailEntityList = new ArrayList<>(); - //修改 - this.updateById(warehouseWarehousingEntry); List list1 = warehouseWarehousingDetailService.list(Wrappers.query().lambda() .eq(WarehouseWarehousingDetailEntity::getWarehousingEntryId, warehouseWarehousingEntry.getId()) ); + AtomicBoolean ba = new AtomicBoolean(false); list1.forEach( i ->{ boolean b = list.stream().anyMatch(w -> w.getMaterialId().equals(i.getMaterialId())); if(b){ Iterator iterator = list.iterator(); while (iterator.hasNext()){ WarehouseWarehousingDetailEntity next = iterator.next(); + if(!i.getActualReceipt().equals(i.getCreateInventory())){ + ba.set(true); + } if(next.getMaterialId().equals(i.getMaterialId())){ //修改 WarehouseWarehousingDetailEntity detailEntity = new WarehouseWarehousingDetailEntity(); @@ -104,6 +122,7 @@ public class WarehouseWarehousingEntryServiceImpl extends BaseServiceImpl 0){ //删除多余的 warehouseWarehousingDetailService.deleteLogic(detailEntityList); @@ -243,9 +267,96 @@ public class WarehouseWarehousingEntryServiceImpl extends BaseServiceImpl data, Boolean isCovered) { - data.forEach( i ->{ - System.out.println("smsmmsmsmsmsmsmmsmsmsmmsmsms"+i); + //分组 + Map> collect = data.stream().map(x -> { + return x; + }).collect(Collectors.groupingBy(o ->{ +// System.out.println("====<<<<<<<<"+o); + WarehouseWarehousingEntryEntity entryEntity = new WarehouseWarehousingEntryEntity(); + entryEntity.setReceiptBatch(o.getReceiptBatch()); + entryEntity.setReceiptDate(o.getReceiptDate()); + entryEntity.setConditions("1"); + BasicdataClientEntity customer = basicdataClientClient.getCustomer(o.getCustomerName(), o.getCustomerCode()); + if(Func.isNotEmpty(customer)){ + if(StringUtils.isNotBlank(o.getStoreName())){ + BasicdataClientEntity customer1 = basicdataClientClient.findByName(o.getStoreName()); + if(Func.isNotEmpty(customer1)){ + entryEntity.setStoreId(customer1.getId()); + entryEntity.setStoreName(o.getStoreName()); + }else{ + throw new ServiceException(o.getCustomerName()+o.getCustomerCode()+"门店信息不存在!!请维护门店数据!!!"); + } + } + entryEntity.setClientId(customer.getId());//客户id + entryEntity.setCustomerName(o.getCustomerName()); + entryEntity.setCustomerCode(o.getCustomerCode()); + }else{ + throw new ServiceException(o.getCustomerName()+o.getCustomerCode()+"客户信息不存在!!请维护客户数据!!!"); + } + BasicdataWarehouseEntity warehouse = basicdataWarehouseClient.getWarehouse(o.getWarehouse(), o.getWarehouseCode()); + if(Func.isNotEmpty(warehouse)){ + entryEntity.setWarehouseId(warehouse.getId());//仓库id + entryEntity.setWarehouse(o.getWarehouse());//仓库名称 + }else{ + throw new ServiceException(o.getCustomerName()+o.getCustomerCode()+"仓库信息不存在!!请维护仓库数据!!!"); + } + + entryEntity.setTrainNumber(o.getTrainNumber()); //仓库名称 + entryEntity.setLicensePlate(o.getLicensePlate()); //仓库名称 + entryEntity.setSource("导入"); + R> distriType = dictBizClient.getList("distribution_type"); + if(ObjectUtils.isNotNull(distriType)){ + List data1 = distriType.getData(); + DictBiz dictBiz = data1.stream().filter(da -> { + return o.getServiceType().equals(da.getDictValue()); + }).findAny().get(); + entryEntity.setServiceType(dictBiz.getDictKey());//仓库名称 + } + entryEntity.setPositions(o.getPositions() ); + String s = JSONObject.toJSONString(entryEntity); + return s; + } , Collectors.toList())); + + collect.forEach((k,v) ->{ +// System.out.println(">>>>>>>>>>>+++++"+k+v); + WarehouseWarehousingEntryEntity entryEntity = JSON.parseObject(k, WarehouseWarehousingEntryEntity.class); +// WarehouseWarehousingEntryEntity entryEntity = JSONObject.parseObject(JSONObject.toJSONString(k), WarehouseWarehousingEntryEntity.class); + this.save(entryEntity); + List detailEntityList = new ArrayList<>(); + v.forEach( i ->{ + WarehouseWarehousingDetailEntity detail = new WarehouseWarehousingDetailEntity(); + detail.setConditions("1"); + detail.setSku(i.getSku()); + detail.setProductCode(i.getProductCode()); + detail.setProductName(i.getProductName()); + detail.setProductCode(i.getProductCode()); + detail.setProductUnit(i.getProductUnit()); + detail.setPackagingNumber(i.getPackagingNumber()); + detail.setPackagingSpecifications(i.getPackagingSpecifications()); + detail.setCreateInventory(i.getCreateInventory()); + detail.setWarehousingEntryId(entryEntity.getId()); + detail.setActualReceipt(0); + BasicMaterialEntity materialOwn = basicMaterialClient.getMaterialOwn(i.getProductCode(), i.getProductName(), i.getSku()); + if(Func.isNotEmpty(materialOwn)){ + detail.setMaterialId(materialOwn.getId());//物料ID + }else{ + throw new ServiceException(i.getProductName()+i.getProductCode()+i.getSku()+"物料信息不存在!!请维护基础数据!!!"); + } + if(detailEntityList.size() > 0){ + boolean b = detailEntityList.stream().anyMatch(a -> a.getProductCode().equals(detail.getProductCode()) && a.getProductName().equals(detail.getProductName()) && a.getSku().equals(detail.getSku())); + if(b){ + detailEntityList.stream().filter(a -> a.getProductCode().equals(detail.getProductCode()) && a.getProductName().equals(detail.getProductName()) && a.getSku().equals(detail.getSku())).forEach( f->f.setCreateInventory(f.getCreateInventory()+detail.getCreateInventory())); + }else{ + detailEntityList.add(detail); + } + + }else{ + detailEntityList.add(detail); + } + }); + warehouseWarehousingDetailService.saveBatch(detailEntityList); }); }