package com.cim.idm.controller; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.TypeReference; import com.cim.idm.exception.GlobalException; import com.cim.idm.framework.IDMFrameServiceProxy; import com.cim.idm.model.BaseEntity; import com.cim.idm.model.StorageSpec; import com.cim.idm.utils.AjaxResult; import com.cim.idm.utils.CommonUtils; import io.swagger.annotations.Api; 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.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Objects; import java.util.function.Function; import java.util.stream.Collectors; import com.cim.idm.service.Impl.ERPLocationMoveNoInvoiceServiceImpl; @Api("无单据库位移动接口") @RestController @RequestMapping("/api/location") @EnableAutoConfiguration public class ERPLocationMoveNoInvoiceController { @Autowired private ERPLocationMoveNoInvoiceServiceImpl ERPLocationMoveNoInvoiceServiceImpl; CommonUtils CU=new CommonUtils(); @RequestMapping(value = "/AnalyStockBarCode", method = RequestMethod.POST) public AjaxResult AnalyStockBarCode(@RequestBody JSONObject in ){ StorageSpec storageSpec = JSON.toJavaObject(in, StorageSpec.class); String erpFactory = storageSpec.getErpFactory(); String erpLocation = storageSpec.getErpLocation(); String storageName = storageSpec.getStorageName(); String user = storageSpec.getUser(); String materialPackingName = storageSpec.getMaterialPackingName(); String materialspecname= storageSpec.getMATERIALSPECNAME(); String substring = user.substring(0,1); String userID = user.substring(1); //判断条码是否存在且状态是在库 String sql = " SELECT\r\n" + " M.MATERIALPACKINGNAME,\r\n" + " M.CHARGE,\r\n" + " M2.DESC_CN ,\r\n" + " SS.SPECNAME ,\r\n" + " M.MATERIALQUANTITY ,\r\n" + " :ERPLOCATION AIMERPLOCATION,\r\n" + " :ERPFACTORY AIMERPFACTORY,\r\n" + " :LOCATIONNAME AIMLOCATIONNAME,\r\n" + " M.ERPLOCATION ,\r\n" + " M.ERPFACTORY ,\r\n" + " M.LOCATIONNAME ," + "M.MATERIALSPECNAME,M.PHASE,PACKINGGRADE, " + "CASE\r\n" + " WHEN M.MATURATIONINTIME IS NOT NULL THEN SYSDATE - M.MATURATIONINTIME - NVL(m2.MATURATIONTIME,0)\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" + "LEFT JOIN SDK_SPEC SS ON M.SDK_ID = SS.SDK_ID \r\n" + "WHERE\r\n" + " M.MATERIALPACKINGNAME = :MATERIALPACKINGNAME\r\n" + " AND STOCKSTATE = 'Stocked' AND SHIPREQUESTNAME IS NULL"; Map bindMap = new HashMap(); bindMap.put("MATERIALPACKINGNAME",materialPackingName); bindMap.put("ERPFACTORY",erpFactory); bindMap.put("ERPLOCATION",erpLocation); bindMap.put("LOCATIONNAME",storageName); List> list = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, bindMap); if(Objects.isNull(list) || list.isEmpty()) { throw new GlobalException("未找到对应的库存记录!"); } String packingGrade = list.get(0).get("PACKINGGRADE") == null ? "" : list.get(0).get("PACKINGGRADE").toString(); Boolean judgeMtaerialStateWithERPLocation = CU.JudgeMtaerialStateWithERPLocation(erpLocation, packingGrade); if (!judgeMtaerialStateWithERPLocation) { throw new GlobalException("仓库类型和物料品质等级不一致"); } if ("OK".equals(packingGrade) && ("1010".equals(erpFactory) || "1020".equals(erpFactory))) { //恒温恒湿管控 if(!(CU.JudgeMentERPLocationAndMaterialSpec(erpLocation,materialspecname))) { throw new GlobalException("物料为:"+materialspecname+" 仓库为:"+erpLocation+" ,不符合恒温恒湿管理"); } } if(erpLocation.equals(list.get(0).get("ERPLOCATION").toString())) { return AjaxResult.me().setSuccess(false).setMessage("相同仓库不能转入").setResultObj(null); } else if(!erpFactory.equals(list.get(0).get("ERPFACTORY").toString())) { return AjaxResult.me().setSuccess(false).setMessage("不同组织不能转入").setResultObj(null); } if(!Objects.isNull(list) && !list.isEmpty()) { String string = list.get(0).get("FLAG").toString(); float parseFloat = Float.parseFloat(string); float abs = Math.abs(parseFloat); if("1".equals(substring)) { String sqlstrString = "SELECT DISTINCT OVEN_PERMISSIONS\r\n" + "FROM USERINFO u \r\n" + "LEFT JOIN USERGROUPLINK u2 ON u.USERID = u2.USERID\r\n" + "LEFT JOIN USERGROUP u3 ON u2.USERGROUPNAME = u3.USERGROUPNAME\r\n" + "WHERE u.USERID = :USERID"; Map hashMap = new HashMap(); hashMap.put("USERID",userID); List> queryForMap = IDMFrameServiceProxy.getSqlTemplate().queryForList(sqlstrString, hashMap); Integer i = 0; for (Map map : queryForMap) { if("1".equals(map.get("OVEN_PERMISSIONS").toString())) { i++; } } if(i > 0) { return AjaxResult.me().setResultObj(list); } else { return AjaxResult.me().setSuccess(false).setMessage("权限不够").setResultObj(null); } } // 判断是否是熟化仓 String erplocationSH = list.get(0).get("ERPLOCATION") == null ? "" : list.get(0).get("ERPLOCATION").toString(); String DetailSql2 = "SELECT IS_OVEN FROM BS_ERPLOCATION m WHERE ERPLOCATIONNAME =:ERPLOCATIONAMEE AND IS_OVEN='Y'"; Map DetailMap2 = new HashMap(); DetailMap2.put("ERPLOCATIONAMEE",erplocationSH); List> ShipDetaillist2 = IDMFrameServiceProxy.getSqlTemplate().queryForList(DetailSql2, DetailMap2); if (ShipDetaillist2.size() != 0 && parseFloat < 0) { // throw new GlobalException("还差" + abs + "天才能熟化出库!"); // 总分钟数 int totalMinutes = (int) (abs * 24 * 60); // 天数(总分钟数除以60再除以24) int days = totalMinutes / (60 * 24); // 剩余分钟数(总分钟数减去天数的分钟数) int house = (totalMinutes - days * 24 * 60) / 60; int minutes = totalMinutes - days * 24 * 60 - house * 60; // throw new GlobalException("烤箱还差" + days + "天" + house + "小时" + minutes + "分钟" + "才能熟化出库!"); return AjaxResult.me().setSuccess(false).setMessage("烤箱还差" + days + "天" + house + "小时" + minutes + "分钟" + "才能熟化出库!").setResultObj(null); } } return AjaxResult.me().setResultObj(list); } @RequestMapping(value = "/CommitMove", method = RequestMethod.POST) public AjaxResult CommitMove(@RequestBody JSONObject in ) throws Exception{ BaseEntity storageSpec = JSONObject.parseObject(in.toJSONString(), new TypeReference>() { }); List body = storageSpec.getBody(); String user = storageSpec.getUser(); String time = storageSpec.getTime(); String opCode = storageSpec.getOpCode(); ERPLocationMoveNoInvoiceServiceImpl.CommitMove(body,user,time,opCode); return AjaxResult.me().setResultObj(null); } @RequestMapping(value = "/CommitMove1", method = RequestMethod.POST) public AjaxResult CommitMove1(@RequestBody JSONObject in ) throws Exception{ BaseEntity storageSpec = JSONObject.parseObject(in.toJSONString(), new TypeReference>() { }); List body = storageSpec.getBody(); String user = storageSpec.getUser(); String time = storageSpec.getTime(); String opCode = storageSpec.getOpCode(); // Map> collect = body.stream().collect(Collectors.groupingBy(StorageSpec::getErpLocation)); // for (Map.Entry> entry : collect.entrySet()) { // String key = entry.getKey(); // List val = entry.getValue(); // ERPLocationMoveNoInvoiceServiceImpl.CommitMove(val,user,time,opCode); // } Function nonNullAimLocationName = spec -> spec.getAIMLOCATIONNAME() == null ? "" : spec.getAIMLOCATIONNAME(); Map>> collect = body.stream().collect(Collectors.groupingBy(StorageSpec::getErpLocation,Collectors.groupingBy(nonNullAimLocationName))); for (Entry>> entry : collect.entrySet()) { String key = entry.getKey(); Map> valueMap = entry.getValue(); for (Entry> entrysList : valueMap.entrySet()) { List val = entrysList.getValue(); for (int i = 0; i < val.size(); i++) { System.out.println(val.get(i).getCHARGE() + val.get(i).getAIMLOCATIONNAME()); } ERPLocationMoveNoInvoiceServiceImpl.CommitMove(val,user,time,opCode); } } return AjaxResult.me().setResultObj(null); } //PC端无来源转库新增拆分 @RequestMapping(value = "/CommitMove2", method = RequestMethod.POST) public AjaxResult CommitMove2(@RequestBody JSONObject in ) throws Exception{ BaseEntity storageSpec = JSONObject.parseObject(in.toJSONString(), new TypeReference>() { }); List body = storageSpec.getBody(); String user = storageSpec.getUser(); String time = storageSpec.getTime(); String opCode = storageSpec.getOpCode(); // Map> collect = body.stream().collect(Collectors.groupingBy(StorageSpec::getErpLocation)); // for (Map.Entry> entry : collect.entrySet()) { // String key = entry.getKey(); // List val = entry.getValue(); // ERPLocationMoveNoInvoiceServiceImpl.CommitMove(val,user,time,opCode); // } Function nonNullAimLocationName = spec -> spec.getAIMLOCATIONNAME() == null ? "" : spec.getAIMLOCATIONNAME(); Map>> collect = body.stream().collect(Collectors.groupingBy(StorageSpec::getErpLocation,Collectors.groupingBy(nonNullAimLocationName))); for (Entry>> entry : collect.entrySet()) { String key = entry.getKey(); Map> valueMap = entry.getValue(); for (Entry> entrysList : valueMap.entrySet()) { List val = entrysList.getValue(); for (int i = 0; i < val.size(); i++) { System.out.println(val.get(i).getCHARGE() + val.get(i).getAIMLOCATIONNAME()); } ERPLocationMoveNoInvoiceServiceImpl.CommitMove1(val,user,time,opCode); } } return AjaxResult.me().setResultObj(null); } }