feat 批次入库:到货单的入库详细信息

This commit is contained in:
Amjacks 2025-03-31 18:47:23 +08:00
parent f16885f5c6
commit 68bf730af3
6 changed files with 92 additions and 67 deletions

View File

@ -59,7 +59,8 @@ public class DeliveryController {
List<String> nameList = new ArrayList<>();
// 判定是否是到库单
String typeByKey = deliveryService.getByKey(siteName, receiveRequestName).getReceiveRequestType();
if (typeByKey.equals(ReceiveTypeEnums.DK.getCode())) {
boolean isDelivery = typeByKey.equals(ReceiveTypeEnums.DK.getCode());
if (isDelivery) {
// 到库单找出该单据下的所有的采购单
nameList = deliveryService.getReceiveByDelivery(siteName, receiveRequestName)
.stream().map(MaterialReceiveRequest::getReceiveRequestName).collect(Collectors.toList());
@ -68,7 +69,7 @@ public class DeliveryController {
nameList.add(receiveRequestName);
}
// 获取采购单明细及批次
return AjaxResult.me().setSuccess(true).setResultObj(deliveryService.getStoreDetail(siteName, nameList));
return AjaxResult.me().setSuccess(true).setResultObj(deliveryService.getStoreDetail(siteName, nameList, isDelivery));
}
/**

View File

@ -1,9 +1,10 @@
package com.cim.idm.dao;
import com.cim.idm.model.dto.DeliveryRelationDto;
import com.cim.idm.model.po.MaterialReceiveDelivery;
import com.cim.idm.model.po.MaterialReceiveRequest;
import com.cim.idm.model.po.MaterialReceiveRequestDetail;
import com.cim.idm.model.dto.PurchaseDto;
import com.cim.idm.model.vo.DeliveryReceiveDetailVo;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@ -28,13 +29,6 @@ public interface DeliveryDao {
*/
int createRelation(@Param("receiveList") List<DeliveryRelationDto> receiveList);
/**
* 绑定采购订单 到货单
*/
int bindDelivery(@Param("siteName") String siteName,
@Param("receiveRequestName") String receiveRequestName,
@Param("nameList") List<String> nameList);
/**
* 获取采购订单
*/
@ -46,7 +40,8 @@ public interface DeliveryDao {
*/
@MapKey("storeDetail")
List<Map<String, Object>> getStoreDetail(@Param("siteName") String siteName,
@Param("nameList") List<String> nameList);
@Param("nameList") List<String> nameList,
@Param("isDelivery") Boolean isDelivery);
/**
* 获取入库批次
@ -67,10 +62,15 @@ public interface DeliveryDao {
List<MaterialReceiveRequest> getReceiveByDelivery(@Param("siteName") String siteName,
@Param("receiveRequestName") String receiveRequestName);
/**
* 获取到库单关系
*/
List<MaterialReceiveDelivery> getRelation(@Param("deliveryName") String deliveryName);
/**
* 根据到库单获取采购单名称
* @param nameList 到库单
* @return 采购单名称列表
*/
List<MaterialReceiveRequestDetail> getReceiveDetail(@Param("nameList") List<String> nameList);
List<DeliveryReceiveDetailVo> getReceiveDetail(@Param("nameList") List<String> nameList);
}

View File

@ -10,4 +10,6 @@ public class DeliveryRelationDto {
private Integer deliveryNum = 0;
// 采购单名称
private String receiveRequestName;
// 料号
private String materialSpecName;
}

View File

@ -1,13 +1,14 @@
package com.cim.idm.service;
import com.cim.idm.model.dto.DeliveryDto;
import com.cim.idm.model.po.MaterialReceiveDelivery;
import com.cim.idm.model.po.MaterialReceiveRequest;
import com.cim.idm.model.dto.PageDto;
import com.cim.idm.model.po.MaterialReceiveRequestDetail;
import com.cim.idm.model.vo.DeliveryReceiveDetailVo;
import com.cim.idm.model.vo.ReceiveDetailVo;
import com.github.pagehelper.PageInfo;
import java.util.List;
import java.util.Map;
public interface IDeliveryService {
/**
@ -28,9 +29,10 @@ public interface IDeliveryService {
* 获取采购单明细及批次
* @param siteName 组织
* @param nameList 名称
* @param isDelivery 是否到库
* @return 采购订单
*/
Map<String, Object> getStoreDetail(String siteName, List<String> nameList);
ReceiveDetailVo getStoreDetail(String siteName, List<String> nameList, Boolean isDelivery);
/**
* 根据 key 获取值
@ -47,10 +49,15 @@ public interface IDeliveryService {
*/
List<MaterialReceiveRequest> getReceiveByDelivery(String siteName, String receiveRequestName);
/**
* 获取到库单关系
*/
List<MaterialReceiveDelivery> getRelation(String deliveryName);
/**
* 根据到库单获取采购单名称
* @param nameList 到库单
* @return 采购单名称列表
*/
List<MaterialReceiveRequestDetail> getReceiveDetail(List<String> nameList);
List<DeliveryReceiveDetailVo> getReceiveDetail(List<String> nameList);
}

View File

@ -7,20 +7,18 @@ import com.cim.idm.model.dto.PageDto;
import com.cim.idm.model.dto.PurchaseDto;
import com.cim.idm.model.dto.DeliveryDto;
import com.cim.idm.model.dto.DeliveryRelationDto;
import com.cim.idm.model.po.MaterialReceiveDelivery;
import com.cim.idm.model.po.MaterialReceiveRequest;
import com.cim.idm.model.po.MaterialReceiveRequestDetail;
import com.cim.idm.model.vo.DeliveryReceiveDetailVo;
import com.cim.idm.model.vo.ReceiveDetailVo;
import com.cim.idm.service.IDeliveryService;
import com.cim.idm.wmspackage.invoice.management.data.MaterialReceiveRequestKey;
import com.github.pagehelper.PageInfo;
import com.github.pagehelper.page.PageMethod;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.*;
@Service
public class DeliveryServiceImpl implements IDeliveryService {
@ -37,16 +35,18 @@ public class DeliveryServiceImpl implements IDeliveryService {
return "添加到库单失败";
}
// 添加到库单关系
List<DeliveryRelationDto> res = new ArrayList<>();
for (DeliveryRelationDto item : dto.getReceiveList()) {
item.setDeliveryName(dto.getReceiveRequestName());
// 数量大于 0
if (Objects.nonNull(item.getDeliveryNum()) && item.getDeliveryNum() > 0) {
// 到库单号
item.setDeliveryName(dto.getReceiveRequestName());
res.add(item);
}
}
if (deliveryDao.createRelation(dto.getReceiveList()) <= 0) {
if (deliveryDao.createRelation(res) <= 0) {
return "添加到库单关系失败";
}
// 更新采购单到库单字段
List<String> collect = dto.getDataList().stream()
.map(MaterialReceiveRequestKey::getReceiveRequestName).collect(Collectors.toList());
deliveryDao.bindDelivery(dto.getSiteName(), dto.getReceiveRequestName(), collect);
return "更新成功";
}
@ -58,15 +58,15 @@ public class DeliveryServiceImpl implements IDeliveryService {
}
@Override
public Map<String, Object> getStoreDetail(String siteName, List<String> nameList) {
Map<String, Object> res = new HashMap<>();
public ReceiveDetailVo getStoreDetail(String siteName, List<String> nameList, Boolean isDelivery) {
ReceiveDetailVo receiveDetailVo = new ReceiveDetailVo();
// 采购单明细
List<Map<String, Object>> storeDetail = deliveryDao.getStoreDetail(siteName, nameList);
List<Map<String, Object>> storeDetail = deliveryDao.getStoreDetail(siteName, nameList, isDelivery);
receiveDetailVo.setStoreDetail(storeDetail);
// 批次
List<Map<String, Object>> storeCharge = deliveryDao.getStoreCharge(siteName, nameList);
res.put("storeDetail", storeDetail);
res.put("storeCharge", storeCharge);
return res;
receiveDetailVo.setStoreCharge(storeCharge);
return receiveDetailVo;
}
@Override
@ -80,7 +80,12 @@ public class DeliveryServiceImpl implements IDeliveryService {
}
@Override
public List<MaterialReceiveRequestDetail> getReceiveDetail(List<String> nameList) {
public List<MaterialReceiveDelivery> getRelation(String deliveryName) {
return deliveryDao.getRelation(deliveryName);
}
@Override
public List<DeliveryReceiveDetailVo> getReceiveDetail(List<String> nameList) {
return deliveryDao.getReceiveDetail(nameList);
}
}

View File

@ -10,20 +10,11 @@
<insert id="createRelation">
INSERT ALL
<foreach item="item" index="index" collection="receiveList">
INTO MATERIALRECEIVEDELIVERY (RECEIVEREQUESTNAME, DELIVERYNAME, DELIVERYNUM) VALUES (#{item.receiveRequestName}, #{item.deliveryName}, #{item.deliveryNum})
INTO MATERIALRECEIVEDELIVERY (RECEIVEREQUESTNAME, DELIVERYNAME, DELIVERYNUM, MATERIALSPECNAME) VALUES (#{item.receiveRequestName}, #{item.deliveryName}, #{item.deliveryNum}, #{item.materialSpecName})
</foreach>
SELECT * FROM dual
</insert>
<update id="bindDelivery">
UPDATE MATERIALRECEIVEREQUEST SET DELIVERYNAME = #{receiveRequestName}
WHERE SITENAME = #{siteName}
AND RECEIVEREQUESTNAME IN
<foreach item="name" index="index" collection="nameList" open="(" separator="," close=")">
#{name}
</foreach>
</update>
<select id="getPurchase" resultType="com.cim.idm.model.po.MaterialReceiveRequest">
SELECT SITENAME, RECEIVEREQUESTNAME FROM MATERIALRECEIVEREQUEST
WHERE SITENAME = #{dto.siteName}
@ -65,13 +56,31 @@
SUM( m.REQUESTQUANTITY - m.RECEIVEDQUANTITY ) AS RECEIVEDQUANTITY2,
SUM( m.REQUESTQUANTITY - m.RECEIVEDQUANTITY ) AS MINUSQTY
FROM MATERIALRECEIVEREQUESTDETAIL m
WHERE RECEIVEREQUESTNAME in
WHERE m.RECEIVEREQUESTNAME in
<foreach item="name" index="index" collection="nameList" open="(" separator="," close=")">
#{name}
</foreach>
GROUP BY m.MATERIALSPECNAME
)
SELECT distinct MAIN.*, TO_CHAR( SYSDATE, 'YYYY-MM-DD' ) RECEIVETIME, TO_CHAR( SYSDATE, 'YYYY-MM-DD' ) MAKEDATE, '1' RECEIVEREQUESTDETAILNAME, '是' IS_BATCH,
<if test="isDelivery">
,DELIVERY AS (
SELECT sum(md.DELIVERYNUM) DELIVERYNUM, md.MATERIALSPECNAME MATERIALSPECNAME
FROM MATERIALRECEIVEDELIVERY md
WHERE md.RECEIVEREQUESTNAME IN
<foreach item="name" index="index" collection="nameList" open="(" separator="," close=")">
#{name}
</foreach>
GROUP BY md.MATERIALSPECNAME
)
</if>
SELECT distinct MAIN.RECEIVEDQUANTITY, MAIN.MINUSQTY,
<if test="isDelivery">
DELIVERY.DELIVERYNUM REQUESTQUANTITY,
</if>
<if test="!isDelivery">
MAIN.REQUESTQUANTITY REQUESTQUANTITY,
</if>
TO_CHAR( SYSDATE, 'YYYY-MM-DD' ) RECEIVETIME, TO_CHAR( SYSDATE, 'YYYY-MM-DD' ) MAKEDATE, '1' RECEIVEREQUESTDETAILNAME, '是' IS_BATCH,
m.MATERIALSPECNAME, m.SITENAME, m.ERPLOCATION, m.LOCATIONNAME, m.MATERIALUNIT, m.SDK_ID,
m.REMARK REMARK, m.SALESMAN SALESPERSON, m.SALESASSISTANT CAREER_ASSISTANCE, m.BUSINESSDIVISION BUSINESS_UNIT,
m2.STOCKORGNO AS ERPFACTORY, m2.SUPPLIERNO,
@ -96,6 +105,9 @@
AND BB.MATERIALSPECNAME = m.MATERIALSPECNAME
AND BB.SDK_ID = m.SDK_ID
AND BB.PHASE = m3.PHASE
<if test="isDelivery">
INNER JOIN DELIVERY ON DELIVERY.MATERIALSPECNAME = m.MATERIALSPECNAME
</if>
WHERE ( m2.RETURNFLAG IS NULL OR m2.RETURNFLAG != 'Y' )
AND m.RECEIVEREQUESTNAME in
<foreach item="name" index="index" collection="nameList" open="(" separator="," close=")">
@ -135,34 +147,32 @@
OEMSITENAME, OEMSITEINCHARGE, SYSTEMTYPE, LASTEVENTNAME, LASTEVENTTIMEKEY, LASTEVENTTIME, LASTEVENTUSER,
LASTEVENTCOMMENT, ERPPONAME, SAVEREASON, RESPPERSON, RESPDEPART, SOLVETIME, PASSSTATE, WORKER, SDK_ID,
ERPID, REMARK, PURCHASER, PURORGNO, ORDERDATE, CLOSERUSER, CLOSEDATE, STOCKORGNO, RETURNFLAG,
RECEIVEREQUESTDETAILTYPE, ERPLOCATION, PRODUCTDEPTNO, SOURCEBILLID, EFFECTIVESTARTTIME, EFFECTIVEENDTIME,
DELIVERYNAME
RECEIVEREQUESTDETAILTYPE, ERPLOCATION, PRODUCTDEPTNO, SOURCEBILLID, EFFECTIVESTARTTIME, EFFECTIVEENDTIME
FROM MATERIALRECEIVEREQUEST
WHERE SITENAME = #{siteName}
AND RECEIVEREQUESTNAME = #{receiveRequestName}
</select>
<select id="getReceiveByDelivery" resultType="com.cim.idm.model.po.MaterialReceiveRequest">
SELECT SITENAME, RECEIVEREQUESTNAME, RECEIVEREQUESTTYPE, PURCHASEORDERGROUP, RECEIVEREQUESTSTATE, SUPPLIERNO,
OEMSITENAME, OEMSITEINCHARGE, SYSTEMTYPE, LASTEVENTNAME, LASTEVENTTIMEKEY, LASTEVENTTIME, LASTEVENTUSER,
LASTEVENTCOMMENT, ERPPONAME, SAVEREASON, RESPPERSON, RESPDEPART, SOLVETIME, PASSSTATE, WORKER, SDK_ID,
ERPID, REMARK, PURCHASER, PURORGNO, ORDERDATE, CLOSERUSER, CLOSEDATE, STOCKORGNO, RETURNFLAG,
RECEIVEREQUESTDETAILTYPE, ERPLOCATION, PRODUCTDEPTNO, SOURCEBILLID, EFFECTIVESTARTTIME, EFFECTIVEENDTIME,
DELIVERYNAME
FROM MATERIALRECEIVEREQUEST
WHERE SITENAME = #{siteName}
AND DELIVERYNAME = #{receiveRequestName}
SELECT m.SITENAME, m.RECEIVEREQUESTNAME, m.RECEIVEREQUESTTYPE, m.PURCHASEORDERGROUP, m.RECEIVEREQUESTSTATE, m.SUPPLIERNO,
m.OEMSITENAME, m.OEMSITEINCHARGE, m.SYSTEMTYPE, m.LASTEVENTNAME, m.LASTEVENTTIMEKEY, m.LASTEVENTTIME, m.LASTEVENTUSER,
m.LASTEVENTCOMMENT, m.ERPPONAME, m.SAVEREASON, m.RESPPERSON, m.RESPDEPART, m.SOLVETIME, m.PASSSTATE, m.WORKER, m.SDK_ID,
m.ERPID, m.REMARK, m.PURCHASER, m.PURORGNO, m.ORDERDATE, m.CLOSERUSER, m.CLOSEDATE, m.STOCKORGNO, m.RETURNFLAG,
m.RECEIVEREQUESTDETAILTYPE, m.ERPLOCATION, m.PRODUCTDEPTNO, m.SOURCEBILLID, m.EFFECTIVESTARTTIME, m.EFFECTIVEENDTIME
FROM MATERIALRECEIVEREQUEST m, MATERIALRECEIVEDELIVERY md
WHERE md.DELIVERYNAME = #{receiveRequestName}
AND m.SITENAME = #{siteName}
AND m.RECEIVEREQUESTNAME = md.RECEIVEREQUESTNAME
</select>
<select id="getReceiveDetail" resultType="com.cim.idm.model.po.MaterialReceiveRequestDetail">
SELECT SITENAME, RECEIVEREQUESTNAME, RECEIVEREQUESTDETAILNAME, POCATEGORY, RECEIVEREQUESTDETAILTYPE,
MATERIALSPECNAME, DESCRIPTION, REQUESTQUANTITY, RECEIVEDQUANTITY, ERPLOCATION, RETURNFLAG, FREEFLAG,
RECEIVEREQUESTDETAILSTATE, HOLDSTATE, IQCFLAG, PLANDATE, CREATEUSER, CREATETIME, CHARGE, ERPFACTORY,
LASTEVENTNAME, LASTEVENTTIMEKEY, LASTEVENTTIME, LASTEVENTUSER, LASTEVENTCOMMENT, SDK_ID, MATERIALUNIT,
STATE, PHASE, ERPDETAILID, SOURCELINEID, APPLICANT, INNERORDER, ERPPONAME, INNERFLAG, SUPPLIERCHARGE,
FORCECOMPLETEDFLAG, ERPPODETAILNAME, TRANFERTYPE, PRTBARCODEQTY, LOCATIONNAME, DELETEDETAILFLAG,
PRODUCTORDER, PLANORDER, REMARK, SALESMAN, SALESASSISTANT, BUSINESSDIVISION, FINISHFLAG, COSTCENTER,
ORDERCHANGEDATE, WMSRETURNCHARGENO, PURCHASEREQUESTNOTE, PURCHASEREQUESTNO, PURCHASEREQUESTDETAILNO
<select id="getRelation" resultType="com.cim.idm.model.po.MaterialReceiveDelivery">
SELECT md.DELIVERYNAME, md.DELIVERYNUM, md.RECEIVEREQUESTNAME, md.MATERIALSPECNAME
FROM MATERIALRECEIVEDELIVERY md
WHERE md.DELIVERYNAME = #{deliveryName}
</select>
<select id="getReceiveDetail" resultType="com.cim.idm.model.vo.DeliveryReceiveDetailVo">
SELECT receiveRequestName, materialSpecName, requestQuantity, requestQuantity as deliveryNum
FROM MATERIALRECEIVEREQUESTDETAIL
WHERE RECEIVEREQUESTNAME in
<foreach item="name" index="index" collection="nameList" open="(" separator="," close=")">