diff --git a/blade-biz-common/src/main/java/org/springblade/common/constant/CodeNumConstant.java b/blade-biz-common/src/main/java/org/springblade/common/constant/CodeNumConstant.java index c494a2990..eef45456c 100644 --- a/blade-biz-common/src/main/java/org/springblade/common/constant/CodeNumConstant.java +++ b/blade-biz-common/src/main/java/org/springblade/common/constant/CodeNumConstant.java @@ -12,5 +12,6 @@ public class CodeNumConstant { public final static int SHELF = 8;//货架号 public final static int PSKH = 9;//配送客户号 public final static int ABNORMAL_ORDER = 10;//异常工单号 + public final static int TRUNKLINEBILLLADING = 11;//干线提货单号 } diff --git a/blade-biz-common/src/main/java/org/springblade/common/constant/DictBizConstant.java b/blade-biz-common/src/main/java/org/springblade/common/constant/DictBizConstant.java index 8617c95df..b9b7067c4 100644 --- a/blade-biz-common/src/main/java/org/springblade/common/constant/DictBizConstant.java +++ b/blade-biz-common/src/main/java/org/springblade/common/constant/DictBizConstant.java @@ -106,4 +106,9 @@ public class DictBizConstant { public static final String WAREHOUSE_QUEST_STATUS = "warehouse_quest_status"; //盘点任务 // --------------2023-11-04 --------------------- public static final String WAREHOUSE_RETENTION_TYPE = "warehouse_retention_type"; //滞留类型 + + + //---------------2023-11-07--------------------- + public static final String BILLLADING_CHARGE_TYPE = "billlading_charge_type"; //提货单计费方式 + } diff --git a/blade-service-api/logpm-trunkline-api/src/main/java/com/logpm/trunkline/dto/BillladingDTO.java b/blade-service-api/logpm-trunkline-api/src/main/java/com/logpm/trunkline/dto/BillladingDTO.java index affb80396..adfd24771 100644 --- a/blade-service-api/logpm-trunkline-api/src/main/java/com/logpm/trunkline/dto/BillladingDTO.java +++ b/blade-service-api/logpm-trunkline-api/src/main/java/com/logpm/trunkline/dto/BillladingDTO.java @@ -1,12 +1,21 @@ package com.logpm.trunkline.dto; import com.logpm.trunkline.entity.TrunklineBillladingEntity; +import com.logpm.trunkline.vo.TrunklineBillladingLineVO; +import com.logpm.trunkline.vo.TrunklineBillladingWaybillVO; import lombok.Data; +import java.util.ArrayList; +import java.util.List; + @Data public class BillladingDTO extends TrunklineBillladingEntity { private Integer pageNum; private Integer pageSize; + private List billladingLineList = new ArrayList<>(); + + private List billladingWaybillList = new ArrayList<>(); + } diff --git a/blade-service-api/logpm-trunkline-api/src/main/java/com/logpm/trunkline/entity/TrunklineBillladingEntity.java b/blade-service-api/logpm-trunkline-api/src/main/java/com/logpm/trunkline/entity/TrunklineBillladingEntity.java index 9f74fbb14..013b3087f 100644 --- a/blade-service-api/logpm-trunkline-api/src/main/java/com/logpm/trunkline/entity/TrunklineBillladingEntity.java +++ b/blade-service-api/logpm-trunkline-api/src/main/java/com/logpm/trunkline/entity/TrunklineBillladingEntity.java @@ -7,6 +7,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import org.springblade.core.tenant.mp.TenantEntity; +import java.math.BigDecimal; import java.util.Date; @Data @@ -62,28 +63,28 @@ public class TrunklineBillladingEntity extends TenantEntity { private String lineNameTitle ; /** 预计件数 */ @ApiModelProperty(name = "预计件数",notes = "") - private int planNum ; + private Integer planNum ; /** 预计重量 */ @ApiModelProperty(name = "预计重量",notes = "") - private Double planWeight ; + private BigDecimal planWeight ; /** 预计体积 */ @ApiModelProperty(name = "预计体积",notes = "") - private Double planVolume ; + private BigDecimal planVolume ; /** 实际件数 */ @ApiModelProperty(name = "实际件数",notes = "") private int realNum ; /** 实际重量 */ @ApiModelProperty(name = "实际重量",notes = "") - private Double realWeight ; + private BigDecimal realWeight ; /** 实际体积 */ @ApiModelProperty(name = "实际体积",notes = "") - private Double realVolume ; + private BigDecimal realVolume ; /** 计费模式 1按件 2按重量 3按体积 */ @ApiModelProperty(name = "计费模式 1按件 2按重量 3按体积",notes = "") private String chargeType ; /** 提货费用 */ @ApiModelProperty(name = "提货费用",notes = "") - private Double totalFee ; + private BigDecimal totalFee ; /** 提货单状态 1=未开始,2=提货中,3=已完成,4=已取消 */ @ApiModelProperty(name = "提货单状态 1=未开始,2=提货中,3=已完成,4=已取消",notes = "") private String billladingStatus ; @@ -102,5 +103,8 @@ public class TrunklineBillladingEntity extends TenantEntity { /** 结算人名称 */ @ApiModelProperty(name = "结算人名称",notes = "") private String settlementName ; + /** 创建人名称 */ + @ApiModelProperty(name = "创建人名称",notes = "") + private String createUserName ; } diff --git a/blade-service-api/logpm-trunkline-api/src/main/java/com/logpm/trunkline/entity/TrunklineBillladingLineEntity.java b/blade-service-api/logpm-trunkline-api/src/main/java/com/logpm/trunkline/entity/TrunklineBillladingLineEntity.java index c7b09f2e7..8c7490194 100644 --- a/blade-service-api/logpm-trunkline-api/src/main/java/com/logpm/trunkline/entity/TrunklineBillladingLineEntity.java +++ b/blade-service-api/logpm-trunkline-api/src/main/java/com/logpm/trunkline/entity/TrunklineBillladingLineEntity.java @@ -37,6 +37,12 @@ public class TrunklineBillladingLineEntity extends TenantEntity { /** 提货单id */ @ApiModelProperty(name = "提货单id",notes = "") private Long billladingId ; + /** 提货单id */ + @ApiModelProperty(name = "客户id",notes = "") + private Long clientId ; + /** 客户名称 */ + @ApiModelProperty(name = "客户名称",notes = "") + private String clientName ; /** 客户类型 1 工厂 2 商场 3装饰 4个人 */ @ApiModelProperty(name = "客户类型 1 工厂 2 商场 3装饰 4个人",notes = "") private String clientType ; diff --git a/blade-service-api/logpm-trunkline-api/src/main/java/com/logpm/trunkline/entity/TrunklineBillladingWaybillEntity.java b/blade-service-api/logpm-trunkline-api/src/main/java/com/logpm/trunkline/entity/TrunklineBillladingWaybillEntity.java index a4b2603e2..4e376567d 100644 --- a/blade-service-api/logpm-trunkline-api/src/main/java/com/logpm/trunkline/entity/TrunklineBillladingWaybillEntity.java +++ b/blade-service-api/logpm-trunkline-api/src/main/java/com/logpm/trunkline/entity/TrunklineBillladingWaybillEntity.java @@ -7,6 +7,8 @@ import lombok.Data; import lombok.EqualsAndHashCode; import org.springblade.core.tenant.mp.TenantEntity; +import java.math.BigDecimal; + @Data @TableName("logpm_trunkline_billlading_waybill") @ApiModel(value = "TrunklineBillladingWaybill对象", description = "提货运单关联表") @@ -28,6 +30,9 @@ public class TrunklineBillladingWaybillEntity extends TenantEntity { /** 仓库id */ @ApiModelProperty(name = "仓库id",notes = "") private Long warehouseId ; + /** 仓库名称 */ + @ApiModelProperty(name = "仓库名称",notes = "") + private Long warehouseName ; /** 提货单id */ @ApiModelProperty(name = "提货单id",notes = "") private Long billladingId ; @@ -42,10 +47,10 @@ public class TrunklineBillladingWaybillEntity extends TenantEntity { private Integer realNum ; /** 提货重量 */ @ApiModelProperty(name = "提货重量",notes = "") - private Double realWeight ; + private BigDecimal realWeight ; /** 提货体积 */ @ApiModelProperty(name = "提货体积",notes = "") - private Double realVolume ; + private BigDecimal realVolume ; } diff --git a/blade-service-api/logpm-trunkline-api/src/main/java/com/logpm/trunkline/vo/TrunklineBillladingLineVO.java b/blade-service-api/logpm-trunkline-api/src/main/java/com/logpm/trunkline/vo/TrunklineBillladingLineVO.java index c838d6de1..12037ef07 100644 --- a/blade-service-api/logpm-trunkline-api/src/main/java/com/logpm/trunkline/vo/TrunklineBillladingLineVO.java +++ b/blade-service-api/logpm-trunkline-api/src/main/java/com/logpm/trunkline/vo/TrunklineBillladingLineVO.java @@ -8,4 +8,6 @@ public class TrunklineBillladingLineVO extends TrunklineBillladingLineEntity { + + } diff --git a/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/service/impl/BasicdataCodeServiceImpl.java b/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/service/impl/BasicdataCodeServiceImpl.java index 1414f6784..b9f2788cd 100644 --- a/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/service/impl/BasicdataCodeServiceImpl.java +++ b/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/service/impl/BasicdataCodeServiceImpl.java @@ -72,12 +72,41 @@ public class BasicdataCodeServiceImpl implements IBasicdataCodeService { case CodeNumConstant.ABNORMAL_ORDER: code = generateExOrderCode(type,warehouseCode,orderCode); break; + case CodeNumConstant.TRUNKLINEBILLLADING: + code = generateTrunklineBillladingCode(type,warehouseCode,orderCode); + break; default: log.info("##################getCodeByType: 暂不支持的编码类型 type={}", CodeDesEnum.getMes(type)); } return code; } + private String generateTrunklineBillladingCode(Integer type, String warehouseCode, String orderCode) { + if(!StringUtil.hasLength(warehouseCode)){ + log.warn("############generateTrunklineBillladingCode: 仓库编码为空warehouseCode={}",warehouseCode); + return null; + } + //获得年月日短字符串 + String dateShort = CommonUtil.dateToStringShort(new Date()); + + String key = warehouseCode+"TH"+":"+dateShort; + + //获得序号 + Boolean exists = bladeRedis.exists(key); + Long incr = null; + if(exists){ + incr = bladeRedis.incr(key); + }else{ + String value = dateShort+"00001"; + incr = Long.parseLong(value); + bladeRedis.set(key,incr); + bladeRedis.expireAt(key,CommonUtil.getMonthDayEnd()); + + } + + return warehouseCode+"TH"+incr; + } + private String generateExOrderCode(Integer type, String warehouseCode, String orderCode) { if(!StringUtil.hasLength(warehouseCode)){ log.warn("############generateTraysCode: 仓库编码为空warehouseCode={}",warehouseCode); diff --git a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/controller/BillladingController.java b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/controller/BillladingController.java index 4b89ad954..e00c16869 100644 --- a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/controller/BillladingController.java +++ b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/controller/BillladingController.java @@ -11,10 +11,16 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springblade.common.constant.DictBizConstant; import org.springblade.common.exception.CustomerException; import org.springblade.core.tool.api.R; +import org.springblade.core.tool.utils.StringUtil; +import org.springblade.system.cache.DictBizCache; +import org.springblade.system.entity.DictBiz; import org.springframework.web.bind.annotation.*; +import java.math.BigDecimal; +import java.util.List; import java.util.Objects; @Slf4j @@ -57,5 +63,130 @@ public class BillladingController { } } + @ResponseBody + @PostMapping("/findChargeTypeList") + @ApiOperationSupport(order = 1) + @ApiOperation(value = "查询所有计费方式", notes = "传入waybillDTO") + public R findChargeTypeList(@RequestBody BillladingDTO billladingDTO) { + String method = "############findChargeTypeList: "; + log.info(method + "请求参数{}", billladingDTO); + try{ + List list = DictBizCache.getList(DictBizConstant.BILLLADING_CHARGE_TYPE); + return R.data(list); + }catch (CustomerException e){ + log.error(e.message,e); + return R.fail(e.code,e.message); + }catch (Exception e){ + log.error("############sendOrders: 系统异常",e); + return R.fail(500,"############sendOrders: 系统异常"); + } + } + + + @ResponseBody + @PostMapping("/saveNew") + @ApiOperationSupport(order = 1) + @ApiOperation(value = "新增提货单", notes = "传入waybillDTO") + public R saveNew(@RequestBody BillladingDTO billladingDTO) { + String method = "############saveNew: "; + log.info(method + "请求参数{}", billladingDTO); + Long driverId = billladingDTO.getDriverId(); + String driverName = billladingDTO.getDriverName(); + String driverPhone = billladingDTO.getDriverPhone(); + String carNumber = billladingDTO.getCarNumber(); + String carrierName = billladingDTO.getCarrierName(); + String chargeType = billladingDTO.getChargeType(); + Integer planNum = billladingDTO.getPlanNum(); + BigDecimal planWeight = billladingDTO.getPlanWeight(); + BigDecimal planVolume = billladingDTO.getPlanVolume(); + + try{ + + //当前登录人选择的仓库 + BasicdataWarehouseEntity myCurrentWarehouse = warehouseClient.getMyCurrentWarehouse(); + if(Objects.isNull(myCurrentWarehouse)){ + log.warn(method+"仓库信息为空 myCurrentWarehouse={}",myCurrentWarehouse); + return R.fail(403,"仓库信息为空"); + } + billladingDTO.setWarehouseId(myCurrentWarehouse.getId()); + billladingDTO.setWarehouseName(myCurrentWarehouse.getName()); + + if(Objects.isNull(driverId)){ + log.warn(method+"司机id不能为空 driverId={}",driverId); + return R.fail(405,"司机id不能为空"); + } + if(StringUtil.isBlank(driverName)){ + log.warn(method+"司机名称不能为空 driverName={}",driverName); + return R.fail(405,"司机名称不能为空"); + } + if(StringUtil.isBlank(driverPhone)){ + log.warn(method+"司机电话不能为空 driverPhone={}",driverPhone); + return R.fail(405,"司机电话不能为空"); + } + if(StringUtil.isBlank(carNumber)){ + log.warn(method+"车牌不能为空 carNumber={}",carNumber); + return R.fail(405,"车牌不能为空"); + } + if(StringUtil.isBlank(carrierName)){ + log.warn(method+"承运商不能为空 carrierName={}",carrierName); + return R.fail(405,"承运商不能为空"); + } + if(StringUtil.isBlank(chargeType)){ + log.warn(method+"计费模式不能为空 chargeType={}",chargeType); + return R.fail(405,"计费模式不能为空"); + } + if(Objects.isNull(planNum)){ + log.warn(method+"预计件数不能为空 planNum={}",planNum); + return R.fail(405,"预计件数不能为空"); + } + if(Objects.isNull(planWeight)){ + log.warn(method+"预计重量不能为空 planWeight={}",planWeight); + return R.fail(405,"预计重量不能为空"); + } + if(Objects.isNull(planVolume)){ + log.warn(method+"预计体积不能为空 planVolume={}",planVolume); + return R.fail(405,"预计体积不能为空"); + } + + trunklineBillladingService.saveNew(billladingDTO,myCurrentWarehouse.getCode()); + return R.success("新增成功"); + }catch (CustomerException e){ + log.error(e.message,e); + return R.fail(e.code,e.message); + }catch (Exception e){ + log.error("############sendOrders: 系统异常",e); + return R.fail(500,"############sendOrders: 系统异常"); + } + } + + @ResponseBody + @PostMapping("/pageWaybillList") + @ApiOperationSupport(order = 1) + @ApiOperation(value = "分页查询运单", notes = "传入waybillDTO") + public R pageWaybillList(@RequestBody BillladingDTO billladingDTO) { + String method = "############findChargeTypeList: "; + log.info(method + "请求参数{}", billladingDTO); + try{ + //当前登录人选择的仓库 + BasicdataWarehouseEntity myCurrentWarehouse = warehouseClient.getMyCurrentWarehouse(); + if(Objects.isNull(myCurrentWarehouse)){ + log.warn(method+"仓库信息为空 myCurrentWarehouse={}",myCurrentWarehouse); + return R.fail(403,"仓库信息为空"); + } + billladingDTO.setWarehouseId(myCurrentWarehouse.getId()); + + IPage pages = trunklineBillladingService.pageList(billladingDTO); + + return R.data(pages); + }catch (CustomerException e){ + log.error(e.message,e); + return R.fail(e.code,e.message); + }catch (Exception e){ + log.error("############sendOrders: 系统异常",e); + return R.fail(500,"############sendOrders: 系统异常"); + } + } + } + diff --git a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/ITrunklineBillladingService.java b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/ITrunklineBillladingService.java index 468e57250..cd5396d7e 100644 --- a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/ITrunklineBillladingService.java +++ b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/ITrunklineBillladingService.java @@ -10,4 +10,5 @@ public interface ITrunklineBillladingService extends BaseService pageList(BillladingDTO billladingDTO); + void saveNew(BillladingDTO billladingDTO,String warehouseCode); } diff --git a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/TrunklineBillladingServiceImpl.java b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/TrunklineBillladingServiceImpl.java index 95f0ac8db..ea4e903e8 100644 --- a/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/TrunklineBillladingServiceImpl.java +++ b/blade-service/logpm-trunkline/src/main/java/com/logpm/trunkline/service/impl/TrunklineBillladingServiceImpl.java @@ -2,21 +2,44 @@ package com.logpm.trunkline.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.logpm.basicdata.feign.IBasicdataCodeClient; +import com.logpm.basicdata.feign.IBasicdataWarehouseClient; import com.logpm.trunkline.dto.BillladingDTO; import com.logpm.trunkline.entity.TrunklineBillladingEntity; +import com.logpm.trunkline.entity.TrunklineBillladingLineEntity; +import com.logpm.trunkline.entity.TrunklineBillladingWaybillEntity; import com.logpm.trunkline.mapper.TrunklineBillladingMapper; +import com.logpm.trunkline.service.ITrunklineBillladingLineService; import com.logpm.trunkline.service.ITrunklineBillladingService; +import com.logpm.trunkline.service.ITrunklineBillladingWaybillService; +import com.logpm.trunkline.vo.TrunklineBillladingLineVO; import com.logpm.trunkline.vo.TrunklineBillladingVO; +import com.logpm.trunkline.vo.TrunklineBillladingWaybillVO; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springblade.core.mp.base.BaseServiceImpl; +import org.springblade.core.secure.utils.AuthUtil; +import org.springblade.core.tool.utils.BeanUtil; +import org.springblade.core.tool.utils.StringUtil; import org.springframework.stereotype.Service; +import java.math.BigDecimal; +import java.util.Comparator; +import java.util.List; +import java.util.stream.Collectors; + @Slf4j @Service @AllArgsConstructor public class TrunklineBillladingServiceImpl extends BaseServiceImpl implements ITrunklineBillladingService { + private final ITrunklineBillladingLineService billladingLineService; + private final ITrunklineBillladingWaybillService billladingWaybillService; + + + private final IBasicdataWarehouseClient basicdataWarehouseClient; + private final IBasicdataCodeClient basicdataCodeClient; + @Override public IPage pageList(BillladingDTO billladingDTO) { IPage page = new Page<>(); @@ -25,6 +48,59 @@ public class TrunklineBillladingServiceImpl extends BaseServiceImpl pageList = baseMapper.pageList(page,billladingDTO); - return null; + return pageList; + } + + @Override + public void saveNew(BillladingDTO billladingDTO,String warehouseCode) { + log.info("###############saveNew: billladingDTO={}",billladingDTO); + + Long warehouseId = billladingDTO.getWarehouseId(); + String warehouseName = billladingDTO.getWarehouseName(); + String billladingCode = basicdataCodeClient.getCodeByType(11, warehouseCode, null); + + TrunklineBillladingEntity trunklineBillladingEntity = new TrunklineBillladingEntity(); + BeanUtil.copy(billladingDTO,trunklineBillladingEntity); + trunklineBillladingEntity.setBillladingStatus("1"); + trunklineBillladingEntity.setCreateUserName(AuthUtil.getUserName()); + trunklineBillladingEntity.setBillladingCode(billladingCode); + save(trunklineBillladingEntity); + Long billladingId = trunklineBillladingEntity.getId(); + //保存线路节点 + List billladingLineList = billladingDTO.getBillladingLineList(); + billladingLineList = billladingLineList.stream() + .sorted(Comparator.comparing(TrunklineBillladingLineVO::getSort)) + .collect(Collectors.toList()); + + String lineTitle = ""; + for (TrunklineBillladingLineVO billladingLineVO:billladingLineList){ + String clientName = billladingLineVO.getClientName(); + if(StringUtil.isBlank(lineTitle)){ + lineTitle = lineTitle + clientName; + }else{ + lineTitle = lineTitle + "-->" + clientName; + } + TrunklineBillladingLineEntity billladingLineEntity = new TrunklineBillladingLineEntity(); + BeanUtil.copy(billladingLineVO,billladingLineEntity); + billladingLineEntity.setBillladingId(billladingId); + billladingLineEntity.setWarehouseId(warehouseId); + billladingLineEntity.setWarehouseName(warehouseName); + billladingLineService.save(billladingLineEntity); + } + trunklineBillladingEntity.setLineNameTitle(lineTitle); + updateById(trunklineBillladingEntity); + + //保存提货运单 + List billladingWaybillList = billladingDTO.getBillladingWaybillList(); + for (TrunklineBillladingWaybillVO billladingWaybillVO:billladingWaybillList){ + TrunklineBillladingWaybillEntity billladingWaybillEntity = new TrunklineBillladingWaybillEntity(); + BeanUtil.copy(billladingWaybillVO,billladingWaybillEntity); + billladingWaybillEntity.setBillladingId(billladingId); + billladingWaybillEntity.setBilladingCode(trunklineBillladingEntity.getBillladingCode()); + billladingWaybillEntity.setRealNum(0); + billladingWaybillEntity.setRealWeight(BigDecimal.ZERO); + billladingWaybillEntity.setRealVolume(BigDecimal.ZERO); + billladingWaybillService.save(billladingWaybillEntity); + } } }