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<>(); List<String> nameList = new ArrayList<>();
// 判定是否是到库单 // 判定是否是到库单
String typeByKey = deliveryService.getByKey(siteName, receiveRequestName).getReceiveRequestType(); 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) nameList = deliveryService.getReceiveByDelivery(siteName, receiveRequestName)
.stream().map(MaterialReceiveRequest::getReceiveRequestName).collect(Collectors.toList()); .stream().map(MaterialReceiveRequest::getReceiveRequestName).collect(Collectors.toList());
@ -68,7 +69,7 @@ public class DeliveryController {
nameList.add(receiveRequestName); 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; package com.cim.idm.dao;
import com.cim.idm.model.dto.DeliveryRelationDto; 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.MaterialReceiveRequest;
import com.cim.idm.model.po.MaterialReceiveRequestDetail;
import com.cim.idm.model.dto.PurchaseDto; 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.MapKey;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
@ -28,13 +29,6 @@ public interface DeliveryDao {
*/ */
int createRelation(@Param("receiveList") List<DeliveryRelationDto> receiveList); 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") @MapKey("storeDetail")
List<Map<String, Object>> getStoreDetail(@Param("siteName") String siteName, 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, List<MaterialReceiveRequest> getReceiveByDelivery(@Param("siteName") String siteName,
@Param("receiveRequestName") String receiveRequestName); @Param("receiveRequestName") String receiveRequestName);
/**
* 获取到库单关系
*/
List<MaterialReceiveDelivery> getRelation(@Param("deliveryName") String deliveryName);
/** /**
* 根据到库单获取采购单名称 * 根据到库单获取采购单名称
* @param nameList 到库单 * @param nameList 到库单
* @return 采购单名称列表 * @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 Integer deliveryNum = 0;
// 采购单名称 // 采购单名称
private String receiveRequestName; private String receiveRequestName;
// 料号
private String materialSpecName;
} }

View File

@ -1,13 +1,14 @@
package com.cim.idm.service; package com.cim.idm.service;
import com.cim.idm.model.dto.DeliveryDto; 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.po.MaterialReceiveRequest;
import com.cim.idm.model.dto.PageDto; 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 com.github.pagehelper.PageInfo;
import java.util.List; import java.util.List;
import java.util.Map;
public interface IDeliveryService { public interface IDeliveryService {
/** /**
@ -28,9 +29,10 @@ public interface IDeliveryService {
* 获取采购单明细及批次 * 获取采购单明细及批次
* @param siteName 组织 * @param siteName 组织
* @param nameList 名称 * @param nameList 名称
* @param isDelivery 是否到库
* @return 采购订单 * @return 采购订单
*/ */
Map<String, Object> getStoreDetail(String siteName, List<String> nameList); ReceiveDetailVo getStoreDetail(String siteName, List<String> nameList, Boolean isDelivery);
/** /**
* 根据 key 获取值 * 根据 key 获取值
@ -47,10 +49,15 @@ public interface IDeliveryService {
*/ */
List<MaterialReceiveRequest> getReceiveByDelivery(String siteName, String receiveRequestName); List<MaterialReceiveRequest> getReceiveByDelivery(String siteName, String receiveRequestName);
/**
* 获取到库单关系
*/
List<MaterialReceiveDelivery> getRelation(String deliveryName);
/** /**
* 根据到库单获取采购单名称 * 根据到库单获取采购单名称
* @param nameList 到库单 * @param nameList 到库单
* @return 采购单名称列表 * @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.PurchaseDto;
import com.cim.idm.model.dto.DeliveryDto; import com.cim.idm.model.dto.DeliveryDto;
import com.cim.idm.model.dto.DeliveryRelationDto; 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.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.service.IDeliveryService;
import com.cim.idm.wmspackage.invoice.management.data.MaterialReceiveRequestKey;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.github.pagehelper.page.PageMethod; import com.github.pagehelper.page.PageMethod;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.HashMap; import java.util.*;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Service @Service
public class DeliveryServiceImpl implements IDeliveryService { public class DeliveryServiceImpl implements IDeliveryService {
@ -37,16 +35,18 @@ public class DeliveryServiceImpl implements IDeliveryService {
return "添加到库单失败"; return "添加到库单失败";
} }
// 添加到库单关系 // 添加到库单关系
List<DeliveryRelationDto> res = new ArrayList<>();
for (DeliveryRelationDto item : dto.getReceiveList()) { for (DeliveryRelationDto item : dto.getReceiveList()) {
// 数量大于 0
if (Objects.nonNull(item.getDeliveryNum()) && item.getDeliveryNum() > 0) {
// 到库单号
item.setDeliveryName(dto.getReceiveRequestName()); item.setDeliveryName(dto.getReceiveRequestName());
res.add(item);
} }
if (deliveryDao.createRelation(dto.getReceiveList()) <= 0) { }
if (deliveryDao.createRelation(res) <= 0) {
return "添加到库单关系失败"; return "添加到库单关系失败";
} }
// 更新采购单到库单字段
List<String> collect = dto.getDataList().stream()
.map(MaterialReceiveRequestKey::getReceiveRequestName).collect(Collectors.toList());
deliveryDao.bindDelivery(dto.getSiteName(), dto.getReceiveRequestName(), collect);
return "更新成功"; return "更新成功";
} }
@ -58,15 +58,15 @@ public class DeliveryServiceImpl implements IDeliveryService {
} }
@Override @Override
public Map<String, Object> getStoreDetail(String siteName, List<String> nameList) { public ReceiveDetailVo getStoreDetail(String siteName, List<String> nameList, Boolean isDelivery) {
Map<String, Object> res = new HashMap<>(); 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); List<Map<String, Object>> storeCharge = deliveryDao.getStoreCharge(siteName, nameList);
res.put("storeDetail", storeDetail); receiveDetailVo.setStoreCharge(storeCharge);
res.put("storeCharge", storeCharge); return receiveDetailVo;
return res;
} }
@Override @Override
@ -80,7 +80,12 @@ public class DeliveryServiceImpl implements IDeliveryService {
} }
@Override @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); return deliveryDao.getReceiveDetail(nameList);
} }
} }

View File

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