Browse Source

[feat]

修改入库-采购和其详情的暂收数量改为暂收合格数
修改入库-仓库和其详情的暂收数量改为暂收合格数
重写入库-采购的后端保存方法:需要更新入库单主表和子表的入库数量和已入库数量、入库单主表的入库状态要根据数量进行更新,状态未改为全部入库之前可多次入库;入库单子表入库的时候加上 “入库数量不能大于暂收合格数”和“已入库数量不能大于暂收合格数”两个校验;新增更新生产单数据的方法updateSysMakeOrderByWarehouseStorageOrder;新增更新采购订单的数据;最后再更新入库单数据
入库单新增 根据入库单号查询入库单方法;新增 根据入库单号查询关联单号方法
采购订单新增 根据采购订单编号查询采购订单方法;新增 通过采购订单号数组查关联的采购计划单号方法
生产订单新增仓库采购入库单进行入库的时候更新生产订单数据方法,实现:根据以下关系: 一个生产订单对应一个采购计划单;多个采购计划单对应一个采购订单;一个采购订单对应一个入库单;完成仓库入库的时候对生产订单多条数据进行更新操作;
生产订单新增 根据生产单号集合查询生产订单方法
dev
liuxiaoxu 3 months ago
parent
commit
1a3f56d87d
  1. 15
      ruoyi-admin/src/main/java/com/ruoyi/purchase/mapper/PurchaseOrderMapper.java
  2. 4
      ruoyi-admin/src/main/java/com/ruoyi/system/domain/SysMakeOrder.java
  3. 6
      ruoyi-admin/src/main/java/com/ruoyi/system/mapper/SysMakeOrderMapper.java
  4. 71
      ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/SysMakeOrderServiceImpl.java
  5. 10
      ruoyi-admin/src/main/java/com/ruoyi/warehouse/mapper/WarehouseStorageOrderMapper.java
  6. 4
      ruoyi-admin/src/main/java/com/ruoyi/warehouse/service/IWarehouseStorageOrderService.java
  7. 104
      ruoyi-admin/src/main/java/com/ruoyi/warehouse/service/impl/WarehouseStorageOrderServiceImpl.java
  8. 12
      ruoyi-admin/src/main/resources/mapper/purchase/PurchaseOrderMapper.xml
  9. 11
      ruoyi-admin/src/main/resources/mapper/system/SysMakeOrderMapper.xml
  10. 17
      ruoyi-admin/src/main/resources/mapper/warehouse/WarehouseStorageOrderMapper.xml
  11. 2
      ruoyi-admin/src/main/resources/templates/warehouse/storageOrder/storagePurchase.html
  12. 2
      ruoyi-admin/src/main/resources/templates/warehouse/storageOrder/storagePurchaseDetail.html
  13. 2
      ruoyi-admin/src/main/resources/templates/warehouse/storageOrder/storagePurchaseWarehouse.html
  14. 2
      ruoyi-admin/src/main/resources/templates/warehouse/storageOrder/storagePurchaseWarehouseDetail.html

15
ruoyi-admin/src/main/java/com/ruoyi/purchase/mapper/PurchaseOrderMapper.java

@ -42,6 +42,18 @@ public interface PurchaseOrderMapper
* */
List<PurchaseOrder> selectPurchaseOrderChildListByCodes(String[] purchaseOrderCodes);
/**
* 根据采购订单编号查询采购订单
* */
PurchaseOrder selectPurchaseOrderByOrderCode(String purchaseOrderCode);
/**
* 通过采购订单号数组查关联的采购计划单号
* */
String selectPurchasePlanCodeByCode(String purchaseOrderCode);
/**
* 新增采购订单
@ -87,8 +99,7 @@ public interface PurchaseOrderMapper
//查询关联类型为生产订单的采购订单列表
public List<PurchaseOrder> selectOrderByIdDesc();
//根据采购订单编号查询采购订单
PurchaseOrder selectPurchaseOrderByOrderCode(String purchaseOrderCode);
//校验采购订单编号是否唯一
public Integer checkPurchaseOrderCodeUnique(String purchaseOrderCode);

4
ruoyi-admin/src/main/java/com/ruoyi/system/domain/SysMakeOrder.java

@ -25,8 +25,8 @@ public class SysMakeOrder extends BaseEntity
@Excel(name = "生产状态")
private String makeStatus;
/** 入库状态 */
@Excel(name = "入库状态")
/** 入库状态(0待采购、1采购中、2待暂收、3部分暂收、4全部暂收、5已暂收、6待入库、7部分入库、8全部入库、9已入库) */
@Excel(name = "入库状态",dictType = "purchase_status")
private String eceiptStatus;
/** 品质状态 */

6
ruoyi-admin/src/main/java/com/ruoyi/system/mapper/SysMakeOrderMapper.java

@ -124,4 +124,10 @@ public interface SysMakeOrderMapper
* 根据销售单号查询生产订单
* */
SysMakeOrder selectMakeOrderBySaleNo(String salesOrderCode);
/**
* 根据生产单号集合查询生产订单
* */
List<SysMakeOrder> selectMakeOrderByMakeNoList(List<String> makeNos);
}

71
ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/SysMakeOrderServiceImpl.java

@ -15,6 +15,8 @@ import com.ruoyi.erp.domain.ErpInboundOrderDetail;
import com.ruoyi.erp.domain.ErpMaterial;
import com.ruoyi.erp.mapper.ErpMaterialMapper;
import com.ruoyi.erp.service.IErpBomService;
import com.ruoyi.purchase.domain.PurchasePlan;
import com.ruoyi.purchase.mapper.PurchaseOrderMapper;
import com.ruoyi.purchase.service.IPurchasePlanService;
import com.ruoyi.quality.domain.QualityOrder;
import com.ruoyi.quality.domain.QualityOrderDetail;
@ -32,6 +34,7 @@ import com.ruoyi.system.mapper.*;
import com.ruoyi.system.service.*;
import com.ruoyi.warehouse.domain.WarehouseStorageOrder;
import com.ruoyi.warehouse.domain.WarehouseStorageOrderDetail;
import com.ruoyi.warehouse.mapper.WarehouseStorageOrderMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@ -112,6 +115,13 @@ public class SysMakeOrderServiceImpl implements ISysMakeOrderService
@Autowired
private QualityShippingDeviceMapper qualityDeviceMapper;
@Autowired
private WarehouseStorageOrderMapper warehouseStorageOrderMapper;
@Autowired
private PurchaseOrderMapper purchaseOrderMapper;
/**
* 查询生产订单
*
@ -487,40 +497,55 @@ public class SysMakeOrderServiceImpl implements ISysMakeOrderService
public int updateSysMakeOrderByWarehouseStorageOrder(WarehouseStorageOrder warehouseStorageOrder,List<WarehouseStorageOrderDetail> warehouseStorageOrderDetailList) {
String loginName = ShiroUtils.getLoginName();
SysMakeOrder sysMakeOrder = new SysMakeOrder();
sysMakeOrder.setUpdateBy(loginName);
sysMakeOrder.setUpdateTime(new Date());
//暂时假设全部入库
sysMakeOrder.setEceiptStatus("8");
//暂时假设全部品质
sysMakeOrder.setQualityStatus("2");
int updateResult = 0;
//查询生产订单数据 根据 入库单关联单号
String warehouseStorageCode = warehouseStorageOrder.getWarehouseStorageCode();
if (StringUtils.isEmpty(warehouseStorageCode)){
log.warn("更新生产订单相关的入库单号为空:{}",warehouseStorageCode);
}
// //合计入库的时候所有物料信息的入库数量
// int makeOrderStorageNum = warehouseStorageOrderDetailList.stream()
// .mapToInt(WarehouseStorageOrderDetail::getStorageNum)
// .sum();
String makeNo = sysMakeOrderMapper.selectMakeByWarehouseStorageCode(warehouseStorageCode);
String purchaseOrderCode = warehouseStorageOrderMapper.selectRelateCodeByCode(warehouseStorageCode);
if (StringUtils.isEmpty(purchaseOrderCode)){
log.warn("找不到与仓库入库单号关联的采购单号:{}",purchaseOrderCode);
throw new BusinessException("找不到与仓库入库单号关联的采购单号");
}
if (StringUtils.isEmpty(makeNo)) {
log.warn("找不到与仓库存储单号[{}]相关的生产单号", warehouseStorageCode);
List<String> purchasePlanCodes = new ArrayList<>();
String purchasePlanCode = purchaseOrderMapper.selectPurchasePlanCodeByCode(purchaseOrderCode);
if (StringUtils.isEmpty(purchasePlanCode)){
log.warn("找不到与采购单号关联的采购计划号:{}",purchasePlanCode);
throw new BusinessException("找不到与采购单号关联的采购计划号");
}
sysMakeOrder.setMakeNo(makeNo);
//只有生产入库才能更新生产订单的已入库数
//sysMakeOrder.setEceiptNum((long) warehouseStorageOrder.getStorageNum());
//更新生产订单的数据
int updateResult = sysMakeOrderMapper.updateByMakeNo(sysMakeOrder);
if (updateResult <= 0){
log.warn("更新生产单失败,未影响任何行");
throw new BusinessException("更新生产单失败,未影响任何行");
if (StringUtils.isNotEmpty(purchasePlanCode)){
String[] splitPurchasePlanCode = purchasePlanCode.split(",");
purchasePlanCodes = Arrays.asList(splitPurchasePlanCode);
}
return updateResult;
List<PurchasePlan> purchasePlans = purchasePlanService.selectPurchaseOrderByPlanCodeList(purchasePlanCodes);
List<String> makeNos = purchasePlans.stream().map(PurchasePlan::getCorrelationCode).collect(Collectors.toList());
List<SysMakeOrder> sysMakeOrders = sysMakeOrderMapper.selectMakeOrderByMakeNoList(makeNos);
for (SysMakeOrder sysMakeOrder : sysMakeOrders) {
sysMakeOrder.setUpdateBy(loginName);
sysMakeOrder.setUpdateTime(new Date());
if (warehouseStorageOrder.getStorageNum().equals(warehouseStorageOrder.getTemporaryQualifiedNum())){
sysMakeOrder.setEceiptStatus("8");//全部入库
}else {
sysMakeOrder.setEceiptStatus("7");//部分入库
}
//暂时全部品质
sysMakeOrder.setQualityStatus("2");
//更新生产订单的数据
updateResult += sysMakeOrderMapper.updateByMakeNo(sysMakeOrder);
if (updateResult <= 0){
log.warn("更新生产单失败,未影响任何行");
throw new BusinessException("更新生产单失败,未影响任何行");
}
}
return updateResult;
}
/**

10
ruoyi-admin/src/main/java/com/ruoyi/warehouse/mapper/WarehouseStorageOrderMapper.java

@ -139,4 +139,14 @@ public interface WarehouseStorageOrderMapper
//根据入库单号批量查询
List<WarehouseStorageOrder> selectStorageOrderListByCodes(String[] ids);
/**
* 根据入库单号查询入库单
* */
WarehouseStorageOrder selectStorageOrderByCode(String warehouseStorageCode);
/**
* 根据入库单号查询关联单号
*/
String selectRelateCodeByCode(String warehouseStorageCode);
}

4
ruoyi-admin/src/main/java/com/ruoyi/warehouse/service/IWarehouseStorageOrderService.java

@ -97,10 +97,6 @@ public interface IWarehouseStorageOrderService
int updateWarehouseStorageOrderByOutQualityOrder(QualityOrder qualityOrder, List<QualityOrderDetail> qualityOrderDetailList);
/**
* 入库-采购单(采购入库)
* */
int storagePurchaseWarehouseStorageOrder(WarehouseStorageOrder warehouseStorageOrder);
/**
* 修改保存暂收-采购单(采购入库)

104
ruoyi-admin/src/main/java/com/ruoyi/warehouse/service/impl/WarehouseStorageOrderServiceImpl.java

@ -16,6 +16,7 @@ import com.ruoyi.erp.mapper.ErpMaterialMapper;
import com.ruoyi.purchase.domain.PurchaseOrder;
import com.ruoyi.purchase.domain.PurchaseOrderChild;
import com.ruoyi.purchase.mapper.PurchaseOrderChildMapper;
import com.ruoyi.purchase.mapper.PurchaseOrderMapper;
import com.ruoyi.quality.domain.QualityOrder;
import com.ruoyi.quality.domain.QualityOrderDetail;
import com.ruoyi.quality.domain.QualityRefundsExchanges;
@ -95,6 +96,10 @@ public class WarehouseStorageOrderServiceImpl implements IWarehouseStorageOrderS
@Autowired
private PurchaseOrderChildMapper purchaseOrderChildMapper;
@Autowired
private PurchaseOrderMapper purchaseOrderMapper;
@Autowired
private ErpMaterialMapper erpMaterialMapper;
@ -321,41 +326,8 @@ public class WarehouseStorageOrderServiceImpl implements IWarehouseStorageOrderS
}
return updateResult;
}
/**
* 入库-采购单(采购入库) 旧版弃用
* */
@Transactional(rollbackFor = Exception.class)
@Override
public int storagePurchaseWarehouseStorageOrder(WarehouseStorageOrder warehouseStorageOrder) {
//假设全部入库
warehouseStorageOrder.setWarehouseStorageStatus("4");
warehouseStorageOrder.setUpdateBy(ShiroUtils.getLoginName());
warehouseStorageOrder.setUpdateTime(DateUtils.getNowDate());
//记录一下入库时间
warehouseStorageOrder.setStorageTime(DateUtils.getNowDate());
List<WarehouseStorageOrderDetail> warehouseStorageOrderDetailList = warehouseStorageOrder.getWarehouseStorageOrderDetailList();
if (StringUtils.isEmpty(warehouseStorageOrderDetailList)){
log.warn("入库单详情数据为空:{}",warehouseStorageOrderDetailList);
}
//更新生产单数据
sysMakeOrderService.updateSysMakeOrderByWarehouseStorageOrder(warehouseStorageOrder,warehouseStorageOrderDetailList);
for (WarehouseStorageOrderDetail warehouseStorageOrderDetail : warehouseStorageOrderDetailList) {
//更新入库单详情的数据
storageOrderDetailMapper.updateWarehouseStorageOrderDetail(warehouseStorageOrderDetail);
}
//更新入库单的数据
int updateResult = warehouseStorageOrderMapper.updateWarehouseStorageOrder(warehouseStorageOrder);
if (updateResult <= 0){
log.warn("更新入库单失败,未影响任何行");
}
return updateResult;
}
/**
* 修改保存暂收-采购单(采购入库)
* */
@ -628,6 +600,14 @@ public class WarehouseStorageOrderServiceImpl implements IWarehouseStorageOrderS
warehouseStorageOrder.setUpdateTime(DateUtils.getNowDate());
//记录一下入库时间
warehouseStorageOrder.setStorageTime(DateUtils.getNowDate());
String warehouseStorageCode = warehouseStorageOrder.getWarehouseStorageCode();
WarehouseStorageOrder oldWarehouseStorageOrder = warehouseStorageOrderMapper.selectStorageOrderByCode(warehouseStorageCode);
//更新采购订单的数据
String purchaseOrderCode = warehouseStorageOrder.getRelatedOrderCode();
PurchaseOrder purchaseOrder = purchaseOrderMapper.selectPurchaseOrderByOrderCode(purchaseOrderCode);
List<WarehouseStorageOrderDetail> warehouseStorageOrderDetailList = warehouseStorageOrder.getWarehouseStorageOrderDetailList();
if (StringUtils.isEmpty(warehouseStorageOrderDetailList)){
log.warn("入库单详情数据为空:{}",warehouseStorageOrderDetailList);
@ -649,20 +629,40 @@ public class WarehouseStorageOrderServiceImpl implements IWarehouseStorageOrderS
.mapToInt(WarehouseStorageOrderDetail::getStorageNum)
.sum();
//插入主表入库数量
warehouseStorageOrder.setStorageNum(storageNum);
//更新生产单数据
int updateMakeOrderResult = sysMakeOrderService.updateSysMakeOrderByWarehouseStorageOrder(warehouseStorageOrder, warehouseStorageOrderDetailList);
if (updateMakeOrderResult <= 0){
throw new BusinessException("更新生产订单失败,未影响任何行");
if (oldWarehouseStorageOrder.getStorageNum() == null || oldWarehouseStorageOrder.getStorageNum() == 0){
//插入主表入库数量
warehouseStorageOrder.setStorageNum(storageNum);
purchaseOrder.setStorageSum(storageNum);
}else {
warehouseStorageOrder.setStorageNum(storageNum + oldWarehouseStorageOrder.getStorageNum());
purchaseOrder.setStorageSum(storageNum + oldWarehouseStorageOrder.getStorageNum());
}
for (WarehouseStorageOrderDetail warehouseStorageOrderDetail : warehouseStorageOrderDetailList) {
//更新入库单详情的数据
warehouseStorageOrderDetail.setUpdateBy(loginName);
warehouseStorageOrderDetail.setUpdateTime(DateUtils.getNowDate());
//更新已入库数
warehouseStorageOrderDetail.setHasStorageNum(warehouseStorageOrderDetail.getStorageNum());
Integer storageNumDetail = warehouseStorageOrderDetail.getStorageNum();
Integer temporaryQualifiedNum = warehouseStorageOrderDetail.getTemporaryQualifiedNum();
if (temporaryQualifiedNum < storageNumDetail){
throw new BusinessException("入库数量不能大于暂收合格数");
}
Integer hasStorageNum = warehouseStorageOrderDetail.getHasStorageNum();
if (hasStorageNum == null || hasStorageNum == 0){
//更新已入库数
warehouseStorageOrderDetail.setHasStorageNum(storageNumDetail);
}else{
warehouseStorageOrderDetail.setHasStorageNum(hasStorageNum + storageNumDetail);
}
if (temporaryQualifiedNum < hasStorageNum){
throw new BusinessException("已入库数量不能大于暂收合格数");
}
int updateWarehouseStorageOrderDetailResult = storageOrderDetailMapper.updateWarehouseStorageOrderDetail(warehouseStorageOrderDetail);
if (updateWarehouseStorageOrderDetailResult <= 0){
throw new BusinessException("更新仓库入库单详情失败,未影响任何行");
@ -675,6 +675,12 @@ public class WarehouseStorageOrderServiceImpl implements IWarehouseStorageOrderS
}
}
//更新生产单数据
int updateMakeOrderResult = sysMakeOrderService.updateSysMakeOrderByWarehouseStorageOrder(warehouseStorageOrder, warehouseStorageOrderDetailList);
if (updateMakeOrderResult <= 0){
throw new BusinessException("更新生产订单失败,未影响任何行");
}
//更新开发修改单数据
String relatedOrderCode = warehouseStorageOrder.getRelatedOrderCode();
ErpDevelopModifyorder erpDevelopModifyorder = developModifyorderMapper.selectErpDevelopModifyorderByCode(relatedOrderCode);
@ -684,6 +690,22 @@ public class WarehouseStorageOrderServiceImpl implements IWarehouseStorageOrderS
}
if (warehouseStorageOrder.getStorageNum().equals(warehouseStorageOrder.getTemporaryQualifiedNum())){
warehouseStorageOrder.setWarehouseStorageStatus("4");//全部入库
purchaseOrder.setWarehouseStorageStatus("4");
}else {
warehouseStorageOrder.setWarehouseStorageStatus("3");//部分入库
purchaseOrder.setWarehouseStorageStatus("3");
}
purchaseOrder.setUpdateBy(loginName);
purchaseOrder.setUpdateTime(DateUtils.getNowDate());
int updatePurchaseOrderResult = purchaseOrderMapper.updatePurchaseOrder(purchaseOrder);
if (updatePurchaseOrderResult <= 0){
log.warn("更新采购订单失败,未影响任何行");
throw new BusinessException("更新采购订单失败,未影响任何行");
}
//更新入库单的数据
int updateResult = warehouseStorageOrderMapper.updateWarehouseStorageOrder(warehouseStorageOrder);

12
ruoyi-admin/src/main/resources/mapper/purchase/PurchaseOrderMapper.xml

@ -81,6 +81,18 @@
</foreach>
</select>
<select id="selectPurchaseOrderByOrderCode" parameterType="String" resultMap="PurchaseOrderResult">
<include refid="selectPurchaseOrderVo"/>
where purchase_order_code = #{purchaseOrderCode}
</select>
<select id="selectPurchasePlanCodeByCode" parameterType="String" resultType="String">
SELECT purchase_plan_code
FROM purchase_order
WHERE purchase_order_code = #{purchaseOrderCode}
</select>
<insert id="insertPurchaseOrder" parameterType="PurchaseOrder" useGeneratedKeys="true" keyProperty="purchaseOrderId">
insert into purchase_order

11
ruoyi-admin/src/main/resources/mapper/system/SysMakeOrderMapper.xml

@ -282,6 +282,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select>
<select id="selectMakeOrderByMakeNoList" parameterType="String" resultMap="SysMakeOrderResult">
<include refid="selectSysMakeOrderVo"/>
where a.makeNo in
<foreach item="makeNo" collection="array" open="(" separator="," close=")">
#{makeNo}
</foreach>
</select>
<select id="selectMakeByWarehouseStorageCode" parameterType="String" resultType="String">
SELECT DISTINCT sm.makeNo
@ -292,5 +302,4 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
WHERE wso.warehouse_storage_code = #{warehouseStorageCode}
</select>
</mapper>

17
ruoyi-admin/src/main/resources/mapper/warehouse/WarehouseStorageOrderMapper.xml

@ -75,7 +75,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<include refid="selectWarehouseStorageOrderVo"/>
where warehouse_storage_id = #{warehouseStorageId}
</select>
<select id="selectStorageOrderByCode" parameterType="String" resultMap="WarehouseStorageOrderResult">
<include refid="selectWarehouseStorageOrderVo"/>
where warehouse_storage_code = #{warehouseStorageCode}
</select>
<select id="selectRelateCodeByCode" parameterType="String" resultType="String">
SELECT related_order_code from warehouse_storage_order wso
JOIN purchase_order po ON wso.related_order_code = po.purchase_order_code
where wso.warehouse_storage_code = #{warehouseStorageCode}
</select>
<insert id="insertWarehouseStorageOrder" parameterType="WarehouseStorageOrder" useGeneratedKeys="true" keyProperty="warehouseStorageId">
insert into warehouse_storage_order
<trim prefix="(" suffix=")" suffixOverrides=",">
@ -310,4 +323,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</foreach>
</select>
</mapper>

2
ruoyi-admin/src/main/resources/templates/warehouse/storageOrder/storagePurchase.html

@ -287,7 +287,7 @@
},
{
title: '暂收数',
title: '暂收合格数',
field: 'temporaryQualifiedNum'
},
{

2
ruoyi-admin/src/main/resources/templates/warehouse/storageOrder/storagePurchaseDetail.html

@ -284,7 +284,7 @@
},
{
title: '暂收数',
title: '暂收合格数',
field: 'temporaryQualifiedNum'
},
{

2
ruoyi-admin/src/main/resources/templates/warehouse/storageOrder/storagePurchaseWarehouse.html

@ -284,7 +284,7 @@
},
{
title: '暂收数',
title: '暂收合格数',
field: 'temporaryQualifiedNum'
},
{

2
ruoyi-admin/src/main/resources/templates/warehouse/storageOrder/storagePurchaseWarehouseDetail.html

@ -283,7 +283,7 @@
},
{
title: '暂收数',
title: '暂收合格数',
field: 'temporaryQualifiedNum'
},
{

Loading…
Cancel
Save