604 lines
29 KiB
Java
604 lines
29 KiB
Java
package com.cim.idm.controller;
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.cim.idm.constants.delivery.DeliveryStateEnums;
|
|
import com.cim.idm.constants.receive.ReceiveTypeEnums;
|
|
import com.cim.idm.framework.IDMFrameServiceProxy;
|
|
import com.cim.idm.framework.data.EventInfo;
|
|
import com.cim.idm.model.dto.delivery.DeliveryEditDto;
|
|
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;
|
|
import com.cim.idm.utils.EventInfoUtil;
|
|
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 org.apache.commons.logging.Log;
|
|
import org.apache.commons.logging.LogFactory;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
|
import org.springframework.web.bind.annotation.RequestBody;
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
import org.springframework.web.bind.annotation.RequestMethod;
|
|
import org.springframework.web.bind.annotation.RestController;
|
|
|
|
import java.math.BigDecimal;
|
|
import java.sql.Timestamp;
|
|
import java.util.*;
|
|
|
|
import com.cim.idm.service.Impl.SDKMaterialPackingServiceImpl;
|
|
|
|
import javax.annotation.Resource;
|
|
|
|
@RestController
|
|
@RequestMapping("/MaterialReceiveAct")
|
|
@EnableAutoConfiguration
|
|
public class MaterialReceiveActController {
|
|
|
|
@Resource
|
|
private IDeliveryService deliveryService;
|
|
|
|
@Resource
|
|
private IMaterialPackingService mpService;
|
|
|
|
private static Log log = LogFactory.getLog(MaterialReceiveActController.class);
|
|
private EventInfo makeEventInfo;
|
|
|
|
private MaterialPackingServiceImpl MaterialPackingServiceImpl = new MaterialPackingServiceImpl ();
|
|
|
|
@Autowired
|
|
private ToSAPServiceImpl toSAPServiceImpl;
|
|
|
|
@Autowired
|
|
private SDKMaterialPackingServiceImpl SDKMaterialPackingServiceImpl;
|
|
|
|
|
|
private QMSServiceImpl qMSServiceImpl = new QMSServiceImpl();
|
|
|
|
@RequestMapping(value = "/dessiginBoxByAct", method = RequestMethod.POST)
|
|
public AjaxResult dessiginBoxByAct(@RequestBody JSONObject in ) throws Exception{
|
|
|
|
MaterialReceiveRequest materialReceiveRequest = JSON.toJavaObject(in, MaterialReceiveRequest.class);
|
|
String user = materialReceiveRequest.getUser();
|
|
makeEventInfo = new EventInfoUtil().makeEventInfo("dessiginBoxByAct", user, "dessiginBoxByAct");
|
|
List<MaterialPacking> boxList = materialReceiveRequest.getBoxList();
|
|
for (MaterialPacking materialPacking : boxList) {
|
|
String materialQuantity = materialPacking.getMaterialQuantity() + "";
|
|
String siteName = "SDK";
|
|
String materialPackingName = materialPacking.getMaterialPackingName();
|
|
String receiveRequestName = materialPacking.getReceiveRequestName();
|
|
String receiveRequestDetailName = materialPacking.getReceiveRequestDetailName();
|
|
Timestamp makeDate2 = materialPacking.getMakeDate();
|
|
Date makeDate = materialPacking.getMakeDate();
|
|
String receiveActNo2 = materialPacking.getReceiveActNo();
|
|
ModifyRequestQtyInfo(makeEventInfo, siteName, receiveRequestName,
|
|
receiveRequestDetailName, materialQuantity, makeDate2,
|
|
receiveActNo2, materialQuantity,materialPackingName);
|
|
}
|
|
return AjaxResult.me().setResultObj(null);
|
|
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param eventInfo
|
|
* @param siteName
|
|
* @param receiveRequestName
|
|
* @param receiveRequestDetailName
|
|
* @param receiveQuantity
|
|
* @param
|
|
* @param makeDate
|
|
* @param receiveActNO
|
|
* @param actDetailQuantity
|
|
* @throws Exception
|
|
*/
|
|
public static void ModifyRequestQtyInfo(EventInfo eventInfo,String siteName,
|
|
String receiveRequestName,String receiveRequestDetailName,String receiveQuantity,
|
|
Timestamp makeDate,String receiveActNO,String actDetailQuantity,String materialPackingName) throws Exception
|
|
{
|
|
try
|
|
{
|
|
Map<String, Object> hashMap = new HashMap<String,Object> ();
|
|
//判断标签是否存在
|
|
String sql = "SELECT * FROM MATERIALPACKING T WHERE T.SITENAME = :SITENAME AND T.MATERIALPACKINGNAME = :MATERIALPACKINGNAME";
|
|
hashMap.put("SITENAME", siteName);
|
|
hashMap.put("MATERIALPACKINGNAME", materialPackingName);
|
|
List<Map<String, Object>> queryForList2 = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, hashMap);
|
|
if (queryForList2 == null || queryForList2.size() < 1) {
|
|
return;
|
|
}
|
|
//修改行项目数量信息
|
|
String sql1 = "UPDATE MATERIALRECEIVEREQUESTDETAIL T SET T.RECEIVEDQUANTITY = T.RECEIVEDQUANTITY - :QTY "
|
|
+ "WHERE T.RECEIVEREQUESTNAME = :RECEIVEREQUESTNAME AND T.RECEIVEREQUESTDETAILNAME = :RECEIVEREQUESTDETAILNAME";
|
|
|
|
String sql2 = "UPDATE MATERIALRECEIVEACTDETAIL T SET T.RECEIVEQUANTITY = T.RECEIVEQUANTITY - :QTY "
|
|
+ "WHERE T.RECEIVEREQUESTNAME = :RECEIVEREQUESTNAME AND T.RECEIVEREQUESTDETAILNAME = :RECEIVEREQUESTDETAILNAME AND T.RECEIVEACTNO = :RECEIVEACTNO";
|
|
|
|
String sql3 = "SELECT T.RECEIVEQUANTITY FROM MATERIALRECEIVEACTDETAIL T WHERE T.RECEIVEREQUESTNAME = :RECEIVEREQUESTNAME "
|
|
+ "AND T.RECEIVEREQUESTDETAILNAME = :RECEIVEREQUESTDETAILNAME AND T.RECEIVEACTNO = :RECEIVEACTNO";
|
|
String sql4 = "DELETE MATERIALRECEIVEACTDETAIL T WHERE T.RECEIVEREQUESTNAME = :RECEIVEREQUESTNAME "
|
|
+ "AND T.RECEIVEREQUESTDETAILNAME = :RECEIVEREQUESTDETAILNAME AND T.RECEIVEACTNO = :RECEIVEACTNO";
|
|
hashMap.put("QTY", actDetailQuantity);
|
|
hashMap.put("RECEIVEREQUESTNAME", receiveRequestName);
|
|
hashMap.put("RECEIVEREQUESTDETAILNAME", receiveRequestDetailName);
|
|
hashMap.put("RECEIVEACTNO", receiveActNO);
|
|
IDMFrameServiceProxy.getSqlTemplate().update(sql1, hashMap);
|
|
IDMFrameServiceProxy.getSqlTemplate().update(sql2, hashMap);
|
|
List<Map<String, Object>> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql3, hashMap);
|
|
if (queryForList != null && queryForList.get(0).get("RECEIVEQUANTITY").toString().equals("0")) {
|
|
IDMFrameServiceProxy.getSqlTemplate().update(sql4, hashMap);
|
|
}
|
|
MaterialPackingServiceProxy.getMaterialPackingService().delete(new MaterialPackingKey(siteName, materialPackingName));
|
|
}
|
|
catch(Exception e)
|
|
{
|
|
throw e;
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* 创建Box
|
|
* @param in
|
|
* @return
|
|
* @throws CustomException
|
|
* @throws Exception
|
|
*/
|
|
@RequestMapping(value = "/TrackOutBox", method = RequestMethod.POST)
|
|
public AjaxResult TrackOutBox(@RequestBody JSONObject in ) {
|
|
TrackOutBoDto boxs = JSON.toJavaObject(in, TrackOutBoDto.class);
|
|
MaterialreceiveActDto box = boxs.getMaterialreceiveAct();
|
|
String user = boxs.getUser();
|
|
String areaName = box.getAreaName();
|
|
String boxFlag = box.getBoxFlag();
|
|
String boxQuantity = box.getMATERIALQUANTITY();//标签个数
|
|
String charge = box.getCharge();
|
|
String erpFactory = box.getErpFactory();
|
|
String erpLocation = box.getErpLocation();
|
|
String everyBoxQuantity = box.getMATERIALCREATEQUANTITY();//标签数量
|
|
String expirationDay = box.getExpirationDay();
|
|
String fqty = (box.getFqty() == null || "NaN" .equals(box.getFqty())) ? "0" : box.getFqty().toString();
|
|
String funit = box.getFunit();
|
|
String iqcflag = box.getIQCFLAG();
|
|
String is_BATCH = box.getIS_BATCH();
|
|
String locationName = box.getLocationName() == null ? "" : box.getLocationName();
|
|
String makeDate = box.getMakeDate();
|
|
String materialSpecName = box.getMaterialSpecName();
|
|
String materialUnit = box.getMaterialUnit();
|
|
String npFlag = box.getNPFlag();
|
|
String phase = box.getPhase() ==null ? "" : box.getPhase();
|
|
String reasonCode = box.getReasonCode();
|
|
String reasonCodeType = box.getReasonCodeType();
|
|
String receiveActNo = box.getReceiveActNo();
|
|
String receiveQty = box.getRECEIVEDQUANTITY2();//实收数量
|
|
String receiveRequestDetailName = box.getReceiveRequestDetailName();
|
|
// 单据
|
|
String receiveRequestName = boxs.getReceiveRequestName();
|
|
String remark = box.getRemark();
|
|
String sdkid = box.getSdkid() == null ? "" : box.getSdkid();
|
|
String shipRequestDetailName = box.getShipRequestDetailName();
|
|
String shipRequestName = box.getShipRequestName();
|
|
String siteName = box.getSiteName();
|
|
String specName = box.getSpecName() == null ? "":box.getSpecName();
|
|
String supplierCharge = box.getSupplierCharge();
|
|
String supplierName = box.getSUPPLIERNO();
|
|
String truegg = box.getTruegg();
|
|
String salesperson = box.getSALESPERSON();
|
|
String business_UNIT = box.getBUSINESS_UNIT();
|
|
String career_ASSISTANCE = box.getCAREER_ASSISTANCE();
|
|
makeEventInfo = new EventInfoUtil().makeEventInfo("TrackOutBox", user, "TrackOutBox");
|
|
|
|
//判断数量卡控是否正确
|
|
BigDecimal fboxQuantity = new BigDecimal(boxQuantity);//标签个数
|
|
BigDecimal feveryBoxQuantity = new BigDecimal(everyBoxQuantity);//标签数量
|
|
BigDecimal freceiveQty = new BigDecimal(receiveQty);//实收数量
|
|
BigDecimal zero = BigDecimal.ZERO;
|
|
if (fboxQuantity.compareTo(zero) <= 0) {
|
|
return AjaxResult.me().setSuccess(false).setMessage("标签个数不能小于0");
|
|
}
|
|
if (feveryBoxQuantity.compareTo(zero) <= 0) {
|
|
return AjaxResult.me().setSuccess(false).setMessage("标签数量不能小于0");
|
|
}
|
|
if (freceiveQty.compareTo(zero) <= 0) {
|
|
return AjaxResult.me().setSuccess(false).setMessage("接收数量不能小于0");
|
|
}
|
|
String timeKey = null;
|
|
try {
|
|
//生产标签
|
|
timeKey = MaterialPackingServiceImpl.Packing(makeEventInfo, siteName, areaName, receiveQty, boxQuantity,
|
|
everyBoxQuantity, "Y", receiveRequestName, receiveRequestDetailName, materialSpecName,
|
|
receiveActNo, makeDate, shipRequestName, shipRequestDetailName, reasonCodeType, reasonCode,
|
|
erpLocation, erpFactory, charge, supplierName, npFlag, expirationDay, supplierCharge, sdkid,
|
|
locationName, phase, specName, materialUnit, is_BATCH, iqcflag, funit, fqty, remark, truegg,
|
|
salesperson,career_ASSISTANCE,business_UNIT);
|
|
} catch (Exception e) {
|
|
// TODO Auto-generated catch block
|
|
e.printStackTrace();
|
|
return AjaxResult.me().setSuccess(false).setMessage(e.toString());
|
|
}
|
|
//更新订单数量
|
|
//1.查询符合条件的Box
|
|
String sql2 = " 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' AND LASTEVENTTIMEKEY = :LASTEVENTTIMEKEY";
|
|
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);
|
|
hashMap.put("LASTEVENTTIMEKEY", timeKey);
|
|
List<Map<String, Object>> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql2, hashMap);
|
|
for (Map<String, Object> map : queryForList) {
|
|
String materialPackingName = map.get("MATERIALPACKINGNAME").toString(); //标签
|
|
String materialQuantity = map.get("MATERIALQUANTITY").toString(); //数量
|
|
BigDecimal mathMaterialQuantity = new BigDecimal(materialQuantity);
|
|
String invoiceSql = "SELECT\r\n" +
|
|
" M.REQUESTQUANTITY - M.RECEIVEDQUANTITY QTY,\r\n" +
|
|
" M.RECEIVEREQUESTNAME,\r\n" +
|
|
" M.RECEIVEREQUESTDETAILNAME \r\n" +
|
|
"FROM\r\n" +
|
|
" MATERIALRECEIVEREQUESTDETAIL M\r\n" +
|
|
" LEFT JOIN MATERIALSPEC c ON c.MATERIALSPECNAME = M.MATERIALSPECNAME\r\n" +
|
|
"WHERE\r\n" +
|
|
" M.RECEIVEREQUESTNAME = :RECEIVEREQUESTNAME\r\n" +
|
|
" AND M.MATERIALSPECNAME = :MATERIALSPECNAME\r\n" +
|
|
" AND (:PHASE IS NULL\r\n" +
|
|
" OR c.PHASE = :PHASE)\r\n" +
|
|
" AND (:SDK_ID IS NULL\r\n" +
|
|
" OR SDK_ID = :SDK_ID)\r\n" +
|
|
" AND M.REQUESTQUANTITY - M.RECEIVEDQUANTITY > 0";
|
|
List<Map<String, Object>> queryForList2 = IDMFrameServiceProxy.getSqlTemplate().queryForList(invoiceSql, hashMap);
|
|
for (Map<String, Object> map2 : queryForList2) {
|
|
String insertSql = "INSERT INTO MATERIALPACKINGSUB T (T.MATERIALPACKINGNAME,T.RECEIVEREQUESTNAME,T.RECEIVEREQUESTDETAILNAME,T.QTY) "
|
|
+ "VALUES (:MATERIALPACKINGNAME, :RECEIVEREQUESTNAME,:RECEIVEREQUESTDETAILNAME,:QTY)";
|
|
String updateSql = "UPDATE MATERIALRECEIVEREQUESTDETAIL T SET T.RECEIVEDQUANTITY = T.RECEIVEDQUANTITY + :QTY "
|
|
+ "WHERE T.RECEIVEREQUESTNAME = :RECEIVEREQUESTNAME AND T.RECEIVEREQUESTDETAILNAME = :RECEIVEREQUESTDETAILNAME";
|
|
String qty = map2.get("QTY").toString();
|
|
BigDecimal mathQty = new BigDecimal(qty);
|
|
String receiveRequestName2 = map2.get("RECEIVEREQUESTNAME").toString();
|
|
String receiveRequestDetailName2 = map2.get("RECEIVEREQUESTDETAILNAME").toString();
|
|
Map<String, Object> hashMap2 = new HashMap<String,Object> ();
|
|
hashMap2.put("MATERIALPACKINGNAME", materialPackingName);
|
|
hashMap2.put("RECEIVEREQUESTNAME", receiveRequestName2);
|
|
hashMap2.put("RECEIVEREQUESTDETAILNAME", receiveRequestDetailName2);
|
|
if (mathMaterialQuantity.compareTo(mathQty) == 0) {//条码数量和剩余数量一致
|
|
System.out.println("a equals b");
|
|
BigDecimal a = new BigDecimal("10.5");
|
|
BigDecimal b = new BigDecimal("5.5");
|
|
int result = a.compareTo(b);
|
|
hashMap2.put("QTY", mathMaterialQuantity);
|
|
IDMFrameServiceProxy.getSqlTemplate().update(insertSql, hashMap2);
|
|
IDMFrameServiceProxy.getSqlTemplate().update(updateSql, hashMap2);
|
|
break;
|
|
} else if (mathMaterialQuantity.compareTo(mathQty) == 1) {//条码数量大于剩余数量
|
|
hashMap2.put("QTY", qty);
|
|
mathMaterialQuantity = mathMaterialQuantity.subtract(mathQty);
|
|
IDMFrameServiceProxy.getSqlTemplate().update(insertSql, hashMap2);
|
|
IDMFrameServiceProxy.getSqlTemplate().update(updateSql, hashMap2);
|
|
System.out.println("a is greater than b");
|
|
continue;
|
|
} else {//条码数量小于订单剩余数量
|
|
System.out.println("a is less than b");
|
|
hashMap2.put("QTY", mathMaterialQuantity);
|
|
IDMFrameServiceProxy.getSqlTemplate().update(insertSql, hashMap2);
|
|
IDMFrameServiceProxy.getSqlTemplate().update(updateSql, hashMap2);
|
|
break;
|
|
}
|
|
}
|
|
|
|
}
|
|
//2.查询符合条件的订单明细
|
|
|
|
// return AjaxResult.me().setResultObj(null);box
|
|
return AjaxResult.me().setResultObj(in);
|
|
}
|
|
|
|
|
|
@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 siteName = box.getSiteName();
|
|
makeEventInfo = new EventInfoUtil().makeEventInfo("DeleteTrackOutBox", user, "DeleteTrackOutBox");
|
|
// 获取列表
|
|
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();
|
|
mpService.delMaterialPacking(hashMap, materialPackingName, siteName, makeEventInfo);
|
|
}
|
|
//更新订单数量
|
|
return AjaxResult.me().setResultObj(null);
|
|
}
|
|
|
|
|
|
@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 materialPackingName = box.getMaterialPackingName();
|
|
String siteName = box.getSiteName();
|
|
makeEventInfo = new EventInfoUtil().makeEventInfo("DeleteTrackOutBox", user, "DeleteTrackOutBox");
|
|
// 找到条码明细表的数据,先更新订单在删除条码明细
|
|
Map<String, Object> hashMap = new HashMap<> ();
|
|
hashMap.put("MATERIALSPECNAME", materialSpecName);
|
|
mpService.delMaterialPacking(hashMap, materialPackingName, siteName, makeEventInfo);
|
|
//更新订单数量
|
|
return AjaxResult.me().setResultObj(null);
|
|
}
|
|
|
|
// 删除销售入库
|
|
@RequestMapping(value = "/DeleteSaleReturn", method = RequestMethod.POST)
|
|
public AjaxResult DeleteSaleReturn(@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";
|
|
makeEventInfo = new EventInfoUtil().makeEventInfo("ProductSaleReturn", user, "ProductSaleReturn");
|
|
Map<String, Object> hashMap = new HashMap<String,Object> ();
|
|
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);
|
|
}
|
|
|
|
com.cim.idm.wmspackage.materialpacking.management.info.SetEventInfo setEventInfo1 = new com.cim.idm.wmspackage.materialpacking.management.info.SetEventInfo();
|
|
EventInfo eventInfo = EventInfoUtil.makeEventInfo("ProductSaleReturn", user, "ProductSaleReturn");
|
|
HashMap<String,Object> hashMap2 = new HashMap<String,Object >();
|
|
|
|
hashMap2.put("receiveRequestName","");
|
|
hashMap2.put("stockState", "StockOut");
|
|
|
|
setEventInfo1.setUserColumns(hashMap2);
|
|
MaterialPackingKey materialPackingKey2 = new MaterialPackingKey(siteName,materialPackingName2);
|
|
MaterialPacking setEvent = MaterialPackingServiceProxy.getMaterialPackingService().setEvent(materialPackingKey2, eventInfo, setEventInfo1);
|
|
|
|
return AjaxResult.me().setResultObj(null);
|
|
}
|
|
|
|
/*
|
|
* 解绑销售入库
|
|
* lz
|
|
*/
|
|
@RequestMapping(value = "/DeleteProductSaleReturn", method = RequestMethod.POST)
|
|
public AjaxResult DeleteProductSaleReturn(@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 receiveRequestName = box.getReceiveRequestName();
|
|
String phase = box.getPhase();
|
|
String sdkid = box.getSdkid();
|
|
String materialquantity = box.getMATERIALQUANTITY();
|
|
String selectSql = "SELECT M.REQUESTQUANTITY - M.RECEIVEDQUANTITY QTY, M.RECEIVEREQUESTNAME,M.RECEIVEREQUESTDETAILNAME \r\n" +
|
|
"FROM MATERIALRECEIVEREQUESTDETAIL M\r\n" +
|
|
"WHERE M.MATERIALSPECNAME = :MATERIALSPECNAME\r\n" +
|
|
" AND (:PHASE IS NULL OR PHASE = :PHASE)\r\n" +
|
|
" AND (:SDK_ID IS NULL OR SDK_ID = :SDK_ID)\r\n" +
|
|
// " AND M.REQUESTQUANTITY - M.RECEIVEDQUANTITY > 0" +
|
|
" AND RECEIVEREQUESTNAME = :RECEIVEREQUESTNAME";
|
|
Map<String,Object> map = new HashMap<String ,Object >();
|
|
map.put("MATERIALSPECNAME", materialSpecName);
|
|
map.put("PHASE", phase);
|
|
map.put("SDK_ID", sdkid);
|
|
map.put("RECEIVEREQUESTNAME", receiveRequestName);
|
|
List<Map<String,Object>> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(selectSql, map);
|
|
BigDecimal mathMaterialQuantity = new BigDecimal(materialquantity);
|
|
int i = 0;
|
|
for (Map<String, Object> map2 : queryForList) {
|
|
String insertSql = "UPDATE MATERIALPACKINGSUB T SET T.QTY = (T.QTY - :QTY)"
|
|
+ "WHERE T.MATERIALPACKINGNAME = :MATERIALPACKINGNAME and T.RECEIVEREQUESTNAME = :RECEIVEREQUESTNAME and T.RECEIVEREQUESTDETAILNAME = :RECEIVEREQUESTDETAILNAME";
|
|
String updateSql = "UPDATE MATERIALRECEIVEREQUESTDETAIL T SET T.RECEIVEDQUANTITY = (T.RECEIVEDQUANTITY - :QTY) "
|
|
+ "WHERE T.RECEIVEREQUESTNAME = :RECEIVEREQUESTNAME AND T.RECEIVEREQUESTDETAILNAME = :RECEIVEREQUESTDETAILNAME";
|
|
String qty = map2.get("QTY").toString();
|
|
BigDecimal mathQty = new BigDecimal(qty);
|
|
String receiveRequestName2 = map2.get("RECEIVEREQUESTNAME").toString();
|
|
String receiveRequestDetailName2 = map2.get("RECEIVEREQUESTDETAILNAME").toString();
|
|
Map<String, Object> hashMap2 = new HashMap<String,Object> ();
|
|
hashMap2.put("MATERIALPACKINGNAME", materialPackingName2);
|
|
hashMap2.put("RECEIVEREQUESTNAME", receiveRequestName2);
|
|
hashMap2.put("RECEIVEREQUESTDETAILNAME", receiveRequestDetailName2);
|
|
if (mathMaterialQuantity.compareTo(mathQty) == 0) {//条码数量和剩余数量一致
|
|
System.out.println("a equals b");
|
|
BigDecimal a = new BigDecimal("10.5");
|
|
BigDecimal b = new BigDecimal("5.5");
|
|
int result = a.compareTo(b);
|
|
hashMap2.put("QTY", mathMaterialQuantity);
|
|
IDMFrameServiceProxy.getSqlTemplate().update(insertSql, hashMap2);
|
|
IDMFrameServiceProxy.getSqlTemplate().update(updateSql, hashMap2);
|
|
i++;
|
|
break;
|
|
} else if (mathMaterialQuantity.compareTo(mathQty) == 1) {//条码数量大于剩余数量
|
|
if(i >= queryForList.size()-1) {
|
|
hashMap2.put("QTY", mathMaterialQuantity.toString());
|
|
mathMaterialQuantity = mathMaterialQuantity.subtract(mathQty);
|
|
IDMFrameServiceProxy.getSqlTemplate().update(insertSql, hashMap2);
|
|
IDMFrameServiceProxy.getSqlTemplate().update(updateSql, hashMap2);
|
|
System.out.println("a is greater than b");
|
|
i++;
|
|
} else {
|
|
hashMap2.put("QTY", qty.toString());
|
|
mathMaterialQuantity = mathMaterialQuantity.subtract(mathQty);
|
|
IDMFrameServiceProxy.getSqlTemplate().update(insertSql, hashMap2);
|
|
IDMFrameServiceProxy.getSqlTemplate().update(updateSql, hashMap2);
|
|
System.out.println("a is greater than b");
|
|
i++;
|
|
continue;
|
|
}
|
|
} else {//条码数量小于订单剩余数量
|
|
System.out.println("a is less than b");
|
|
hashMap2.put("QTY", mathMaterialQuantity.toString());
|
|
IDMFrameServiceProxy.getSqlTemplate().update(insertSql, hashMap2);
|
|
IDMFrameServiceProxy.getSqlTemplate().update(updateSql, hashMap2);
|
|
i++;
|
|
break;
|
|
}
|
|
}
|
|
com.cim.idm.wmspackage.materialpacking.management.info.SetEventInfo setEventInfo1 = new com.cim.idm.wmspackage.materialpacking.management.info.SetEventInfo();
|
|
EventInfo eventInfo = EventInfoUtil.makeEventInfo("ProductSaleReturn", user, "ProductSaleReturn");
|
|
HashMap<String,Object> hashMap = new HashMap<String,Object >();
|
|
|
|
hashMap.put("receiveRequestName","");
|
|
hashMap.put("stockState", "StockOut");
|
|
|
|
setEventInfo1.setUserColumns(hashMap);
|
|
MaterialPackingKey materialPackingKey2 = new MaterialPackingKey(siteName,materialPackingName2);
|
|
MaterialPacking setEvent = MaterialPackingServiceProxy.getMaterialPackingService().setEvent(materialPackingKey2, eventInfo, setEventInfo1);
|
|
|
|
//更新订单数量
|
|
return AjaxResult.me().setResultObj(null);
|
|
}
|
|
|
|
|
|
@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();
|
|
// 采购单处理
|
|
for (MaterialReceiveRequest request : requests) {
|
|
String receiveRequestName = request.getReceiveRequestName();
|
|
String siteName = request.getSiteName();
|
|
String erpFactory = request.getSTOCKORGNO();
|
|
|
|
String undoId = null;
|
|
try {
|
|
// 采购订单
|
|
if (ReceiveTypeEnums.isPurchase(request.getReceiveRequestType())) {
|
|
Map<String,Object> args = new HashMap<>();
|
|
undoId = toSAPServiceImpl.PurStockIn(receiveRequestName, siteName, user, args);
|
|
}else if( ReceiveTypeEnums.isSaleReturn(request.getReceiveRequestType())) {
|
|
undoId = toSAPServiceImpl.SaleReturn(receiveRequestName, siteName, user, commitDate, opCode);
|
|
}
|
|
// @TODO 其他订单
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
return AjaxResult.me().setSuccess(false).setMessage(e.toString());
|
|
}
|
|
try {
|
|
// 调用 QMS
|
|
qMSServiceImpl.PreIQCInfoSend(receiveRequestName, "SDK",opCode, erpFactory);
|
|
} catch (CustomException e) {
|
|
e.printStackTrace();
|
|
return AjaxResult.me().setSuccess(false).setMessage(e.toString());
|
|
}
|
|
// 发送过账
|
|
EventInfoUtil util = new EventInfoUtil();
|
|
makeEventInfo = util.makeEventInfo("NormalStockInForSDK", user, "NormalStockInForSDK");
|
|
// 更新入库凭证
|
|
SDKMaterialPackingServiceImpl.updateUndoIdByReceive(receiveRequestName, undoId, makeEventInfo);
|
|
// 更新库存状态
|
|
SDKMaterialPackingServiceImpl.SaveUnDoInfo( undoId,commitDate);
|
|
SDKMaterialPackingServiceImpl.updateStockState( makeEventInfo, undoId,opCode);
|
|
}
|
|
// 到货单据更新状态
|
|
if (Objects.nonNull(materialDelivery)) {
|
|
DeliveryEditDto deliveryEditDto = new DeliveryEditDto();
|
|
deliveryEditDto.setDeliveryName(trackOutBoDto.getReceiveRequestName());
|
|
deliveryEditDto.setSiteName(trackOutBoDto.getSiteName());
|
|
// @TODO 完成状态下,更新为 DeliveryStateEnums.FINISH
|
|
deliveryEditDto.setDeliveryState(DeliveryStateEnums.DOING.getCode());
|
|
deliveryService.editDelivery(deliveryEditDto);
|
|
}
|
|
return AjaxResult.me().setResultObj(null);
|
|
}
|
|
|
|
// 单据类型判断
|
|
public String SendERPStockIn(String receiveRequestName, String siteName, String eventUser,String reActo,String commitDate,String opCode) throws Exception {
|
|
//判断单据类型调用不同的NC接口
|
|
String sql = "SELECT m.RECEIVEREQUESTTYPE,m.RECEIVEREQUESTDETAILTYPE FROM MATERIALRECEIVEREQUEST m WHERE m.RECEIVEREQUESTNAME = :RECEIVEREQUESTNAME";
|
|
Map<String, Object> hashMap = new HashMap<String,Object> ();
|
|
hashMap.put("RECEIVEREQUESTNAME", receiveRequestName);
|
|
List<Map<String, Object>> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, hashMap);
|
|
String billCode = "";
|
|
if (queryForList != null && queryForList.size() > 0) {
|
|
String type = queryForList.get(0).get("RECEIVEREQUESTTYPE").toString();
|
|
// String receiverequestdetailtype = queryForList.get(0).get("RECEIVEREQUESTDETAILTYPE").toString();
|
|
switch (type) {
|
|
case "Z001" : //采购入库
|
|
case "Z002" : //研发采购订单
|
|
case "Z003" : //非生产物资采购订单
|
|
case "Z004" : //固定资产、在建工程采购订单
|
|
Map<String,Object> args = new HashMap<>();
|
|
billCode = toSAPServiceImpl.PurStockIn(receiveRequestName, siteName, eventUser,
|
|
args/* ,overReceiveControls */);
|
|
break;
|
|
case "Z005" : //服务费用采购订单
|
|
case "Z006" : //股份 - 泗洪STO
|
|
case "Z007" : //股份泗洪-分子公司STO
|
|
break;
|
|
case "Z008" : //物资退货采购订单
|
|
break;
|
|
case "ZLR1" : //销售退料
|
|
billCode = toSAPServiceImpl.SaleReturn(receiveRequestName, "SDK", eventUser,commitDate, opCode);
|
|
break;
|
|
default :
|
|
break;
|
|
}
|
|
} else {
|
|
throw new CustomException("找不到单据" + receiveRequestName);
|
|
}
|
|
return billCode;
|
|
}
|
|
}
|