Merge branch 'dev' into dev_WMS20260401

This commit is contained in:
高正杨
2026-04-09 09:39:09 +08:00
25 changed files with 750 additions and 87 deletions
@@ -41,7 +41,7 @@ public class ExecuteOrderApplicationService {
/**
* 新增【请填写功能名称】
*/
public Boolean insert(ExecuteOrderDO executeOrderDO) {
public Long insert(ExecuteOrderDO executeOrderDO) {
return executeOrderDomainService.insert(executeOrderDO);
}
@@ -0,0 +1,16 @@
package com.mhd.oms.domain.businessDocumentCargoInfo.repository;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mhd.oms.interfaces.assembler.businessDocumentCargoInfo.BusinessDocumentCargoInfo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author: brb
* @description:
* @create: 2026-03-30 17:38
*/
public interface BusinessDocumentCargoInfoMapper extends BaseMapper<BusinessDocumentCargoInfo> {
void insertBatch(@Param("list") List<BusinessDocumentCargoInfo> businessDocumentCargoInfoList);
}
@@ -694,4 +694,41 @@ public class BusinessDocumentOrder extends BaseVOEntity{
@ApiModelProperty("预约单号")
private String reservationOrderNumber;
@ApiModelProperty("执行单id")
private String executeOrderId;
@ApiModelProperty("执行单号")
private String executeOrderNumber;
@ApiModelProperty("收款账户id")
private String paymentAccountId;
@ApiModelProperty("收款账户信息")
private String accountInformation;
@ApiModelProperty("业务类型")
private Integer businessCategory;
@ApiModelProperty(value = "组织地址")
private String companyAddress;
@ApiModelProperty(value = "组织公司名称")
private String companyName;
// @ApiModelProperty(value = "组织公司名称英文")
// private String companyNameEn;
//
// @ApiModelProperty(value = "负责人姓名")
// private String contact;
//
// @ApiModelProperty(value = "组织负责人id")
// private String contactPhone;
//
@ApiModelProperty(value = "账户名称")
private String accountName;
//
// @ApiModelProperty(value = "开户银行")
// private String accountBank;
}
@@ -1,6 +1,7 @@
package com.mhd.oms.domain.businessDocumentOrder.repository.persistence;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mhd.common.security.utils.SecurityUtils;
@@ -17,6 +18,7 @@ import com.mhd.system.api.model.LoginUser;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.rmi.ServerException;
import java.util.ArrayList;
@@ -120,36 +122,58 @@ public class BusinessDocumentOrderImpl extends ServiceImpl<BusinessDocumentOrder
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean execute(Long[] ids) {
LoginUser loginUser = SecurityUtils.getLoginUser();//获取登录人
for (Long id:ids){
BusinessDocumentOrder businessDocumentOrder=businessDocumentOrderMapper.selectById(id);
if (ObjectUtil.isNotNull(businessDocumentOrder)){
businessDocumentOrder.setExecuteId(loginUser.getUserid());
businessDocumentOrder.setExecuteStatus(2L);
businessDocumentOrder.setExecuteTime(new Date());
businessDocumentOrder.setExecutor(loginUser.getUsername());
businessDocumentOrder.setOrderStatus(2L);
businessDocumentOrderMapper.updateById(businessDocumentOrder);
ExecuteOrderDO executeOrderDO=new ExecuteOrderDO();
executeOrderDO.setBusinessDocumentId(id);
executeOrderDO.setBusinessDocumentNumber(businessDocumentOrder.getGoodsNumber());
executeOrderDO.setGoodsNumber(businessDocumentOrder.getGoodsNumber());
executeOrderDO.setCreateBy(loginUser.getUserid());
executeOrderDO.setCreateTime(new Date());
executeOrderDO.setDelFlag(1);
executeOrderDO.setOrganizationId(businessDocumentOrder.getOrganizationId());
executeOrderDO.setOrgName(businessDocumentOrder.getOrgName());
executeOrderDO.setTopOrganizationId(businessDocumentOrder.getTopOrganizationId());
executeOrderDomainService.insert(executeOrderDO);
try {
for (Long id:ids){
BusinessDocumentOrder businessDocumentOrder=businessDocumentOrderMapper.selectById(id);
if (businessDocumentOrder.getReviewStatus()!=1){
throw new ServerException("业务单审核状态异常");
}
if (ObjectUtil.isNotNull(businessDocumentOrder)){
ExecuteOrder objects = executeOrderMapper.selectOne(new LambdaQueryWrapper<ExecuteOrder>().eq(ExecuteOrder::getBusinessDocumentId, id).eq(ExecuteOrder::getDelFlag,1) .last("LIMIT 1")
);
if (ObjectUtil.isNotNull(objects)) {
throw new ServerException("业务单已生成执行单,请先取消执行单");
}
// 先创建执行单
ExecuteOrderDO executeOrderDO=new ExecuteOrderDO();
executeOrderDO.setBusinessDocumentId(id);
executeOrderDO.setBusinessDocumentNumber(businessDocumentOrder.getGoodsNumber());
executeOrderDO.setGoodsNumber(businessDocumentOrder.getGoodsNumber());
executeOrderDO.setCreateBy(loginUser.getUserid());
executeOrderDO.setCreateTime(new Date());
executeOrderDO.setDelFlag(1);
executeOrderDO.setOrganizationId(businessDocumentOrder.getOrganizationId());
executeOrderDO.setOrgName(businessDocumentOrder.getOrgName());
executeOrderDO.setTopOrganizationId(businessDocumentOrder.getTopOrganizationId());
Long executeOrderId = executeOrderDomainService.insert(executeOrderDO);
// 更新业务单状态和执行单信息(只保存一次)
businessDocumentOrder.setExecuteId(loginUser.getUserid());
businessDocumentOrder.setExecuteStatus(2L);
businessDocumentOrder.setExecuteTime(new Date());
businessDocumentOrder.setExecutor(loginUser.getUsername());
businessDocumentOrder.setOrderStatus(2L);
businessDocumentOrder.setExecuteOrderId(String.valueOf(executeOrderId));
businessDocumentOrder.setExecuteOrderNumber(businessDocumentOrder.getGoodsNumber());
businessDocumentOrderMapper.updateById(businessDocumentOrder);
}
}
return true;
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("执行失败:" + e.getMessage());
}
return null;
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean cancelExecute(Long[] ids) throws Exception{
LoginUser loginUser = SecurityUtils.getLoginUser();//获取登录人
for (Long id:ids){
@@ -170,7 +194,10 @@ public class BusinessDocumentOrderImpl extends ServiceImpl<BusinessDocumentOrder
}else{
executeOrder.setOrderStatus(3L);
executeOrder.setIssueStatus(1L);
executeOrderMapper.updateById(executeOrder);
int i = executeOrderMapper.updateById(executeOrder);
if (i > 0) {
return true;
}
}
}
}
@@ -706,4 +706,40 @@ public class BusinessDocumentOrderPO extends BaseVOEntity{
@ApiModelProperty("预约单号")
private String reservationOrderNumber;
@ApiModelProperty("执行单id")
private String executeOrderId;
@ApiModelProperty("执行单号")
private String executeOrderNumber;
@ApiModelProperty("收款账户id")
private String paymentAccountId;
@ApiModelProperty("收款账户信息")
private String accountInformation;
@ApiModelProperty("业务类型")
private Integer businessCategory;
@ApiModelProperty(value = "组织地址")
private String companyAddress;
@ApiModelProperty(value = "组织公司名称")
private String companyName;
@ApiModelProperty(value = "组织公司名称英文")
private String companyNameEn;
@ApiModelProperty(value = "负责人姓名")
private String contact;
@ApiModelProperty(value = "组织负责人id")
private String contactPhone;
@ApiModelProperty(value = "账户名称")
private String accountName;
@ApiModelProperty(value = "开户银行")
private String accountBank;
}
@@ -2,6 +2,7 @@ package com.mhd.oms.domain.businessDocumentOrder.repository.todo;
import com.mhd.common.core.annotation.Excel;
import com.mhd.oms.domain.businessDocumentCargoMulti.entity.BusinessDocumentCargoMulti;
import com.mhd.oms.interfaces.assembler.businessDocumentCargoInfo.BusinessDocumentCargoInfo;
import com.mhd.oms.interfaces.dto.businessDocumentAddressMulti.BusinessDocumentAddressMultiDTO;
import com.mhd.oms.interfaces.dto.businessDocumentCargoMulti.BusinessDocumentCargoMultiDTO;
import lombok.Data;
@@ -728,12 +729,51 @@ public class BusinessDocumentOrderDO extends BaseVOEntity{
@ApiModelProperty("预约单号")
private String reservationOrderNumber;
@ApiModelProperty("执行单id")
private String executeOrderId;
@ApiModelProperty("执行单号")
private String executeOrderNumber;
@ApiModelProperty("收款账户id")
private String paymentAccountId;
@ApiModelProperty("收款账户信息")
private String accountInformation;
@ApiModelProperty("业务类型")
private Integer businessCategory;
@ApiModelProperty(value = "组织地址")
private String companyAddress;
@ApiModelProperty(value = "组织公司名称")
private String companyName;
@ApiModelProperty(value = "组织公司名称英文")
private String companyNameEn;
@ApiModelProperty(value = "负责人姓名")
private String contact;
@ApiModelProperty(value = "组织负责人id")
private String contactPhone;
@ApiModelProperty(value = "账户名称")
private String accountName;
@ApiModelProperty(value = "开户银行")
private String accountBank;
@ApiModelProperty("业务单地址集合")
private List<BusinessDocumentAddressMultiDTO> businessDocumentAddressMultiDTOList;
@ApiModelProperty("业务单货物集合")
private List<BusinessDocumentCargoMultiDTO> businessDocumentCargoMultiList;
@ApiModelProperty("业务单货物详情集合")
private List<BusinessDocumentCargoInfo> cargoInfoList;
@ApiModelProperty(value = "装货地址集合")
private List<BusinessDocumentAddressMultiDTO> loadingAddressList;
@ApiModelProperty(value = "卸货地址集合")
@@ -15,6 +15,7 @@ import com.mhd.oms.domain.businessDocumentCargoMulti.entity.BusinessDocumentCarg
import com.mhd.oms.domain.businessDocumentCargoMulti.repository.mapper.BusinessDocumentCargoMultiMapper;
import com.mhd.oms.domain.businessDocumentOrder.entity.BusinessDocumentOrder;
import com.mhd.oms.domain.businessDocumentOrder.repository.facade.IBusinessDocumentOrderService;
import com.mhd.oms.domain.businessDocumentOrder.repository.mapper.BusinessDocumentOrderMapper;
import com.mhd.oms.domain.businessDocumentOrder.repository.po.BusinessDocumentOrderPO;
import com.mhd.oms.domain.businessDocumentOrder.repository.todo.BusinessDocumentOrderDO;
import com.mhd.oms.domain.orderType.entity.OrderType;
@@ -57,6 +58,9 @@ public class BusinessDocumentOrderDomainService {
@Resource
private BusinessDocumentAddressMultiMapper businessDocumentAddressMultiMapper;
@Resource
private BusinessDocumentOrderMapper businessDocumentOrderMapper;
/**
* 分页查询【请填写功能名称】列表
*/
@@ -102,7 +106,7 @@ public class BusinessDocumentOrderDomainService {
String orderRemark = businessDocumentOrderDO.getRemarks();
businessDocumentOrderDO.setRemarks(orderRemark);
businessDocumentOrderDO.setAppointShipperId(String.valueOf(userShipperPo.getUserId()));
// businessDocumentOrderDO.setAppointShipperId(String.valueOf(userShipperPo.getUserId()));
// 分类处理货物列表
List<BusinessDocumentCargoMultiDTO> allCargoList = businessDocumentOrderDO.getBusinessDocumentCargoMultiList();
businessDocumentOrderDO.setReceivableType(2L);
@@ -210,6 +214,8 @@ public class BusinessDocumentOrderDomainService {
tmsOrder.setFreighterName(firstAddress.getContactName());
tmsOrder.setLoadingPhone(firstAddress.getContactPhone());
tmsOrder.setLoadingDate(firstAddress.getLayDate());
tmsOrder.setAppointShipper(businessDocumentOrderDO.getAppointShipper());
tmsOrder.setAppointShipperId(businessDocumentOrderDO.getAppointShipperId());
tmsOrder.setUnloadAreaId(lastAddress.getAreaCode());
tmsOrder.setUnloadName(lastAddress.getAreaCode());
@@ -300,7 +306,8 @@ public class BusinessDocumentOrderDomainService {
if (businessDocumentOrderDO.getTopOrganizationId() != null) {
tmsOrder.setTopOrganizationId(businessDocumentOrderDO.getTopOrganizationId());
}
boolean istrue=businessDocumentOrderService.insert(businessDocumentOrderDO);
// boolean istrue=businessDocumentOrderService.insert(businessDocumentOrderDO);
boolean istrue = businessDocumentOrderMapper.insert(tmsOrder) > 0;
//保存货物信息及地址信息
saveAddress2CargoInfo(tmsOrder.getId(), allCargoList, loadingAddressList, unloadAddressList);
@@ -23,7 +23,7 @@ public interface IExecuteOrderService extends IService<ExecuteOrder>
/**
* 新增【请填写功能名称】
*/
public Boolean insert(ExecuteOrderDO executeOrderDO);
public Long insert(ExecuteOrderDO executeOrderDO);
/**
* 修改【请填写功能名称】
@@ -67,10 +67,11 @@ public class ExecuteOrderImpl extends ServiceImpl<ExecuteOrderMapper, ExecuteOrd
* 新增【请填写功能名称】
*/
@Override
public Boolean insert(ExecuteOrderDO executeOrderDO) {
public Long insert(ExecuteOrderDO executeOrderDO) {
ExecuteOrder executeOrder = new ExecuteOrder();
BeanUtils.copyProperties(executeOrderDO,executeOrder);
return this.save(executeOrder);
this.save(executeOrder);
return executeOrder.getId();
}
/**
@@ -155,8 +156,16 @@ public class ExecuteOrderImpl extends ServiceImpl<ExecuteOrderMapper, ExecuteOrd
unloadAddressList.add(tmsAddressMultiDTO);
}
}
tmsOrderAddDTO.setAppointShipper(businessDocumentOrder.getAppointShipper());
tmsOrderAddDTO.setAppointShipperId(businessDocumentOrder.getAppointShipperId());
tmsOrderAddDTO.setCargoInfoList(cargoInfoList);
tmsOrderAddDTO.setLoadingAddressList(loadingAddressList);
tmsOrderAddDTO.setUnloadAddressList(unloadAddressList);
tmsOrderAddDTO.setOrderShippingType(2);
tmsOrderAddDTO.setPayerType(0);
AjaxResult ajaxResult=wlhyServiceFeign.add(tmsOrderAddDTO);
if(ajaxResult.get("code").toString().equals("200")){
return true;
}else {
throw new ServiceException(ajaxResult.get("msg").toString());
@@ -66,6 +66,23 @@ public class ExecuteOrderPO extends BaseVOEntity{
@Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
private Long topOrganizationId;
@ApiModelProperty("下发状态")
@Excel(name = "下发状态")
private String issueStatus;
@ApiModelProperty("下发人")
@Excel(name = "下发人")
private String issueName;
@ApiModelProperty("下发时间")
@Excel(name = "下发时间", width = 20, dateFormat = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date issueTime;
@ApiModelProperty("业务单状态")
@Excel(name = "业务单状态")
private String orderStatus;
}
@@ -7,6 +7,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import java.math.BigDecimal;
import io.swagger.annotations.ApiModelProperty;
import com.mhd.common.core.web.domain.BaseVOEntity;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.List;
@@ -26,6 +27,31 @@ public class ExecuteOrderDO extends BaseVOEntity{
@Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
private Long id;
@ApiModelProperty(value = "创建结束日期")
@Excel(name = "创建结束日期", width = 20)
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date createEndTime;
/**更新日期*/
@ApiModelProperty(value = "创建开始日期")
@Excel(name = "创建开始日期", width = 20)
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date createStartTime;
@ApiModelProperty(value = "下发结束日期")
@Excel(name = "下发结束日期", width = 20)
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date issueEndTime;
/**更新日期*/
@ApiModelProperty(value = "下发开始日期")
@Excel(name = "下发开始日期", width = 20)
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date issueStartTime;
@ApiModelProperty("$column.columnComment")
@Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
private String realCreateBy;
@@ -33,7 +33,7 @@ public class ExecuteOrderDomainService {
/**
* 新增【请填写功能名称】
*/
public Boolean insert(ExecuteOrderDO executeOrderDO) {
public Long insert(ExecuteOrderDO executeOrderDO) {
return executeOrderService.insert(executeOrderDO);
}
@@ -51,6 +51,12 @@ public class ExecuteOrderDomainService {
public Boolean delete(Long[] ids) {
return executeOrderService.delete(ids);
}
/**
* 下发执行单
* @param ids
* @return
*/
public Boolean issueDocuments(Long[] ids) {
return executeOrderService.issueDocuments(ids);
}
@@ -0,0 +1,98 @@
package com.mhd.oms.interfaces.assembler.businessDocumentCargoInfo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* @author: brb
* @description:
* @create: 2026-03-30 17:15
*/
@Data
public class BusinessDocumentCargoInfo {
@ApiModelProperty(value = "ID")
private String id;
@ApiModelProperty(value = "组织表ID")
private Long organizationId;
@ApiModelProperty(value = "组织名称")
private String organizationName;
@ApiModelProperty(value = "一级组织表ID")
private Long topOrganizationId;
@ApiModelProperty(value = "创建时间")
private Date createTime;
@ApiModelProperty(value = "创建人用户ID")
private Long createBy;
@ApiModelProperty(value = "创建人姓名")
private String createByName;
@ApiModelProperty(value = "修改时间")
private Date updateTime;
// @ApiModelProperty(value = "修改人用户ID")
// private Long updateBy;
@ApiModelProperty(value = "修改人姓名")
private String updateByName;
@ApiModelProperty(value = "删除标记:0-无状态,1-正常,2-已删除")
private Integer delFlag;
@ApiModelProperty(value = "货单号")
private String orderId;
@ApiModelProperty(value = "货物类型ID")
private String goodsTypeId;
@ApiModelProperty(value = "货物类型")
private String goodsType;
@ApiModelProperty(value = "货物名称ID")
private String goodsNameId;
@ApiModelProperty(value = "货物名称")
private String goodsName;
@ApiModelProperty(value = "货物数量")
private BigDecimal cargoNum;
@ApiModelProperty(value = "货物重量")
private BigDecimal cargoWeight;
@ApiModelProperty("体积")
private BigDecimal cargoVolume;
@ApiModelProperty("内容")
private String cargoContent;
@ApiModelProperty(value = "重量单位ID")
private String weightUnitId;
@ApiModelProperty(value = "重量单位名称")
private String weightUnit;
@ApiModelProperty(value = "数量单位ID")
private String quantityUnitId;
@ApiModelProperty(value = "数量单位名称")
private String quantityUnit;
@ApiModelProperty("货物名称")
private String cargoName;
@ApiModelProperty("货物单位ID")
private String cargoUnitId;
@ApiModelProperty("货物单位名字")
private String cargoUnitName;
@ApiModelProperty("整机表编号")
private String machineCode;
@ApiModelProperty("是否为库存")
private boolean stockFlag;
@ApiModelProperty("货物重量 罐车运输专有字段")
private BigDecimal cargoTonnage;
@ApiModelProperty("价格")
private BigDecimal unitPrice;
@ApiModelProperty("货物类型标识:STOCK-库存,MATERIAL-物料,MANUAL-手动输入")
private String cargoType;
@ApiModelProperty(value = "删除标记:0-无状态,1-正常,2-已删除")
private Integer inventoryStatus;
@ApiModelProperty("货物备注")
private String remark;
}
@@ -59,6 +59,7 @@ public class BusinessDocumentOrderAssembler {
businessDocumentOrderDO.setUpdateTime(new Date());
businessDocumentOrderDO.setDelFlag(1);
}
// businessDocumentOrderDO.setBusinessDocumentCargoMultiList(businessDocumentOrderDTO.getBusinessDocumentCargoMultiDTOList());
return businessDocumentOrderDO;
}
@@ -5,6 +5,7 @@ import com.mhd.oms.domain.businessDocumentAddressMulti.entity.BusinessDocumentAd
import com.mhd.oms.domain.businessDocumentAddressMulti.repository.todo.BusinessDocumentAddressMultiDO;
import com.mhd.oms.domain.businessDocumentCargoMulti.entity.BusinessDocumentCargoMulti;
import com.mhd.oms.interfaces.dto.businessDocumentAddressMulti.BusinessDocumentAddressMultiDTO;
import com.mhd.oms.interfaces.dto.businessDocumentCargoMulti.BusinessDocumentCargoMultiDTO;
import lombok.Data;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
@@ -42,6 +43,16 @@ public class BusinessDocumentOrderDTO extends BaseVOEntity{
@Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
private String createCompanyId;
@ApiModelProperty(value = "创建开始日期")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date createStartTime;
@ApiModelProperty(value = "创建结束日期")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date createEndTime;
@ApiModelProperty("$column.columnComment")
@Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
private String goodsNumber;
@@ -706,11 +717,52 @@ public class BusinessDocumentOrderDTO extends BaseVOEntity{
@ApiModelProperty("预约单号")
private String reservationOrderNumber;
@ApiModelProperty("执行单id")
private String executeOrderId;
@ApiModelProperty("执行单号")
private String executeOrderNumber;
@ApiModelProperty("收款账户id")
private String paymentAccountId;
@ApiModelProperty("收款账户信息")
private String accountInformation;
@ApiModelProperty("业务类型")
private Integer businessCategory;
@ApiModelProperty(value = "组织地址")
private String companyAddress;
@ApiModelProperty(value = "组织公司名称")
private String companyName;
@ApiModelProperty(value = "组织公司名称英文")
private String companyNameEn;
@ApiModelProperty(value = "负责人姓名")
private String contact;
@ApiModelProperty(value = "组织负责人id")
private String contactPhone;
@ApiModelProperty(value = "账户名称")
private String accountName;
@ApiModelProperty(value = "开户银行")
private String accountBank;
@ApiModelProperty("业务单地址集合")
private List<BusinessDocumentAddressMultiDTO> businessDocumentAddressMultiDTOList;
@ApiModelProperty("业务单货物集合")
private List<BusinessDocumentCargoMulti> businessDocumentCargoMultiList;
private List<BusinessDocumentCargoMulti> businessDocumentCargoMultiList1;
@ApiModelProperty("业务单货物集合")
private List<BusinessDocumentCargoMultiDTO> businessDocumentCargoMultiList;
@ApiModelProperty(value = "装货地址集合")
private List<BusinessDocumentAddressMultiDTO> loadingAddressList;
@@ -7,6 +7,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import java.math.BigDecimal;
import io.swagger.annotations.ApiModelProperty;
import com.mhd.common.core.web.domain.BaseVOEntity;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.List;
@@ -25,6 +26,30 @@ public class ExecuteOrderDTO extends BaseVOEntity{
@Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
private Long id;
@ApiModelProperty(value = "创建结束日期")
@Excel(name = "创建结束日期", width = 20)
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date createEndTime;
/**更新日期*/
@ApiModelProperty(value = "创建开始日期")
@Excel(name = "创建开始日期", width = 20)
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date createStartTime;
@ApiModelProperty(value = "下发结束日期")
@Excel(name = "下发结束日期", width = 20)
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date issueEndTime;
/**更新日期*/
@ApiModelProperty(value = "下发开始日期")
@Excel(name = "下发开始日期", width = 20)
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date issueStartTime;
@ApiModelProperty("$column.columnComment")
@Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
private String realCreateBy;
@@ -10,6 +10,7 @@ import com.mhd.oms.domain.businessDocumentOrder.repository.todo.BusinessDocument
import com.mhd.oms.domain.businessDocumentOrder.repository.po.BusinessDocumentOrderPO;
import com.mhd.oms.application.service.businessDocumentOrder.BusinessDocumentOrderApplicationService;
import com.mhd.oms.interfaces.assembler.businessDocumentOrder.BusinessDocumentOrderAssembler;
import com.github.pagehelper.PageHelper;
import javax.annotation.Resource;
import com.mhd.common.core.web.controller.BaseController;
import com.mhd.common.core.web.domain.AjaxResult;
@@ -35,11 +36,14 @@ public class BusinessDocumentOrderApi extends BaseController{
*/
@ApiOperation("查询【业务单】列表")
@GetMapping("/list")
public TableDataInfo list(BusinessDocumentOrderDTO businessDocumentOrderDTO)
public TableDataInfo list(BusinessDocumentOrderDTO businessDocumentOrderDTO,
@RequestParam(value = "pageNo", required = false, defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize", required = false, defaultValue = "20") Integer pageSize)
{
//转换实体
BusinessDocumentOrderDO businessDocumentOrderDO = businessDocumentOrderAssembler.toDO(businessDocumentOrderDTO);
startPage();
// 使用 PageHelper 手动分页,支持 pageNo 参数
PageHelper.startPage(pageNo, pageSize);
List<BusinessDocumentOrderPO> list = businessDocumentOrderApplicationService.queryList(businessDocumentOrderDO);
return getDataTable(list);
}
@@ -56,7 +56,8 @@ public class ExecuteOrderApi extends BaseController{
if(executeOrderDTO.getId() != null){
return toAjax(executeOrderApplicationService.update(executeOrderDO));
}else {
return toAjax(executeOrderApplicationService.insert(executeOrderDO));
Long executeOrderId = executeOrderApplicationService.insert(executeOrderDO);
return executeOrderId != null ? success() : error();
}
}
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mhd.oms.domain.businessDocumentCargoInfo.repository.BusinessDocumentCargoInfoMapper">
<insert id="insertBatch"></insert>
</mapper>
@@ -194,7 +194,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and CREATE_TIME &gt;= #{createStartTime}
</if>
<if test="createEndTime != null">
and CREATE_TIME &lt;= DATE_ADD(#{createEndTime}, INTERVAL 1 DAY - 1 SECOND)
and CREATE_TIME &lt;= #{createEndTime} + 1 - 1/86400
</if>
<!-- <if test="updateTime != null ">-->
@@ -669,6 +669,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="queryList" parameterType="com.mhd.oms.domain.businessDocumentOrder.repository.todo.BusinessDocumentOrderDO" resultMap="BusinessDocumentOrderResult">
<include refid="selectBusinessDocumentOrderPo"/>
<include refid="selectBusinessDocumentOrderPo1"/>
order by create_time desc
</select>
<select id="selectByMakerCodeNc" parameterType="java.lang.String" resultType="java.lang.String">
select DOCUMENT_PREPARER_NC_code from NGWL_TEST_USER."USER" where USER_ID = #{salesmanCodeNc}</select>
@@ -25,38 +25,50 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<sql id="selectExecuteOrderPo">
select ID, REAL_CREATE_BY, REAL_CREATE_NAME, CREATE_BY, CREATE_COMPANY_ID, CREATE_TIME, UPDATE_BY, UPDATE_TIME, DEL_FLAG, GOODS_NUMBER, ORG_NAME, ORGANIZATION_ID, BUSINESS_DOCUMENT_ID, BUSINESS_DOCUMENT_NUMBER, ORGANIZATION_NAME, TOP_ORGANIZATION_ID from execute_order
select * from execute_order
</sql>
<sql id="selectExecuteOrderPo1">
<where>
<if test="id != null ">
and ID = #{id}
</if>
<if test="realCreateBy != null and realCreateBy != ''">
and REAL_CREATE_BY = #{realCreateBy}
</if>
<if test="realCreateName != null and realCreateName != ''">
and REAL_CREATE_NAME like concat('%', #{realCreateName}, '%')
</if>
<if test="createBy != null and createBy != ''">
and CREATE_BY = #{createBy}
</if>
<if test="createCompanyId != null and createCompanyId != ''">
and CREATE_COMPANY_ID = #{createCompanyId}
</if>
<if test="createTime != null ">
and CREATE_TIME = #{createTime}
</if>
<if test="updateBy != null and updateBy != ''">
and UPDATE_BY = #{updateBy}
</if>
<if test="updateTime != null ">
and UPDATE_TIME = #{updateTime}
</if>
<if test="delFlag != null ">
and DEL_FLAG = #{delFlag}
</if>
<!-- <if test="id != null ">-->
<!-- and ID = #{id}-->
<!-- </if>-->
<!-- <if test="realCreateBy != null and realCreateBy != ''">-->
<!-- and REAL_CREATE_BY = #{realCreateBy}-->
<!-- </if>-->
<!-- <if test="realCreateName != null and realCreateName != ''">-->
<!-- and REAL_CREATE_NAME like concat('%', #{realCreateName}, '%')-->
<!-- </if>-->
<!-- <if test="createBy != null and createBy != ''">-->
<!-- and CREATE_BY = #{createBy}-->
<!-- </if>-->
<!-- <if test="createCompanyId != null and createCompanyId != ''">-->
<!-- and CREATE_COMPANY_ID = #{createCompanyId}-->
<!-- </if>-->
<!-- <if test="createTime != null ">-->
<!-- and CREATE_TIME = #{createTime}-->
<!-- </if>-->
<!-- <if test="updateBy != null and updateBy != ''">-->
<!-- and UPDATE_BY = #{updateBy}-->
<!-- </if>-->
<!-- <if test="updateTime != null ">-->
<!-- and UPDATE_TIME = #{updateTime}-->
<!-- </if>-->
<!-- <if test="delFlag != null ">-->
<!-- and DEL_FLAG = #{delFlag}-->
<!-- </if>-->
<if test="createStartTime != null">
and CREATE_TIME &gt;= #{createStartTime}
</if>
<if test="createEndTime != null">
and CREATE_TIME &lt;= #{createEndTime} + 1 - 1/86400
</if>
<if test="issueStartTime != null">
and ISSUE_TIME &gt;= #{issueStartTime}
</if>
<if test="issueEndTime != null">
and ISSUE_TIME &lt;= #{issueEndTime} + 1 - 1/86400
</if>
<if test="goodsNumber != null and goodsNumber != ''">
and GOODS_NUMBER = #{goodsNumber}
</if>
@@ -84,5 +96,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="queryList" parameterType="com.mhd.oms.domain.executeOrder.repository.todo.ExecuteOrderDO" resultMap="ExecuteOrderResult">
<include refid="selectExecuteOrderPo"/>
<include refid="selectExecuteOrderPo1"/>
order by CREATE_TIME desc
</select>
</mapper>
@@ -1372,8 +1372,8 @@ public class StockReceiptOrderApplicationService {
* @return Boolean
*/
public Boolean receivingGoods(StockReceiptOrderDO stockReceiptOrderDO){
//收货装配参数
StockReceiptOrderDO assembleStockReceiptOrderDO = assembleParamByReceipt(stockReceiptOrderDO);
//收货装配参数(PC:页面全量覆盖累计已收与费用,不与历史累加)
StockReceiptOrderDO assembleStockReceiptOrderDO = assembleParamByReceipt(stockReceiptOrderDO, true);
assembleStockReceiptOrderDO.setFromPda(false); // PC收货完成,上架单是否下发=否
return stockReceiptOrderDomainService.receivingGoods(assembleStockReceiptOrderDO);
}
@@ -1400,7 +1400,7 @@ public class StockReceiptOrderApplicationService {
// 主项子项结构:将 children 第一条(parent_copy)赋值给主项并删除
assignFirstChildToParentAndRemove(stockReceiptOrderDO);
}
StockReceiptOrderDO assembleStockReceiptOrderDO = assembleParamByReceipt(stockReceiptOrderDO);
StockReceiptOrderDO assembleStockReceiptOrderDO = assembleParamByReceipt(stockReceiptOrderDO, false);
if (CollectionUtils.isEmpty(assembleStockReceiptOrderDO.getMaterialDetailList())) {
throw new ServiceException("无有效收货数据,请确认已填写收货数量(收货数量不能全部为0)");
}
@@ -1698,14 +1698,212 @@ public class StockReceiptOrderApplicationService {
return totalField;
}
/**
* PC 收货确认:页面提交为「当前全量实绩」,直接取 receipt* / total* 落库,不与历史累计做差或相加。
*/
private static BigDecimal pickAbsoluteMetricFromPage(BigDecimal receiptField, BigDecimal totalField) {
if (receiptField != null) {
return receiptField;
}
if (totalField != null) {
return totalField;
}
return BigDecimal.ZERO;
}
/**
* PC 收货:按页面全量覆盖累计已收(主行、子行毛净重体面积件数)。
*/
private void appendReceiptLinePcFullPageOverwrite(
ReceiptMaterialDetailDO receiptMaterialDetailDO,
ReceiptMaterialDetailPO receiptMaterialDetailPO,
Map<Long, ReceiptMaterialDetailPO> receiptMaterialDetailDbMap,
Map<Long, ReceiptMaterialDetailPO> receiptMaterialDetailDbMapByUniqueId,
List<ReceiptMaterialDetailDO> returnReceiptMaterialDetailDOList,
BigDecimal[] wholeOrderReceiptQtySumHolder,
int[] materialKindsCompleteHolder) {
BigDecimal receiptQuantity = receiptMaterialDetailDO.getReceiptQuantity();
if (receiptQuantity == null) {
receiptQuantity = BigDecimal.ZERO;
}
List<ReceiptMaterialDetailDO> children = receiptMaterialDetailDO.getChildren();
BigDecimal childrenTotalQuantity = BigDecimal.ZERO;
if (!CollectionUtils.isEmpty(children)) {
childrenTotalQuantity = children.stream()
.map(ReceiptMaterialDetailDO::getReceiptQuantity)
.filter(Objects::nonNull)
.reduce(BigDecimal.ZERO, BigDecimal::add);
}
boolean hasReceiptByMetrics = pickAbsoluteMetricFromPage(receiptMaterialDetailDO.getReceiptNetWeight(), receiptMaterialDetailDO.getTotalNetWeight()).compareTo(BigDecimal.ZERO) > 0
|| pickAbsoluteMetricFromPage(receiptMaterialDetailDO.getReceiptGrossWeight(), receiptMaterialDetailDO.getTotalGrossWeight()).compareTo(BigDecimal.ZERO) > 0;
if (!hasReceiptByMetrics && !CollectionUtils.isEmpty(children)) {
for (ReceiptMaterialDetailDO c : children) {
if (c == null) {
continue;
}
if (pickAbsoluteMetricFromPage(c.getReceiptNetWeight(), c.getTotalNetWeight()).compareTo(BigDecimal.ZERO) > 0
|| pickAbsoluteMetricFromPage(c.getReceiptGrossWeight(), c.getTotalGrossWeight()).compareTo(BigDecimal.ZERO) > 0) {
hasReceiptByMetrics = true;
break;
}
}
}
boolean hasReceipt = receiptQuantity.compareTo(BigDecimal.ZERO) > 0 || childrenTotalQuantity.compareTo(BigDecimal.ZERO) > 0
|| hasReceiptByMetrics;
List<ReceiptMaterialDetailDO> returnReceiptMaterialDetailDOChildList = new ArrayList<>();
BigDecimal planQty = receiptMaterialDetailPO.getQuantity() != null ? receiptMaterialDetailPO.getQuantity() : BigDecimal.ZERO;
if (hasReceipt) {
BigDecimal poReceiptQty = receiptMaterialDetailPO.getReceiptQuantity() != null
? receiptMaterialDetailPO.getReceiptQuantity() : BigDecimal.ZERO;
if (poReceiptQty.compareTo(BigDecimal.ZERO) == 0) {
receiptMaterialDetailDO.setAllowModify(2);
setMaterialMoreDetailInfo(receiptMaterialDetailDO);
}
List<ReceiptMaterialDetailDO> receiptMaterialDetailDOChildList = receiptMaterialDetailDO.getChildren();
if (!CollectionUtils.isEmpty(receiptMaterialDetailDOChildList)) {
for (ReceiptMaterialDetailDO receiptMaterialDetailDOChild : receiptMaterialDetailDOChildList) {
ReceiptMaterialDetailPO receiptMaterialDetailPOChildDb = receiptMaterialDetailDbMap.get(receiptMaterialDetailDOChild.getMaterialDetailId());
if (receiptMaterialDetailPOChildDb == null && receiptMaterialDetailDOChild.getUniqueId() != null) {
receiptMaterialDetailPOChildDb = receiptMaterialDetailDbMapByUniqueId.get(receiptMaterialDetailDOChild.getUniqueId());
}
BigDecimal childQty = receiptMaterialDetailDOChild.getReceiptQuantity() != null ? receiptMaterialDetailDOChild.getReceiptQuantity() : BigDecimal.ZERO;
BigDecimal childGross = pickAbsoluteMetricFromPage(receiptMaterialDetailDOChild.getReceiptGrossWeight(), receiptMaterialDetailDOChild.getTotalGrossWeight());
BigDecimal childNet = pickAbsoluteMetricFromPage(receiptMaterialDetailDOChild.getReceiptNetWeight(), receiptMaterialDetailDOChild.getTotalNetWeight());
BigDecimal childVol = pickAbsoluteMetricFromPage(receiptMaterialDetailDOChild.getReceiptVolume(), receiptMaterialDetailDOChild.getTotalVolume());
BigDecimal childArea = pickAbsoluteMetricFromPage(receiptMaterialDetailDOChild.getReceiptArea(), receiptMaterialDetailDOChild.getTotalArea());
if (childQty.compareTo(BigDecimal.ZERO) == 0 && childNet.compareTo(BigDecimal.ZERO) > 0) {
childQty = childNet;
}
if (childQty.compareTo(BigDecimal.ZERO) == 0 && childGross.compareTo(BigDecimal.ZERO) > 0) {
childQty = childGross;
}
ReceiptMaterialDetailDO returnReceiptMaterialDetailDOChild = new ReceiptMaterialDetailDO();
if (receiptMaterialDetailPOChildDb != null) {
BeanUtils.copyProperties(receiptMaterialDetailPOChildDb, returnReceiptMaterialDetailDOChild);
BeanUtils.copyProperties(receiptMaterialDetailDOChild, returnReceiptMaterialDetailDOChild, IgnoreNullUtil.getNullPropertyNames(receiptMaterialDetailDOChild));
returnReceiptMaterialDetailDOChild.setAlreadyReceiptQuantity(childQty);
returnReceiptMaterialDetailDOChild.setAlreadyReceiptGrossWeight(childGross);
returnReceiptMaterialDetailDOChild.setAlreadyReceiptNetWeight(childNet);
returnReceiptMaterialDetailDOChild.setAlreadyReceiptVolume(childVol);
returnReceiptMaterialDetailDOChild.setAlreadyReceiptArea(childArea);
returnReceiptMaterialDetailDOChild.setAllowModify(2);
returnReceiptMaterialDetailDOChild.setLevel(2);
returnReceiptMaterialDetailDOChild.setParentUniqueId(receiptMaterialDetailPO.getUniqueId());
setMaterialMoreDetailInfo(returnReceiptMaterialDetailDOChild);
} else {
BeanUtils.copyProperties(receiptMaterialDetailPO, returnReceiptMaterialDetailDOChild, "materialDetailId", "createBy", "createByName", "createTime",
"updateBy", "updateByName", "updateTime");
BeanUtils.copyProperties(receiptMaterialDetailDOChild, returnReceiptMaterialDetailDOChild, IgnoreNullUtil.getNullPropertyNames(receiptMaterialDetailDOChild));
if (ObjectUtil.isNotNull(returnReceiptMaterialDetailDOChild.getMaterialDetailId()) && returnReceiptMaterialDetailDOChild.getMaterialDetailId() == 0) {
returnReceiptMaterialDetailDOChild.setMaterialDetailId(null);
}
returnReceiptMaterialDetailDOChild.setAllowModify(2);
returnReceiptMaterialDetailDOChild.setUniqueId(idGenerator.snowflakeId(SnowFlakeConstants.wmsId));
returnReceiptMaterialDetailDOChild.setLevel(2);
returnReceiptMaterialDetailDOChild.setParentUniqueId(receiptMaterialDetailPO.getUniqueId());
setMaterialMoreDetailInfo(returnReceiptMaterialDetailDOChild);
returnReceiptMaterialDetailDOChild.setAlreadyReceiptGrossWeight(childGross);
returnReceiptMaterialDetailDOChild.setAlreadyReceiptNetWeight(childNet);
returnReceiptMaterialDetailDOChild.setAlreadyReceiptVolume(childVol);
returnReceiptMaterialDetailDOChild.setAlreadyReceiptArea(childArea);
returnReceiptMaterialDetailDOChild.setAlreadyReceiptQuantity(childQty);
}
returnReceiptMaterialDetailDOChild.setTotalNetWeight(returnReceiptMaterialDetailDOChild.getAlreadyReceiptNetWeight());
returnReceiptMaterialDetailDOChild.setTotalGrossWeight(returnReceiptMaterialDetailDOChild.getAlreadyReceiptGrossWeight());
returnReceiptMaterialDetailDOChild.setTotalVolume(returnReceiptMaterialDetailDOChild.getAlreadyReceiptVolume());
returnReceiptMaterialDetailDOChild.setTotalArea(returnReceiptMaterialDetailDOChild.getAlreadyReceiptArea());
if (receiptMaterialDetailPO.getSerialNumberManage() == 1) {
if (CollectionUtils.isEmpty(receiptMaterialDetailDOChild.getMaterialDetailSerialNumberList())) {
throw new ServiceException("物料【" + receiptMaterialDetailPO.getMaterialName() + "】开启了序列号管理的序列号不能为空");
}
}
returnReceiptMaterialDetailDOChild.setMaterialDetailSerialNumberList(receiptMaterialDetailDOChild.getMaterialDetailSerialNumberList());
returnReceiptMaterialDetailDOChild.setMaterialMoreDetailList(receiptMaterialDetailDOChild.getMaterialMoreDetailList());
if (returnReceiptMaterialDetailDOChild.getAlreadyReceiptQuantity() != null) {
returnReceiptMaterialDetailDOChild.setReceiptQuantity(returnReceiptMaterialDetailDOChild.getAlreadyReceiptQuantity());
}
returnReceiptMaterialDetailDOChild.setQuantity(null);
returnReceiptMaterialDetailDOChildList.add(returnReceiptMaterialDetailDOChild);
}
}
BigDecimal mainItemActualQuantity = receiptQuantity;
BigDecimal parentReceiptGross = pickAbsoluteMetricFromPage(receiptMaterialDetailDO.getReceiptGrossWeight(), receiptMaterialDetailDO.getTotalGrossWeight());
BigDecimal parentReceiptNet = pickAbsoluteMetricFromPage(receiptMaterialDetailDO.getReceiptNetWeight(), receiptMaterialDetailDO.getTotalNetWeight());
BigDecimal parentReceiptVol = pickAbsoluteMetricFromPage(receiptMaterialDetailDO.getReceiptVolume(), receiptMaterialDetailDO.getTotalVolume());
BigDecimal parentReceiptArea = pickAbsoluteMetricFromPage(receiptMaterialDetailDO.getReceiptArea(), receiptMaterialDetailDO.getTotalArea());
receiptMaterialDetailDO.setAlreadyReceiptQuantity(mainItemActualQuantity);
receiptMaterialDetailDO.setAlreadyReceiptGrossWeight(parentReceiptGross);
receiptMaterialDetailDO.setAlreadyReceiptNetWeight(parentReceiptNet);
receiptMaterialDetailDO.setAlreadyReceiptVolume(parentReceiptVol);
receiptMaterialDetailDO.setAlreadyReceiptArea(parentReceiptArea);
receiptMaterialDetailDO.setTotalNetWeight(receiptMaterialDetailDO.getAlreadyReceiptNetWeight());
receiptMaterialDetailDO.setTotalGrossWeight(receiptMaterialDetailDO.getAlreadyReceiptGrossWeight());
receiptMaterialDetailDO.setTotalVolume(receiptMaterialDetailDO.getAlreadyReceiptVolume());
receiptMaterialDetailDO.setTotalArea(receiptMaterialDetailDO.getAlreadyReceiptArea());
BigDecimal groupReceived = receiptMaterialDetailDO.getAlreadyReceiptQuantity() != null
? receiptMaterialDetailDO.getAlreadyReceiptQuantity() : BigDecimal.ZERO;
if (!CollectionUtils.isEmpty(returnReceiptMaterialDetailDOChildList)) {
for (ReceiptMaterialDetailDO ch : returnReceiptMaterialDetailDOChildList) {
BigDecimal ca = ch.getAlreadyReceiptQuantity() != null ? ch.getAlreadyReceiptQuantity() : BigDecimal.ZERO;
groupReceived = groupReceived.add(ca);
}
}
Integer receiptStatus = judgeReceiptQuantity(groupReceived, planQty);
receiptMaterialDetailDO.setReceiptStatus(receiptStatus);
if (!CollectionUtils.isEmpty(returnReceiptMaterialDetailDOChildList)) {
for (ReceiptMaterialDetailDO ch : returnReceiptMaterialDetailDOChildList) {
ch.setReceiptStatus(receiptStatus);
}
}
wholeOrderReceiptQtySumHolder[0] = wholeOrderReceiptQtySumHolder[0].add(groupReceived);
if (receiptStatus > 2) {
materialKindsCompleteHolder[0] = materialKindsCompleteHolder[0] + 1;
}
} else {
receiptMaterialDetailDO.setAlreadyReceiptQuantity(BigDecimal.ZERO);
receiptMaterialDetailDO.setAlreadyReceiptGrossWeight(BigDecimal.ZERO);
receiptMaterialDetailDO.setAlreadyReceiptNetWeight(BigDecimal.ZERO);
receiptMaterialDetailDO.setAlreadyReceiptVolume(BigDecimal.ZERO);
receiptMaterialDetailDO.setAlreadyReceiptArea(BigDecimal.ZERO);
receiptMaterialDetailDO.setReceiptStatus(judgeReceiptQuantity(BigDecimal.ZERO, planQty));
}
ReceiptMaterialDetailDO returnReceiptMaterialDetailDO = new ReceiptMaterialDetailDO();
BeanUtils.copyProperties(receiptMaterialDetailPO, returnReceiptMaterialDetailDO);
BeanUtils.copyProperties(receiptMaterialDetailDO, returnReceiptMaterialDetailDO, IgnoreNullUtil.getNullPropertyNames(receiptMaterialDetailDO));
returnReceiptMaterialDetailDO.setTotalNetWeight(receiptMaterialDetailDO.getTotalNetWeight());
returnReceiptMaterialDetailDO.setTotalGrossWeight(receiptMaterialDetailDO.getTotalGrossWeight());
returnReceiptMaterialDetailDO.setTotalVolume(receiptMaterialDetailDO.getTotalVolume());
returnReceiptMaterialDetailDO.setTotalArea(receiptMaterialDetailDO.getTotalArea());
BigDecimal parentRetAlreadyQty = receiptMaterialDetailDO.getAlreadyReceiptQuantity() != null
? receiptMaterialDetailDO.getAlreadyReceiptQuantity() : BigDecimal.ZERO;
returnReceiptMaterialDetailDO.setAlreadyReceiptQuantity(parentRetAlreadyQty);
returnReceiptMaterialDetailDO.setReceiptQuantity(parentRetAlreadyQty);
if (receiptMaterialDetailPO.getReceiptStatus() == 1) {
if (receiptMaterialDetailPO.getSerialNumberManage() == 1) {
if (CollectionUtils.isEmpty(receiptMaterialDetailDO.getMaterialDetailSerialNumberList())) {
throw new ServiceException("物料【" + receiptMaterialDetailPO.getMaterialName() + "】开启了序列号管理的序列号不能为空");
}
}
returnReceiptMaterialDetailDO.setMaterialDetailSerialNumberList(receiptMaterialDetailDO.getMaterialDetailSerialNumberList());
returnReceiptMaterialDetailDO.setMaterialMoreDetailList(receiptMaterialDetailDO.getMaterialMoreDetailList());
} else {
returnReceiptMaterialDetailDO.setMaterialDetailSerialNumberList(new ArrayList<>());
returnReceiptMaterialDetailDO.setMaterialMoreDetailList(new ArrayList<>());
}
returnReceiptMaterialDetailDO.setChildren(returnReceiptMaterialDetailDOChildList);
returnReceiptMaterialDetailDOList.add(returnReceiptMaterialDetailDO);
}
/**
* @description 收货装配参数
* @author ZhouGY
* @date 2024/5/22 9:27
* @param stockReceiptOrderDO
* @param pcFullPageOverwrite PC 收货确认 true=页面全量覆盖累计已收(不累加历史)
* @return Boolean
*/
private StockReceiptOrderDO assembleParamByReceipt(StockReceiptOrderDO stockReceiptOrderDO) {
private StockReceiptOrderDO assembleParamByReceipt(StockReceiptOrderDO stockReceiptOrderDO, boolean pcFullPageOverwrite) {
StockReceiptOrderPO stockReceiptOrderPO = stockReceiptOrderDomainService.getInfo(stockReceiptOrderDO.getReceiptOrderId());
if (stockReceiptOrderPO == null){
throw new ServiceException("收货单不存在");
@@ -1734,6 +1932,8 @@ public class StockReceiptOrderApplicationService {
.collect(Collectors.toMap(ReceiptMaterialDetailPO::getUniqueId, Function.identity()));
BigDecimal totalActualQuantity = BigDecimal.ZERO;//收货单当前作业收货数
int totalActualReceiptMaterialQuantity = 0;//收货单收货物料种数
BigDecimal[] wholeOrderReceiptQtySumHolder = new BigDecimal[]{BigDecimal.ZERO};
int[] materialKindsCompleteHolder = new int[]{0};
List<ReceiptMaterialDetailDO> returnReceiptMaterialDetailDOList = new ArrayList<>();
for (ReceiptMaterialDetailDO receiptMaterialDetailDO : stockReceiptOrderDO.getMaterialDetailList()){
//设置物料更多属性信息:优先用 materialDetailId 查找,若为空则用 uniqueId 查找(兼容 PDA 只传 uniqueId 的场景)
@@ -1747,6 +1947,11 @@ public class StockReceiptOrderApplicationService {
if (receiptMaterialDetailPO == null){
throw new ServiceException("物料明细不存在");
}
if (pcFullPageOverwrite) {
appendReceiptLinePcFullPageOverwrite(receiptMaterialDetailDO, receiptMaterialDetailPO, receiptMaterialDetailDbMap,
receiptMaterialDetailDbMapByUniqueId, returnReceiptMaterialDetailDOList, wholeOrderReceiptQtySumHolder, materialKindsCompleteHolder);
continue;
}
// receiptQuantity 空值保护,PDA 未传时按 0 处理
BigDecimal receiptQuantity = receiptMaterialDetailDO.getReceiptQuantity();
if (receiptQuantity == null) {
@@ -1999,8 +2204,16 @@ public class StockReceiptOrderApplicationService {
returnReceiptMaterialDetailDOList.add(returnReceiptMaterialDetailDO);
}
returnStockReceiptOrderDO.setMaterialDetailList(returnReceiptMaterialDetailDOList);
returnStockReceiptOrderDO.setActualQuantity(totalActualQuantity);
returnStockReceiptOrderDO.setActualReceiptMaterialQuantity(totalActualReceiptMaterialQuantity);
if (pcFullPageOverwrite) {
returnStockReceiptOrderDO.setReceiptSubmitOverwriteFromPage(true);
returnStockReceiptOrderDO.setReceiptQuantity(wholeOrderReceiptQtySumHolder[0]);
returnStockReceiptOrderDO.setReceiptMaterialQuantity(materialKindsCompleteHolder[0]);
returnStockReceiptOrderDO.setActualQuantity(BigDecimal.ZERO);
returnStockReceiptOrderDO.setActualReceiptMaterialQuantity(0);
} else {
returnStockReceiptOrderDO.setActualQuantity(totalActualQuantity);
returnStockReceiptOrderDO.setActualReceiptMaterialQuantity(totalActualReceiptMaterialQuantity);
}
return returnStockReceiptOrderDO;
}
@@ -155,6 +155,13 @@ public class StockInOrderDomainService {
if (stockInOrderPO == null){
throw new ServiceException("入库单信息不存在");
}
if (!CollectionUtils.isEmpty(stockInOrderDO.getMaterialDetailList())) {
stockInOrderDO.getMaterialDetailList().forEach(detail -> {
if (detail.getInboundQuantity() != null) {
detail.setQuantity(detail.getInboundQuantity());
}
});
}
//设置物料信息
setMaterialDetailInfo(stockInOrderDO);
//统计总物料种数
@@ -568,19 +575,18 @@ public class StockInOrderDomainService {
inMaterialDetailDO.setWeightLimit(packDetailFeignPO.getWeight());
inMaterialDetailDO.setVolumeLimit(packDetailFeignPO.getVolume());
//获取仓库控制信息
// 仓库控制信息有则回填无则不校验允许未维护物料-仓库控制时编辑入库单
MaterialWarehouseControlPO materialWarehouseControlPO = materialWarehouseControlService.getInfoByMaterialBaseInfoIds(materialBaseInfoPO.getMaterialBaseInfoId());
if (materialWarehouseControlPO == null){
throw new ServiceException("物料仓库控制信息不存在");
if (materialWarehouseControlPO != null) {
inMaterialDetailDO.setMaterialWarehouseControlId(materialWarehouseControlPO.getMaterialWarehouseControlId());
inMaterialDetailDO.setSerialNumberManage(materialWarehouseControlPO.getSerialNumberManage());
inMaterialDetailDO.setQualityInspectionManage(materialWarehouseControlPO.getQualityInspectionManage());
inMaterialDetailDO.setQualityInspectionStage(materialWarehouseControlPO.getQualityInspectionStage());
inMaterialDetailDO.setQualityInspectionRule(materialWarehouseControlPO.getQualityInspectionRule());
inMaterialDetailDO.setQualityInspectionTerm(materialWarehouseControlPO.getQualityInspectionTerm());
inMaterialDetailDO.setAllowOvercharge(materialWarehouseControlPO.getAllowOvercharge());
inMaterialDetailDO.setOverchargeRatio(materialWarehouseControlPO.getOverchargeRatio());
}
inMaterialDetailDO.setMaterialWarehouseControlId(materialWarehouseControlPO.getMaterialWarehouseControlId());
inMaterialDetailDO.setSerialNumberManage(materialWarehouseControlPO.getSerialNumberManage());
inMaterialDetailDO.setQualityInspectionManage(materialWarehouseControlPO.getQualityInspectionManage());
inMaterialDetailDO.setQualityInspectionStage(materialWarehouseControlPO.getQualityInspectionStage());
inMaterialDetailDO.setQualityInspectionRule(materialWarehouseControlPO.getQualityInspectionRule());
inMaterialDetailDO.setQualityInspectionTerm(materialWarehouseControlPO.getQualityInspectionTerm());
inMaterialDetailDO.setAllowOvercharge(materialWarehouseControlPO.getAllowOvercharge());
inMaterialDetailDO.setOverchargeRatio(materialWarehouseControlPO.getOverchargeRatio());
//获取商品规则信息
MaterialGoodsRulePO materialGoodsRulePO = materialGoodsRuleService.getInfoByMaterialBaseInfoIds(materialBaseInfoPO.getMaterialBaseInfoId());
@@ -170,6 +170,13 @@ public class StockReceiptOrderDO extends StockInOrderBaseDO {
@ApiModelProperty("是否来自PDA收货:true-PDA收货完成,false-PC收货完成(用于上架单是否下发:PDA=是,PC=否)")
private Boolean fromPda;
/**
* PC 收货确认以页面提交数据为全量实绩覆盖落库 Application 层根据入口设置非前端传入
*/
@ApiModelProperty(hidden = true)
private Boolean receiptSubmitOverwriteFromPage;
@ApiModelProperty("费用")
List<ReceiptOrderAccount> receiptOrderAccountList;
}
@@ -429,12 +429,14 @@ public class StockReceiptOrderDomainService {
private void saveAmount(StockReceiptOrderDO stockReceiptOrderDO) {
Long receiptOrderId = stockReceiptOrderDO.getReceiptOrderId();
List<ReceiptOrderAccount> receiptOrderAccountList = stockReceiptOrderDO.getReceiptOrderAccountList();
for (ReceiptOrderAccount receiptOrderAccount : receiptOrderAccountList) {
receiptOrderAccount.setOrderId(receiptOrderId);
}
receiptOrderAccountService.remove(new QueryWrapper<ReceiptOrderAccount>().lambda().eq(ReceiptOrderAccount::getOrderId, receiptOrderId));
receiptOrderAccountService.saveBatch(receiptOrderAccountList);
List<ReceiptOrderAccount> receiptOrderAccountList = stockReceiptOrderDO.getReceiptOrderAccountList();
if (receiptOrderAccountList != null && !receiptOrderAccountList.isEmpty()) {
for (ReceiptOrderAccount receiptOrderAccount : receiptOrderAccountList) {
receiptOrderAccount.setOrderId(receiptOrderId);
}
receiptOrderAccountService.saveBatch(receiptOrderAccountList);
}
}
/**
@@ -694,8 +696,19 @@ public class StockReceiptOrderDomainService {
LoginUser loginUser = SecurityUtils.getLoginUser();
StockReceiptOrder stockReceiptOrder = new StockReceiptOrder();
stockReceiptOrder.setReceiptOrderId(stockReceiptOrderPO.getReceiptOrderId());
stockReceiptOrder.setReceiptQuantity(stockReceiptOrderPO.getReceiptQuantity().add(stockReceiptOrderDO.getActualQuantity()));
stockReceiptOrder.setReceiptMaterialQuantity(stockReceiptOrderPO.getReceiptMaterialQuantity() + stockReceiptOrderDO.getActualReceiptMaterialQuantity());
if (Boolean.TRUE.equals(stockReceiptOrderDO.getReceiptSubmitOverwriteFromPage())) {
BigDecimal rq = stockReceiptOrderDO.getReceiptQuantity();
stockReceiptOrder.setReceiptQuantity(rq != null ? rq : BigDecimal.ZERO);
Integer rmq = stockReceiptOrderDO.getReceiptMaterialQuantity();
stockReceiptOrder.setReceiptMaterialQuantity(rmq != null ? rmq : 0);
} else {
BigDecimal prevRq = stockReceiptOrderPO.getReceiptQuantity() != null ? stockReceiptOrderPO.getReceiptQuantity() : BigDecimal.ZERO;
BigDecimal addAq = stockReceiptOrderDO.getActualQuantity() != null ? stockReceiptOrderDO.getActualQuantity() : BigDecimal.ZERO;
stockReceiptOrder.setReceiptQuantity(prevRq.add(addAq));
int prevRmq = stockReceiptOrderPO.getReceiptMaterialQuantity() != null ? stockReceiptOrderPO.getReceiptMaterialQuantity() : 0;
int addArm = stockReceiptOrderDO.getActualReceiptMaterialQuantity() != null ? stockReceiptOrderDO.getActualReceiptMaterialQuantity() : 0;
stockReceiptOrder.setReceiptMaterialQuantity(prevRmq + addArm);
}
stockReceiptOrder.setStatus(2);
stockReceiptOrder.setUpdateBy(loginUser.getUserid());
stockReceiptOrder.setUpdateByName(loginUser.getUsername());