fix 到货单删除批次&入库

This commit is contained in:
Amjacks 2025-04-11 11:13:08 +08:00
parent a6caafc3dc
commit 918ebdfb53
11 changed files with 229 additions and 87 deletions

View File

@ -71,7 +71,7 @@ public class DeliveryController {
if (Objects.nonNull(byKey)) {
deliveryName = byKey.getDeliveryName();
// 到库单找出该单据下的所有的采购单
nameList = deliveryService.getReceiveByDelivery(storeDetailDto)
nameList = deliveryService.getRelByDelivery(storeDetailDto)
.stream().map(MaterialDeliveryReceive::getReceiveRequestName).collect(Collectors.toList());
} else {
// 采购单

View File

@ -4,11 +4,15 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.cim.idm.framework.IDMFrameServiceProxy;
import com.cim.idm.framework.data.EventInfo;
import com.cim.idm.model.dto.delivery.StoreDetailDto;
import com.cim.idm.model.dto.packing.MaterialPackingListDto;
import com.cim.idm.model.po.MaterialReceiveRequest;
import com.cim.idm.model.MaterialreceiveActDto;
import com.cim.idm.model.dto.TrackOutBoDto;
import com.cim.idm.model.po.delivery.MaterialDelivery;
import com.cim.idm.mwmsextend.materialpacking.service.MaterialPackingServiceImpl;
import com.cim.idm.service.IDeliveryService;
import com.cim.idm.service.IMaterialPackingService;
import com.cim.idm.service.impl.QMSServiceImpl;
import com.cim.idm.service.impl.ToSAPServiceImpl;
import com.cim.idm.utils.AjaxResult;
@ -17,7 +21,6 @@ import com.cim.idm.wmsextend.generic.errorHandler.CustomException;
import com.cim.idm.wmspackage.materialpacking.MaterialPackingServiceProxy;
import com.cim.idm.wmspackage.materialpacking.management.data.MaterialPacking;
import com.cim.idm.wmspackage.materialpacking.management.data.MaterialPackingKey;
import com.cim.idm.wmspackage.materialpacking.management.info.RemoveInfo;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
@ -43,6 +46,9 @@ public class MaterialReceiveActController {
@Resource
private IDeliveryService deliveryService;
@Resource
private IMaterialPackingService mpService;
private static Log log = LogFactory.getLog(MaterialReceiveActController.class);
private EventInfo makeEventInfo;
@ -298,46 +304,27 @@ public class MaterialReceiveActController {
@RequestMapping(value = "/DeleteTrackOutBox", method = RequestMethod.POST)
public AjaxResult DeleteTrackOutBox(@RequestBody JSONObject in ) throws Exception{
// 获取属性
TrackOutBoDto boxs = JSON.toJavaObject(in, TrackOutBoDto.class);
MaterialreceiveActDto box = boxs.getMaterialreceiveAct();
String user = boxs.getUser();
String materialSpecName = box.getMaterialSpecName();
String receiveRequestName = box.getReceiveRequestName();
String sdkid = box.getSdkid();
String phase = box.getPhase();
String siteName = box.getSiteName();
makeEventInfo = new EventInfoUtil().makeEventInfo("DeleteTrackOutBox", user, "DeleteTrackOutBox");
String sql = " SELECT * FROM MATERIALPACKING m WHERE RECEIVEREQUESTNAME = :RECEIVEREQUESTNAME"
+ " AND MATERIALSPECNAME = :MATERIALSPECNAME AND (:PHASE IS NULL OR PHASE = :PHASE) AND (:SDK_ID IS NULL OR SDK_ID = :SDK_ID) AND STOCKSTATE = 'Created'";
Map<String, Object> hashMap = new HashMap<String,Object> ();
hashMap.put("MATERIALSPECNAME", materialSpecName);
hashMap.put("RECEIVEREQUESTNAME", receiveRequestName);
hashMap.put("PHASE", phase);
hashMap.put("SDK_ID", sdkid);
List<Map<String, Object>> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, hashMap);
// 获取列表
MaterialPackingListDto dto = new MaterialPackingListDto();
dto.setMaterialSpecName(materialSpecName);
dto.setReceiveRequestName(receiveRequestName);
dto.setPhase(box.getPhase());
dto.setSdkId(box.getSdkid());
List<Map<String, Object>> queryForList = mpService.getMaterialPacking(dto);
for (Map<String, Object> map : queryForList) {
// 找到条码明细表的数据先更新订单在删除条码明细
Map<String, Object> hashMap = new HashMap<> ();
hashMap.put("MATERIALSPECNAME", materialSpecName);
String materialPackingName = map.get("MATERIALPACKINGNAME").toString();
MaterialPackingKey materialPackingKey = new MaterialPackingKey(siteName, materialPackingName);
RemoveInfo removeInfo = new RemoveInfo();
MaterialPackingServiceProxy.getMaterialPackingService().remove(materialPackingKey,makeEventInfo,removeInfo);
//找到条码明细表的数据先更新订单在删除条码明细
String selectSql = "SELECT * FROM MATERIALPACKINGSUB m WHERE m.MATERIALPACKINGNAME = :MATERIALPACKINGNAME";
hashMap.put("MATERIALPACKINGNAME", materialPackingName);
List<Map<String, Object>> queryForList2 = IDMFrameServiceProxy.getSqlTemplate().queryForList(selectSql, hashMap);
for (Map<String, Object> map2 : queryForList2) {
String qty = map2.get("QTY").toString();
String receiveRequestName2 = map2.get("RECEIVEREQUESTNAME").toString();
String receiveRequestDetailName2 = map2.get("RECEIVEREQUESTDETAILNAME").toString();
hashMap.put("RECEIVEREQUESTNAME", receiveRequestName2);
hashMap.put("RECEIVEREQUESTDETAILNAME", receiveRequestDetailName2);
hashMap.put("QTY", qty);
String updateSql = "UPDATE MATERIALRECEIVEREQUESTDETAIL T SET T.RECEIVEDQUANTITY = T.RECEIVEDQUANTITY - :QTY "
+ "WHERE T.RECEIVEREQUESTNAME = :RECEIVEREQUESTNAME AND T.RECEIVEREQUESTDETAILNAME = :RECEIVEREQUESTDETAILNAME";
IDMFrameServiceProxy.getSqlTemplate().update(updateSql, hashMap);
String deleteSql = "DELETE FROM MATERIALPACKINGSUB m WHERE m.MATERIALPACKINGNAME = :MATERIALPACKINGNAME AND RECEIVEREQUESTNAME = :RECEIVEREQUESTNAME";
IDMFrameServiceProxy.getSqlTemplate().update(deleteSql, hashMap);
}
mpService.delMaterialPacking(hashMap, materialPackingName, siteName, makeEventInfo);
}
//更新订单数量
return AjaxResult.me().setResultObj(null);
@ -346,36 +333,18 @@ public class MaterialReceiveActController {
@RequestMapping(value = "/DeleteTrackOutThisBox", method = RequestMethod.POST)
public AjaxResult DeleteTrackOutThisBox(@RequestBody JSONObject in ) throws Exception{
// 获取属性
TrackOutBoDto boxs = JSON.toJavaObject(in, TrackOutBoDto.class);
MaterialreceiveActDto box = boxs.getMaterialreceiveAct();
String user = boxs.getUser();
String materialSpecName = box.getMaterialSpecName();
String materialPackingName2 = box.getMaterialPackingName();
String siteName = "SDK";
String materialPackingName = box.getMaterialPackingName();
String siteName = box.getSiteName();
makeEventInfo = new EventInfoUtil().makeEventInfo("DeleteTrackOutBox", user, "DeleteTrackOutBox");
Map<String, Object> hashMap = new HashMap<String,Object> ();
// 找到条码明细表的数据先更新订单在删除条码明细
Map<String, Object> hashMap = new HashMap<> ();
hashMap.put("MATERIALSPECNAME", materialSpecName);
MaterialPackingKey materialPackingKey = new MaterialPackingKey(siteName, materialPackingName2);
RemoveInfo removeInfo = new RemoveInfo();
MaterialPackingServiceProxy.getMaterialPackingService().remove(materialPackingKey,makeEventInfo,removeInfo);
//找到条码明细表的数据先更新订单在删除条码明细
String selectSql = "SELECT * FROM MATERIALPACKINGSUB m WHERE m.MATERIALPACKINGNAME = :MATERIALPACKINGNAME";
hashMap.put("MATERIALPACKINGNAME", materialPackingName2);
List<Map<String, Object>> queryForList2 = IDMFrameServiceProxy.getSqlTemplate().queryForList(selectSql, hashMap);
for (Map<String, Object> map2 : queryForList2) {
String qty = map2.get("QTY").toString();
String receiveRequestName2 = map2.get("RECEIVEREQUESTNAME").toString();
String receiveRequestDetailName2 = map2.get("RECEIVEREQUESTDETAILNAME").toString();
hashMap.put("RECEIVEREQUESTNAME", receiveRequestName2);
hashMap.put("RECEIVEREQUESTDETAILNAME", receiveRequestDetailName2);
hashMap.put("QTY", qty);
String updateSql = "UPDATE MATERIALRECEIVEREQUESTDETAIL T SET T.RECEIVEDQUANTITY = T.RECEIVEDQUANTITY - :QTY "
+ "WHERE T.RECEIVEREQUESTNAME = :RECEIVEREQUESTNAME AND T.RECEIVEREQUESTDETAILNAME = :RECEIVEREQUESTDETAILNAME";
IDMFrameServiceProxy.getSqlTemplate().update(updateSql, hashMap);
String deleteSql = "DELETE FROM MATERIALPACKINGSUB m WHERE m.MATERIALPACKINGNAME = :MATERIALPACKINGNAME";
IDMFrameServiceProxy.getSqlTemplate().update(deleteSql, hashMap);
}
mpService.delMaterialPacking(hashMap, materialPackingName, siteName, makeEventInfo);
//更新订单数量
return AjaxResult.me().setResultObj(null);
}
@ -527,49 +496,49 @@ public class MaterialReceiveActController {
@RequestMapping(value = "/commitToERP", method = RequestMethod.POST)
public AjaxResult commitToERP(@RequestBody JSONObject in ) {
TrackOutBoDto trackOutBoDto = JSON.toJavaObject(in, TrackOutBoDto.class);
// 采购单
List<MaterialReceiveRequest> requests = new ArrayList<>();
// 判定单据类型
StoreDetailDto storeDetailDto = new StoreDetailDto();
storeDetailDto.setDocumentName(trackOutBoDto.getReceiveRequestName());
storeDetailDto.setSiteName(trackOutBoDto.getSiteName());
MaterialDelivery materialDelivery = deliveryService.getByKey(storeDetailDto);
if (Objects.nonNull(materialDelivery)) {
// 到货单据
requests = deliveryService.getReceiveByDelivery(storeDetailDto);
} else {
requests.add(deliveryService.getReceiveByKey(storeDetailDto));
}
String user = trackOutBoDto.getUser();
String opCode = trackOutBoDto.getOpCode();
String commitDate = trackOutBoDto.getCommitDate();
String name = trackOutBoDto.getReceiveRequestName();
String site = trackOutBoDto.getSiteName();
// 采购单
List<MaterialReceiveRequest> requests = new ArrayList<>();
// @TODO 判定单据类型
/*MaterialReceiveRequest byKey = deliveryService.getByKey(site, name);
if (byKey.getReceiveRequestType().equals(ReceiveTypeEnums.DK.getCode())) {
// 到货单
requests = deliveryService.getReceiveByDelivery(site, name);
} else {
requests.add(byKey);
}*/
// 采购单处理
for (MaterialReceiveRequest request : requests) {
String receiveRequestName = request.getReceiveRequestName();
String siteName = request.getSiteName();
String erpFactory = request.getSTOCKORGNO();
try {
//调用QMS
// 调用 QMS
qMSServiceImpl.PreIQCInfoSend(receiveRequestName, "SDK",opCode, erpFactory);
} catch (CustomException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return AjaxResult.me().setSuccess(false).setMessage(e.toString());
}
String undoid;
String undoId;
try {
undoid = SendERPStockIn(receiveRequestName, siteName, user, opCode,commitDate,opCode);
undoId = SendERPStockIn(receiveRequestName, siteName, user, opCode,commitDate,opCode);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return AjaxResult.me().setSuccess(false).setMessage(e.toString());
}//发送过账
makeEventInfo = new EventInfoUtil().makeEventInfo("NormalStockInForSDK", user, "NormalStockInForSDK");
//更新入库凭证
SDKMaterialPackingServiceImpl.updateUndoIdByReceive(receiveRequestName, undoid, makeEventInfo);
//更新库存状态
SDKMaterialPackingServiceImpl.SaveUnDoInfo( undoid,commitDate);
SDKMaterialPackingServiceImpl.updateStockState( makeEventInfo, undoid,opCode);
}
// 发送过账
EventInfoUtil util = new EventInfoUtil();
makeEventInfo = util.makeEventInfo("NormalStockInForSDK", user, "NormalStockInForSDK");
// 更新入库凭证
SDKMaterialPackingServiceImpl.updateUndoIdByReceive(receiveRequestName, undoId, makeEventInfo);
// 更新库存状态
SDKMaterialPackingServiceImpl.SaveUnDoInfo( undoId,commitDate);
SDKMaterialPackingServiceImpl.updateStockState( makeEventInfo, undoId,opCode);
}
return AjaxResult.me().setResultObj(null);
}

View File

@ -62,9 +62,16 @@ public interface DeliveryDao {
MaterialReceiveRequest getReceiveByKey(@Param("dto") StoreDetailDto storeDetailDto);
/**
* 根据到库单获取采购单名称
* 根据到库单获取关系
*/
List<MaterialDeliveryReceive> getReceiveByDelivery(@Param("dto") StoreDetailDto storeDetailDto);
List<MaterialDeliveryReceive> getRelByDelivery(@Param("dto") StoreDetailDto storeDetailDto);
/**
* 根据到库单获取采购单名称
* @param storeDetailDto 到库单
* @return 采购单名称列表
*/
List<MaterialReceiveRequest> getReceiveByDelivery(@Param("dto") StoreDetailDto storeDetailDto);
/**
* 根据到库单获取采购单名称

View File

@ -0,0 +1,23 @@
package com.cim.idm.dao;
import com.cim.idm.model.dto.packing.MaterialPackingListDto;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
@Component
@Mapper
public interface MaterialPackingDao {
/**
* 散列盘点存储过程调用
* @param dto dto
* @return 物料信息
*/
@MapKey("dto")
List<Map<String, Object>> getMaterialPacking(@Param("dto") MaterialPackingListDto dto);
}

View File

@ -0,0 +1,18 @@
package com.cim.idm.model.dto.packing;
import lombok.Data;
@Data
public class MaterialPackingListDto {
// 物料号
private String materialSpecName;
// 到货单名称
private String receiveRequestName;
// 阶段
private String phase;
// sdk id
private String sdkId;
}

View File

@ -53,12 +53,19 @@ public interface IDeliveryService {
*/
MaterialReceiveRequest getReceiveByKey(StoreDetailDto storeDetailDto);
/**
* 根据到库单获取关系
* @param storeDetailDto 到库单
* @return 采购单名称列表
*/
List<MaterialDeliveryReceive> getRelByDelivery(StoreDetailDto storeDetailDto);
/**
* 根据到库单获取采购单名称
* @param storeDetailDto 到库单
* @return 采购单名称列表
*/
List<MaterialDeliveryReceive> getReceiveByDelivery(StoreDetailDto storeDetailDto);
List<MaterialReceiveRequest> getReceiveByDelivery(StoreDetailDto storeDetailDto);
/**
* 根据到库单获取采购单名称

View File

@ -0,0 +1,31 @@
package com.cim.idm.service;
import com.cim.idm.framework.data.EventInfo;
import com.cim.idm.model.dto.packing.MaterialPackingListDto;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
@Service("mpService")
public interface IMaterialPackingService {
/**
* 散列盘点存储过程调用
* @param dto dto
* @return 物料信息
*/
List<Map<String, Object>> getMaterialPacking(MaterialPackingListDto dto);
/**
* 删除物料批次
* @param hashMap 数据
* @param materialPackingName 包名
* @param siteName 工厂
* @param makeEventInfo 事件
*/
void delMaterialPacking(Map<String, Object> hashMap, String materialPackingName,
String siteName, EventInfo makeEventInfo);
}

View File

@ -83,7 +83,12 @@ public class DeliveryServiceImpl implements IDeliveryService {
}
@Override
public List<MaterialDeliveryReceive> getReceiveByDelivery(StoreDetailDto storeDetailDto) {
public List<MaterialDeliveryReceive> getRelByDelivery(StoreDetailDto storeDetailDto) {
return deliveryDao.getRelByDelivery(storeDetailDto);
}
@Override
public List<MaterialReceiveRequest> getReceiveByDelivery(StoreDetailDto storeDetailDto) {
return deliveryDao.getReceiveByDelivery(storeDetailDto);
}

View File

@ -0,0 +1,51 @@
package com.cim.idm.service.Impl;
import com.cim.idm.dao.MaterialPackingDao;
import com.cim.idm.framework.IDMFrameServiceProxy;
import com.cim.idm.framework.data.EventInfo;
import com.cim.idm.model.dto.packing.MaterialPackingListDto;
import com.cim.idm.service.IMaterialPackingService;
import com.cim.idm.wmspackage.materialpacking.MaterialPackingServiceProxy;
import com.cim.idm.wmspackage.materialpacking.management.data.MaterialPackingKey;
import com.cim.idm.wmspackage.materialpacking.management.info.RemoveInfo;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
@Service
public class MaterialPackingServiceServiceImpl implements IMaterialPackingService {
@Resource
private MaterialPackingDao materialPackingDao;
@Override
public List<Map<String, Object>> getMaterialPacking(MaterialPackingListDto dto) {
return materialPackingDao.getMaterialPacking(dto);
}
@Override
public void delMaterialPacking(Map<String, Object> hashMap, String materialPackingName, String siteName, EventInfo makeEventInfo) {
MaterialPackingKey materialPackingKey = new MaterialPackingKey(siteName, materialPackingName);
RemoveInfo removeInfo = new RemoveInfo();
MaterialPackingServiceProxy.getMaterialPackingService().remove(materialPackingKey, makeEventInfo, removeInfo);
// 找到条码明细表的数据先更新订单在删除条码明细
String selectSql = "SELECT * FROM MATERIALPACKINGSUB m WHERE m.MATERIALPACKINGNAME = :MATERIALPACKINGNAME";
hashMap.put("MATERIALPACKINGNAME", materialPackingName);
List<Map<String, Object>> queryForList2 = IDMFrameServiceProxy.getSqlTemplate().queryForList(selectSql, hashMap);
for (Map<String, Object> item : queryForList2) {
hashMap.put("RECEIVEREQUESTNAME", item.get("RECEIVEREQUESTNAME").toString());
hashMap.put("RECEIVEREQUESTDETAILNAME", item.get("RECEIVEREQUESTDETAILNAME").toString());
hashMap.put("QTY", item.get("QTY").toString());
String updateSql = "UPDATE MATERIALRECEIVEREQUESTDETAIL T SET T.RECEIVEDQUANTITY = T.RECEIVEDQUANTITY - :QTY "
+ "WHERE T.RECEIVEREQUESTNAME = :RECEIVEREQUESTNAME AND T.RECEIVEREQUESTDETAILNAME = :RECEIVEREQUESTDETAILNAME";
IDMFrameServiceProxy.getSqlTemplate().update(updateSql, hashMap);
String deleteSql = "DELETE FROM MATERIALPACKINGSUB m WHERE m.MATERIALPACKINGNAME = :MATERIALPACKINGNAME AND RECEIVEREQUESTNAME = :RECEIVEREQUESTNAME";
IDMFrameServiceProxy.getSqlTemplate().update(deleteSql, hashMap);
}
}
}

View File

@ -206,12 +206,24 @@
AND RECEIVEREQUESTNAME = #{dto.documentName}
</select>
<select id="getReceiveByDelivery" 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
FROM MATERIALDELIVERYRECEIVE md
WHERE md.DELIVERYNAME = #{dto.documentName}
</select>
<select id="getReceiveByDelivery" resultType="com.cim.idm.model.po.MaterialReceiveRequest">
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, MATERIALDELIVERYRECEIVE md
WHERE m.SITENAME = #{dto.siteName}
AND md.DELIVERYNAME = #{dto.documentName}
AND m.RECEIVEREQUESTNAME = md.RECEIVEREQUESTNAME
</select>
<select id="getReceiveDetail" resultType="com.cim.idm.model.vo.DeliveryReceiveDetailVo">
SELECT receiveRequestName, materialSpecName, requestQuantity, requestQuantity as deliveryNum
FROM MATERIALRECEIVEREQUESTDETAIL

View File

@ -0,0 +1,19 @@
<?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.cim.idm.dao.MaterialPackingDao">
<select id="getMaterialPacking" resultType="map">
SELECT * FROM MATERIALPACKING m
WHERE MATERIALSPECNAME = #{dto.materialSpecName}
<if test="dto.phase != null and dto.phase != ''">
AND PHASE = #{dto.phase}
</if>
<if test="dto.receiveRequestName != null and dto.receiveRequestName != ''">
AND RECEIVEREQUESTNAME = #{dto.receiveRequestName}
</if>
<if test="dto.sdkId != null and dto.sdkId != ''">
AND SDK_ID = #{dto.sdkId}
</if>
AND STOCKSTATE = 'Created'
</select>
</mapper>