package com.cim.idm.controller; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.cim.idm.exception.GlobalException; import com.cim.idm.framework.IDMFrameServiceProxy; import com.cim.idm.framework.data.EventInfo; import com.cim.idm.model.MaterialPacking; import com.cim.idm.model.MoveInDto; import com.cim.idm.service.Impl.InvoiceServiceImpl; import com.cim.idm.utils.AjaxResult; import com.cim.idm.utils.CommonUtils; import com.cim.idm.wmspackage.materialpacking.MaterialPackingServiceProxy; import com.cim.idm.wmspackage.materialpacking.management.data.MaterialPackingKey; import com.cim.idm.wmspackage.materialpacking.management.info.MaterialPackingAssignShipRequestInfo; import io.swagger.annotations.Api; import org.apache.commons.lang3.StringUtils; 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.util.*; import com.cim.idm.service.Impl.MoveInServiceImpl; @Api("移库接口") @RestController @RequestMapping("/MoveIn") @EnableAutoConfiguration public class MoveInController { @Autowired private MoveInServiceImpl MoveInServiceImpl; CommonUtils untils=new CommonUtils(); /** * 获取调拨退待操作单号集合 * @param in * @return */ @RequestMapping(value = "/BindBarCodeToMoveIn", method = RequestMethod.POST) public AjaxResult BindBarCodeToMoveIn(@RequestBody JSONObject in ){ MaterialPacking materialPacking = JSON.toJavaObject(in, MaterialPacking.class); String locationName = materialPacking.getLocationName(); String charge = materialPacking.getCharge(); String materialPackingName = materialPacking.getMaterialPackingName(); String materialSpecName = materialPacking.getMaterialSpecName(); String shipRequestName = materialPacking.getShipRequestName(); String shipRequestDetailName = materialPacking.getShipRequestDetailName(); String user = materialPacking.getUser(); String materialQty=materialPacking.getMaterialQuantity(); String erpLocation=materialPacking.getErpLocation(); //恒温恒湿管控 if(!(untils.JudgeMentERPLocationAndMaterialSpec(erpLocation,materialSpecName))) { throw new GlobalException("物料为:"+materialSpecName+" 仓库为:"+erpLocation+" ,不符合恒温恒湿管理"); } //判断条码是否存在且状态是在库 String sql = "SELECT * FROM MATERIALPACKING M WHERE M.CHARGE = :CHARGE AND M.MATERIALPACKINGNAME = :MATERIALPACKINGNAME" + " AND M.MATERIALSPECNAME = :MATERIALSPECNAME AND M.STOCKSTATE = 'Stocked' AND (M.SHIPREQUESTNAME <> :SHIPREQUESTNAME OR M.SHIPREQUESTNAME IS NULL )"; Map bindMap = new HashMap(); bindMap.put("MATERIALSPECNAME",materialSpecName); bindMap.put("CHARGE",charge ); bindMap.put("SHIPREQUESTNAME",shipRequestName ); bindMap.put("MATERIALPACKINGNAME",materialPackingName ); List> list = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, bindMap); if(Objects.isNull(list) || list.isEmpty()) { throw new GlobalException("未找到对应的条码出库记录!"); } if(list.size() > 1) { throw new GlobalException("批次找到不唯一记录,请联系IT处理!"); } String sql3 = "SELECT\r\n" + " M.*,\r\n" + " CASE\r\n" + " WHEN M.MATURATIONINTIME IS NOT NULL THEN SYSDATE - M.MATURATIONINTIME - m2.MATURATIONTIME\r\n" + " ELSE 1\r\n" + " END FLAG\r\n" + "FROM\r\n" + " MATERIALPACKING M\r\n" + "LEFT JOIN MATERIALSPEC m2 ON\r\n" + " M.MATERIALSPECNAME = m2.MATERIALSPECNAME\r\n" + "WHERE\r\n" + " M.STOCKSTATE = 'Stocked'\r\n" + " AND M.MATERIALPACKINGNAME = :MATERIALPACKINGNAME "; Map bindMap3 = new HashMap(); bindMap.put("MATERIALPACKINGNAME", materialPacking.getMaterialPackingName()); List> list3 = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql3, bindMap3); if(Objects.isNull(list3) || list3.isEmpty()) { throw new GlobalException("未找到对应的数据!"); } if(!Objects.isNull(list3) && !list3.isEmpty()) { String string = list.get(0).get("FLAG").toString(); float parseFloat = Float.parseFloat(string); float abs = Math.abs(parseFloat); if (parseFloat < 0) { throw new GlobalException("还差" + abs + "天才能熟化出库!"); } } //查找该单据该物料下的单据明细+需求数量+绑定数量 String ShipDetailSql = "SELECT SHIPREQUESTDETAILNAME ,NVL(REQUESTQUANTITY ,0) REQUESTQUANTITY,NVL(ASSIGNEDQUANTITY ,0) ASSIGNEDQUANTITY FROM MATERIALSHIPREQUESTDETAIL m WHERE SHIPREQUESTNAME =:SHIPREQUESTNAME AND MATERIALSPECNAME =:MATERIALSPECNAME"; Map ShipDetailMap = new HashMap(); ShipDetailMap.put("SHIPREQUESTNAME",shipRequestName); ShipDetailMap.put("MATERIALSPECNAME",materialSpecName ); List> ShipDetaillist = IDMFrameServiceProxy.getSqlTemplate().queryForList(ShipDetailSql, ShipDetailMap); if(Objects.isNull(ShipDetaillist) || ShipDetaillist.isEmpty()) { throw new GlobalException("未找到对应的转库入库明细!"); } for(int i=0;i=assQtyFloat+Float.parseFloat(materialQty)) { shipRequestDetailName=shipNo; break; } } if("".equals(shipRequestDetailName)) throw new GlobalException("该单据下无该物料的明细或该明细剩余接收数量低于该标签数量"); boolean bindBarCodeToMoveIn = MoveInServiceImpl.BindBarCodeToMoveIn(materialPackingName, charge, materialSpecName, user, shipRequestName, shipRequestDetailName,locationName); if (!bindBarCodeToMoveIn) { throw new GlobalException("绑定失败!"); } return AjaxResult.me().setResultObj(list); } /** * 获取调拨退待操作单号集合 * @param in * @return * @throws Exception */ @RequestMapping(value = "/CommitMoveInInvoice", method = RequestMethod.POST) public AjaxResult CommitMoveInInvoice(@RequestBody JSONObject in ) throws Exception{ MaterialPacking materialPacking = JSON.toJavaObject(in, MaterialPacking.class); String locationName = materialPacking.getLocationName(); String charge = materialPacking.getCharge(); String materialPackingName = materialPacking.getMaterialPackingName(); String materialSpecName = materialPacking.getMaterialSpecName(); String shipRequestName = materialPacking.getShipRequestName(); String shipRequestDetailName = materialPacking.getShipRequestDetailName(); String user = materialPacking.getUser(); String commitDate = materialPacking.getCommitDate(); String opCode = materialPacking.getOpCode(); boolean commitMoveInInvoice = MoveInServiceImpl.CommitMoveInInvoice(shipRequestName, user,commitDate,opCode); if (!commitMoveInInvoice) { throw new GlobalException("过账失败!"); } return AjaxResult.me().setResultObj(null); } @RequestMapping(value = "/AllCommitMoveInInvoice", method = RequestMethod.POST) public AjaxResult AllCommitMoveInInvoice(@RequestBody JSONObject in ) throws Exception { MoveInDto materialPacking = JSON.toJavaObject(in, MoveInDto.class); String locationName = materialPacking.getLocationName(); // String charge = materialPacking.getCharge(); String materialPackingName = materialPacking.getMaterialPackingName(); // String materialSpecName = materialPacking.getMaterialSpecName(); String shipRequestName = materialPacking.getShipRequestName(); String shipRequestDetailName = materialPacking.getShipRequestDetailName(); String user = materialPacking.getUser(); String commitDate = materialPacking.getCommitDate(); String opCode = materialPacking.getOpCode(); List boxList = materialPacking.getBoxList(); boolean bindBarCodeToMoveIn = MoveInServiceImpl.BindBarCodeToMoveIn2(boxList,materialPackingName, user, shipRequestName, shipRequestDetailName,locationName); if (!bindBarCodeToMoveIn) { throw new GlobalException("货位绑定到条码失败!"); } boolean commitMoveInInvoice = MoveInServiceImpl.CommitMoveInInvoice(shipRequestName, user,commitDate,opCode); if (!commitMoveInInvoice) { throw new GlobalException("过账失败!"); } return AjaxResult.me().setResultObj(null); } }