feat 辅材入库区分到货单

This commit is contained in:
Amjacks 2025-04-14 11:42:23 +08:00
parent c52375a538
commit 4d8f947344
8 changed files with 132 additions and 93 deletions

View File

@ -5,8 +5,13 @@ import com.cim.idm.framework.IDMFrameServiceProxy;
import com.cim.idm.framework.data.EventInfo; import com.cim.idm.framework.data.EventInfo;
import com.cim.idm.framework.exception.IDMFrameDBErrorSignal; import com.cim.idm.framework.exception.IDMFrameDBErrorSignal;
import com.cim.idm.framework.util.time.TimeStampUtil; import com.cim.idm.framework.util.time.TimeStampUtil;
import com.cim.idm.model.dto.delivery.StoreDetailDto;
import com.cim.idm.model.po.MaterialReceiveRequest;
import com.cim.idm.model.po.delivery.MaterialDelivery;
import com.cim.idm.model.vo.DeliveryReceiveDetailVo;
import com.cim.idm.mwmsextend.materialpacking.service.MaterialPackingServiceImpl; import com.cim.idm.mwmsextend.materialpacking.service.MaterialPackingServiceImpl;
import com.cim.idm.mwmsextend.materialreceiverequest.service.MaterialReceiveRequestServiceImpl; import com.cim.idm.mwmsextend.materialreceiverequest.service.MaterialReceiveRequestServiceImpl;
import com.cim.idm.service.IDeliveryService;
import com.cim.idm.service.Impl.NCWServiceImpl; import com.cim.idm.service.Impl.NCWServiceImpl;
import com.cim.idm.service.Impl.SDKMaterialPackingServiceImpl; import com.cim.idm.service.Impl.SDKMaterialPackingServiceImpl;
import com.cim.idm.utils.AjaxResult; import com.cim.idm.utils.AjaxResult;
@ -44,6 +49,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.text.ParseException; import java.text.ParseException;
@ -56,6 +62,9 @@ import java.util.*;
@EnableAutoConfiguration @EnableAutoConfiguration
public class NoChargeStockIn { public class NoChargeStockIn {
@Resource
private IDeliveryService deliveryService;
private static Log log = LogFactory.getLog(MaterialReceiveRequestServiceImpl.class); private static Log log = LogFactory.getLog(MaterialReceiveRequestServiceImpl.class);
SDKMaterialPackingServiceImpl SDKMP=new SDKMaterialPackingServiceImpl(); SDKMaterialPackingServiceImpl SDKMP=new SDKMaterialPackingServiceImpl();
@ -65,14 +74,14 @@ public class NoChargeStockIn {
@Transactional @Transactional
@RequestMapping(value = "/NoChargeStockIn", method = RequestMethod.POST) @RequestMapping(value = "/NoChargeStockIn", method = RequestMethod.POST)
public AjaxResult NoChargeStockIn(@RequestBody JSONObject in ) throws CustomException { public AjaxResult NoChargeStockIn(@RequestBody JSONObject in ) throws Exception {
// 将字符串转换为JSONArray对象 // 将字符串转换为JSONArray对象
String ERPFACTORY=""; String ERPFACTORY="";
String ERPLOCATION=""; String ERPLOCATION="";
String LOCATIONNAME=""; String LOCATIONNAME="";
String RECEIVEREQUESTNAME=""; // String RECEIVEREQUESTNAME="";
String RECEIVEREQUESTDETAILNAME=""; // String RECEIVEREQUESTDETAILNAME="";
String MATERIALSPECNAME=""; String MATERIALSPECNAME="";
String MATERIALUNITDESC=""; String MATERIALUNITDESC="";
String MATERIALUNIT=""; String MATERIALUNIT="";
@ -86,6 +95,12 @@ public class NoChargeStockIn {
String sdkid=""; String sdkid="";
String commitDate = ""; String commitDate = "";
String opCode = ""; String opCode = "";
// 判定是否是到货单
StoreDetailDto storeDetailDto = new StoreDetailDto();
storeDetailDto.setSiteName((String)in.get("SITENAME"));
storeDetailDto.setDocumentName((String)in.get("RECEIVEREQUESTNAME"));
MaterialDelivery byKey = deliveryService.getByKey(storeDetailDto);
Boolean isDelivery = Objects.nonNull(byKey);
//1首先生成入库单 //1首先生成入库单
//获取抬头文本 //获取抬头文本
try { try {
@ -173,8 +188,6 @@ public class NoChargeStockIn {
ERPFACTORY=(String) NoPoList.get("ERPFACTORY"); ERPFACTORY=(String) NoPoList.get("ERPFACTORY");
ERPLOCATION=(String) NoPoList.get("ERPLOCATION"); ERPLOCATION=(String) NoPoList.get("ERPLOCATION");
LOCATIONNAME= (NoPoList.get("LOCATIONNAME") == null || "null".equals(NoPoList.get("LOCATIONNAME").toString())) ? "" : NoPoList.get("LOCATIONNAME").toString(); LOCATIONNAME= (NoPoList.get("LOCATIONNAME") == null || "null".equals(NoPoList.get("LOCATIONNAME").toString())) ? "" : NoPoList.get("LOCATIONNAME").toString();
RECEIVEREQUESTNAME=(String) NoPoList.get("RECEIVEREQUESTNAME");
RECEIVEREQUESTDETAILNAME=(String) NoPoList.get("RECEIVEREQUESTDETAILNAME");
MATERIALSPECNAME=(String) NoPoList.get("MATERIALSPECNAME"); MATERIALSPECNAME=(String) NoPoList.get("MATERIALSPECNAME");
MATERIALUNITDESC=(String) NoPoList.get("MATERIALUNITDESC"); MATERIALUNITDESC=(String) NoPoList.get("MATERIALUNITDESC");
MATERIALUNIT=(String) NoPoList.get("MATERIALUNIT"); MATERIALUNIT=(String) NoPoList.get("MATERIALUNIT");
@ -189,102 +202,70 @@ public class NoChargeStockIn {
sdkid=(String) NoPoList.get("SDK_ID"); sdkid=(String) NoPoList.get("SDK_ID");
if(ThisAcceptNumber!=""&&ThisAcceptNumber!=null&&ThisAcceptNumber!="0") if(ThisAcceptNumber!=""&&ThisAcceptNumber!=null&&ThisAcceptNumber!="0")
{ {
//2获取EventInfo // 获取单据详情
makeEventInfo = new EventInfoUtil().makeEventInfo("NoChargeStockIn", user, "NoChargeStockIn", "", ""); List<DeliveryReceiveDetailVo> receiveByMaterialSpec = deliveryService.getReceiveByMaterialSpec(storeDetailDto.getDocumentName(), MATERIALSPECNAME, isDelivery);
//4写入入库单明细 if (!receiveByMaterialSpec.isEmpty()) {
try { for (DeliveryReceiveDetailVo vo : receiveByMaterialSpec) {
CreateMaterialReceiveRequestAct(makeEventInfo,"SDK",RECEIVEREQUESTNAME,RECEIVEREQUESTDETAILNAME,MAKEDATE,receiveAct,"NoPO",ThisAcceptNumber,MATERIALSPECNAME); //2获取EventInfo
} catch (CustomException | ParseException e) { makeEventInfo = new EventInfoUtil().makeEventInfo("NoChargeStockIn", user, "NoChargeStockIn", "", "");
// TODO Auto-generated catch block //4写入入库单明细
e.printStackTrace(); try {
} CreateMaterialReceiveRequestAct(makeEventInfo,"SDK",vo.getReceiveRequestName(),vo.getReceiveRequestDetailName(),MAKEDATE,receiveAct,"NoPO",ThisAcceptNumber,MATERIALSPECNAME);
//5查询物料是否启用批次 } catch (CustomException | ParseException e) {
String sql="SELECT CASE WHEN m.IS_BATCH = 'Y' THEN '是' WHEN m.IS_BATCH = '是' THEN '是' ELSE '否' END AS REPLACED_VALUE ,DECODE(m.IQCFLAG,'Y','是','否') IQCFLAG FROM MATERIALSPEC m WHERE m.MATERIALSPECNAME =:MATERIALSPECNAME"; e.printStackTrace();
Map<String, Object> bindMap = new HashMap<String, Object>(); }
bindMap.put("MATERIALSPECNAME", MATERIALSPECNAME); //5查询物料是否启用批次
List<Map<String, Object>> list = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, bindMap); String sql="SELECT CASE WHEN m.IS_BATCH = 'Y' THEN '是' WHEN m.IS_BATCH = '是' THEN '是' ELSE '否' END AS REPLACED_VALUE ,DECODE(m.IQCFLAG,'Y','是','否') IQCFLAG FROM MATERIALSPEC m WHERE m.MATERIALSPECNAME =:MATERIALSPECNAME";
String IsBatch=(String) list.get(0).get("REPLACED_VALUE"); Map<String, Object> bindMap = new HashMap<String, Object>();
String IQCFLAG=(String) list.get(0).get("IQCFLAG"); bindMap.put("MATERIALSPECNAME", MATERIALSPECNAME);
//6创建标签 List<Map<String, Object>> list = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, bindMap);
try { String IsBatch=(String) list.get(0).get("REPLACED_VALUE");
String lastEventTimeKey= Packing( makeEventInfo, "SDK","", ThisAcceptNumber, "1",ThisAcceptNumber, "N",RECEIVEREQUESTNAME,RECEIVEREQUESTDETAILNAME,MATERIALSPECNAME,receiveAct, MAKEDATE, "","", "","", ERPLOCATION, ERPFACTORY,"", "", "","","",LOCATIONNAME,"","",MATERIALUNIT,IsBatch,IQCFLAG,sdkid); String IQCFLAG=(String) list.get(0).get("IQCFLAG");
} catch (Exception e) { //6创建标签
// TODO Auto-generated catch block try {
e.printStackTrace(); Packing( makeEventInfo, "SDK","", ThisAcceptNumber, "1",ThisAcceptNumber, "N",vo.getReceiveRequestName(),vo.getReceiveRequestDetailName(),MATERIALSPECNAME,receiveAct, MAKEDATE, "","", "","", ERPLOCATION, ERPFACTORY,"", "", "","","",LOCATIONNAME,"","",MATERIALUNIT,IsBatch,IQCFLAG,sdkid);
} catch (Exception e) {
e.printStackTrace();
}
}
} }
} }
} }
//7过账 //7过账
String billcode = null; // 采购单
try { List<MaterialReceiveRequest> requests = new ArrayList<>();
// billcode = ncServer.PurStockIn(RECEIVEREQUESTNAME,"SDK",user,receiveAct); if (isDelivery) {
//判断单据类型调用不同的NC接口 // 到货单据
String sql = "SELECT m.RECEIVEREQUESTTYPE FROM MATERIALRECEIVEREQUEST m WHERE m.RECEIVEREQUESTNAME = :RECEIVEREQUESTNAME"; requests = deliveryService.getReceiveByDelivery(storeDetailDto);
Map<String, Object> hashMap = new HashMap<String,Object> (); } else {
hashMap.put("RECEIVEREQUESTNAME", RECEIVEREQUESTNAME); requests.add(deliveryService.getReceiveByKey(storeDetailDto));
List<Map<String, Object>> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, hashMap); }
if (queryForList != null && queryForList.size() > 0) { for (MaterialReceiveRequest request : requests) {
String type = queryForList.get(0).get("RECEIVEREQUESTTYPE").toString(); String billcode = null;
switch (type) { switch (request.getReceiveRequestType()) {
case "ZK4A" : //其他入库 case "ZK4A" : //其他入库
billcode = ncServer.qtrNoInvoice(RECEIVEREQUESTNAME, "SDK", receiveAct,user,commitDate,opCode); billcode = ncServer.qtrNoInvoice(request.getReceiveRequestName(), "SDK", receiveAct,user,commitDate,opCode);
break; break;
case "45" : //采购入库 case "45" : //采购入库
billcode = ncServer.PurStockIn(RECEIVEREQUESTNAME, "SDK",user,receiveAct,commitDate,opCode); billcode = ncServer.PurStockIn(request.getReceiveRequestName(), "SDK",user,receiveAct,commitDate,opCode);
break; break;
default : default :
break; break;
}
} else {
throw new CustomException("找不到单据" + RECEIVEREQUESTNAME);
} }
} catch (Exception e) { if (billcode == null || "".equals(billcode)) {
// TODO Auto-generated catch block return AjaxResult.me().setErrorCode(500).setSuccess(false).setMessage("NC过账失败");
e.printStackTrace(); }
//8更新物料凭证
SDKMP.updateUndoID(receiveAct,makeEventInfo,billcode);
//9接收ERP返回消息更新WMS凭证
// SDKMP.SaveUnDoInfo(receiveAct,billcode);
SDKMP.SaveUnDoInfo(billcode,commitDate);//传值错误导致凭证信息未存储已修改zd.2024.9.24
//10更新库存状态
SDKMP.updateStockState(receiveAct,makeEventInfo,billcode);
} }
if (billcode == null || "".equals(billcode)) {
return AjaxResult.me().setErrorCode(500).setSuccess(false).setMessage("NC过账失败");
}
//8更新物料凭证
SDKMP.updateUndoID(receiveAct,makeEventInfo,billcode);
//9接收ERP返回消息更新WMS凭证
// SDKMP.SaveUnDoInfo(receiveAct,billcode);
SDKMP.SaveUnDoInfo(billcode,commitDate);//传值错误导致凭证信息未存储已修改zd.2024.9.24
//10更新库存状态
SDKMP.updateStockState(receiveAct,makeEventInfo,billcode);
return AjaxResult.me().setMessage("入库成功"); return AjaxResult.me().setMessage("入库成功");
} }
public static EventInfo makeEventInfo( String eventName, String eventUser, String eventComment,
String reasonCodeType, String reasonCode )
{
EventInfo eventInfo = new EventInfo();
eventInfo.setBehaviorName( "" );
eventInfo.setEventName( eventName );
eventInfo.setEventUser( eventUser );
if ( eventComment == null )
eventComment = "";
eventInfo.setEventComment( eventComment );
// Do Not Check TimeKey Validation
eventInfo.setCheckTimekeyValidation(false);
if ( reasonCodeType == null )
reasonCodeType = "";
eventInfo.setReasonCodeType( reasonCodeType );
if ( reasonCode == null )
reasonCode = "";
eventInfo.setReasonCode( reasonCode );
return eventInfo;
}
/* /*
* Name : GenerateMaterialReceiveRequestName Desc : This function is * Name : GenerateMaterialReceiveRequestName Desc : This function is
* GenerateMaterialReceiveRequestName Author : boe cim dev. Date : * GenerateMaterialReceiveRequestName Author : boe cim dev. Date :
@ -360,7 +341,6 @@ public class NoChargeStockIn {
* Name : CreateMaterialReceiveRequestAct Desc : * Name : CreateMaterialReceiveRequestAct Desc :
* CreateMaterialReceiveRequestAct Author : boe cim dev. Date : 2016.02.17 * CreateMaterialReceiveRequestAct Author : boe cim dev. Date : 2016.02.17
*/ */
public void CreateMaterialReceiveRequestAct(EventInfo eventInfo, public void CreateMaterialReceiveRequestAct(EventInfo eventInfo,
String siteName, String receiveRequestName, String siteName, String receiveRequestName,
String ReceiveRequestDetailName, String makeDate, String ReceiveRequestDetailName, String makeDate,

View File

@ -84,6 +84,24 @@ public interface DeliveryDao {
*/ */
List<MaterialReceiveRequest> getReceiveByDelivery(@Param("dto") StoreDetailDto storeDetailDto); List<MaterialReceiveRequest> getReceiveByDelivery(@Param("dto") StoreDetailDto storeDetailDto);
/**
* 根据单号和物料获取单据详情
* @param documentName 单据
* @param materialSpec 物料
* @return 单据详情
*/
List<DeliveryReceiveDetailVo> getReceiveByMaterialSpec(@Param("documentName") String documentName,
@Param("materialSpec") String materialSpec);
/**
* 根据单号和物料获取到货单单据详情
* @param documentName 单据
* @param materialSpec 物料
* @return 单据详情
*/
List<DeliveryReceiveDetailVo> getDeliveryByMaterialSpec(@Param("documentName") String documentName,
@Param("materialSpec") String materialSpec);
/** /**
* 根据到库单获取采购单名称 * 根据到库单获取采购单名称
* @param nameList 到库单 * @param nameList 到库单

View File

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

View File

@ -11,6 +11,8 @@ public class MaterialDeliveryReceive {
private String deliveryNum; private String deliveryNum;
// 采购单号 // 采购单号
private String receiveRequestName; private String receiveRequestName;
// 采购单明细号
private String receiveRequestDetailName;
// 料号 // 料号
private String materialSpecName; private String materialSpecName;
} }

View File

@ -6,6 +6,7 @@ import lombok.Data;
public class DeliveryReceiveDetailVo { public class DeliveryReceiveDetailVo {
private String receiveRequestName; private String receiveRequestName;
private String receiveRequestDetailName;
private String materialSpecName; private String materialSpecName;
private double requestQuantity; private double requestQuantity;
private double deliveryNum; private double deliveryNum;

View File

@ -79,6 +79,16 @@ public interface IDeliveryService {
*/ */
List<MaterialReceiveRequest> getReceiveByDelivery(StoreDetailDto storeDetailDto); List<MaterialReceiveRequest> getReceiveByDelivery(StoreDetailDto storeDetailDto);
/**
* 根据单号和物料获取单据详情
* @param documentName 单据
* @param materialSpec 物料
* @param isDelivery 是否到库
* @return 单据详情
*/
List<DeliveryReceiveDetailVo> getReceiveByMaterialSpec(String documentName, String materialSpec, Boolean isDelivery);
/** /**
* 根据到库单获取采购单名称 * 根据到库单获取采购单名称
* @param nameList 到库单 * @param nameList 到库单

View File

@ -103,6 +103,18 @@ public class DeliveryServiceImpl implements IDeliveryService {
return deliveryDao.getReceiveByDelivery(storeDetailDto); return deliveryDao.getReceiveByDelivery(storeDetailDto);
} }
@Override
public List<DeliveryReceiveDetailVo> getReceiveByMaterialSpec(String documentName, String materialSpec, Boolean isDelivery) {
List<DeliveryReceiveDetailVo> voList;
if (Boolean.TRUE.equals(isDelivery)) {
// 到货单
voList = deliveryDao.getDeliveryByMaterialSpec(documentName, materialSpec);
} else {
voList = deliveryDao.getReceiveByMaterialSpec(documentName, materialSpec);
}
return voList;
}
@Override @Override
public List<DeliveryReceiveDetailVo> getReceiveDetail(List<String> nameList) { public List<DeliveryReceiveDetailVo> getReceiveDetail(List<String> nameList) {
return deliveryDao.getReceiveDetail(nameList); return deliveryDao.getReceiveDetail(nameList);

View File

@ -10,7 +10,7 @@
<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 MATERIALDELIVERYRECEIVE (RECEIVEREQUESTNAME, DELIVERYNAME, DELIVERYNUM, MATERIALSPECNAME) VALUES (#{item.receiveRequestName}, #{item.deliveryName}, #{item.deliveryNum}, #{item.materialSpecName}) INTO MATERIALDELIVERYRECEIVE (RECEIVEREQUESTNAME, DELIVERYNAME, DELIVERYNUM, MATERIALSPECNAME, RECEIVEREQUESTDETAILNAME) VALUES (#{item.receiveRequestName}, #{item.deliveryName}, #{item.deliveryNum}, #{item.materialSpecName}, #{item.receiveRequestDetailName})
</foreach> </foreach>
SELECT * FROM dual SELECT * FROM dual
</insert> </insert>
@ -279,7 +279,7 @@
</select> </select>
<select id="getRelByDelivery" resultType="com.cim.idm.model.po.delivery.MaterialDeliveryReceive"> <select id="getRelByDelivery" resultType="com.cim.idm.model.po.delivery.MaterialDeliveryReceive">
SELECT md.DELIVERYNAME, md.DELIVERYNUM, md.RECEIVEREQUESTNAME, md.MATERIALSPECNAME SELECT md.DELIVERYNAME, md.DELIVERYNUM, md.RECEIVEREQUESTNAME, md.MATERIALSPECNAME md.RECEIVEREQUESTDETAILNAME
FROM MATERIALDELIVERYRECEIVE md FROM MATERIALDELIVERYRECEIVE md
WHERE md.DELIVERYNAME = #{dto.documentName} WHERE md.DELIVERYNAME = #{dto.documentName}
</select> </select>
@ -296,14 +296,28 @@
AND m.RECEIVEREQUESTNAME = md.RECEIVEREQUESTNAME AND m.RECEIVEREQUESTNAME = md.RECEIVEREQUESTNAME
</select> </select>
<select id="getReceiveByMaterialSpec" resultType="com.cim.idm.model.vo.DeliveryReceiveDetailVo">
SELECT receiveRequestName, receiveRequestDetailName
FROM MATERIALRECEIVEREQUESTDETAIL
WHERE RECEIVEREQUESTNAME = #{documentName}
AND MATERIALSPECNAME = #{materialSpec}
</select>
<select id="getDeliveryByMaterialSpec" resultType="com.cim.idm.model.vo.DeliveryReceiveDetailVo">
SELECT receiveRequestName, receiveRequestDetailName
FROM MATERIALDELIVERYRECEIVE
WHERE DELIVERYNAME = #{documentName}
AND MATERIALSPECNAME = #{materialSpec}
</select>
<select id="getReceiveDetail" resultType="com.cim.idm.model.vo.DeliveryReceiveDetailVo"> <select id="getReceiveDetail" resultType="com.cim.idm.model.vo.DeliveryReceiveDetailVo">
SELECT receiveRequestName, materialSpecName, requestQuantity, requestQuantity as deliveryNum SELECT receiveRequestName, materialSpecName, requestQuantity, requestQuantity as deliveryNum, RECEIVEREQUESTDETAILNAME
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=")">
#{name} #{name}
</foreach> </foreach>
order by RECEIVEREQUESTNAME order by RECEIVEREQUESTDETAILNAME
</select> </select>
<select id="getDeliveryList" resultType="com.cim.idm.model.po.delivery.MaterialDelivery"> <select id="getDeliveryList" resultType="com.cim.idm.model.po.delivery.MaterialDelivery">