From 1c348775938e00c84811921d446d5eabc740ec7e Mon Sep 17 00:00:00 2001 From: userName Date: Fri, 14 Mar 2025 22:53:48 +0800 Subject: [PATCH] =?UTF-8?q?=E7=95=8C=E9=9D=A2=E8=B0=83=E6=95=B4=EF=BC=8C?= =?UTF-8?q?=E5=8A=A0=E6=9C=BA=E5=8F=B0=E5=8F=B7=E3=80=81=E9=99=90=E5=88=B6?= =?UTF-8?q?LOC=E3=80=81=E6=95=B4=E7=90=86=E5=BA=93=E5=8C=BA=E6=8E=A8?= =?UTF-8?q?=E8=8D=90=E3=80=81=E6=96=99=E5=8F=B7=E5=8A=A0=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E5=BA=93=E5=8C=BA=E3=80=81lik?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../swms/server/model/inventory/AgvTask.java | 3 + .../server/model/shipping/PickTicket.java | 2 +- .../server/service/base/AgvTaskManager.java | 14 ++ .../server/service/base/LocationManager.java | 2 +- .../base/pojo/DefaultAgvTaskManager.java | 207 +++++++++++++++++- .../base/pojo/DefaultImportFileManager.java | 71 +++--- .../service/base/pojo/DefaultItemManager.java | 33 +-- .../base/pojo/DefaultLocationManager.java | 27 +-- .../count/pojo/DefaultCountPlanManager.java | 4 +- .../pojo/DefaultInterfaceRespManager.java | 9 +- .../pojo/DefaultQueryAppManager.java | 9 +- .../receiving/pojo/DefaultASNManager.java | 22 +- .../receiving/pojo/DefaultMoveDocManager.java | 33 ++- .../pojo/DefaultPickTicketManager.java | 20 +- .../server/web/servlet/ASNReceiveServlet.java | 20 +- .../export/impl/XLSExportGenerator.java | 3 +- src/test/yao/2025.sql | 13 ++ .../origen/base/editCallLOCGroupPage.xml | 54 +++++ .../config/origen/base/editItemDetailPage.xml | 2 +- .../origen/base/maintainItemDSMBPage.xml | 8 +- .../origen/base/maintainWarehouseAreaPage.xml | 2 +- .../base/maintainZonePlantLocationPage.xml | 55 +++++ .../origen/base/modifyWarehouseAreaPage.xml | 4 +- .../origen/base/modifyZonePlantPage.xml | 4 +- .../origen/count/editAGVWorkTASKPage.xml | 2 +- .../origen/receiving/maintainAGVTASKPage.xml | 3 + .../maintainPickTicketDetailManualPage.xml | 6 +- .../shipping/maintainPickTicketOrderPage.xml | 36 ++- .../origen/shipping/maintainTaskPage.xml | 7 +- 29 files changed, 557 insertions(+), 118 deletions(-) create mode 100644 src/test/yao/2025.sql create mode 100644 src/webapp/WEB-INF/classes/config/origen/base/editCallLOCGroupPage.xml create mode 100644 src/webapp/WEB-INF/classes/config/origen/base/maintainZonePlantLocationPage.xml diff --git a/src/main/java/com/dev/swms/server/model/inventory/AgvTask.java b/src/main/java/com/dev/swms/server/model/inventory/AgvTask.java index 4ffafdc..1ef1627 100644 --- a/src/main/java/com/dev/swms/server/model/inventory/AgvTask.java +++ b/src/main/java/com/dev/swms/server/model/inventory/AgvTask.java @@ -1,6 +1,7 @@ package com.dev.swms.server.model.inventory; import java.util.Date; +import java.util.List; import net.sf.json.JSONArray; @@ -661,4 +662,6 @@ public class AgvTask extends VersionalEntity { public String getTargetAreaCode(){ return this.targetArea.split(",")[0]; } + + } diff --git a/src/main/java/com/dev/swms/server/model/shipping/PickTicket.java b/src/main/java/com/dev/swms/server/model/shipping/PickTicket.java index b142f07..63ee200 100644 --- a/src/main/java/com/dev/swms/server/model/shipping/PickTicket.java +++ b/src/main/java/com/dev/swms/server/model/shipping/PickTicket.java @@ -90,7 +90,7 @@ public class PickTicket extends AbstractMoveDoc { private String logisticsCompany;//工作中心 private String type;//是否生成入库 private String collectNo;//预留号 - private String executePlanNo;// + private String executePlanNo;//工作站中心 private String lineName;//是否出WMS仓库 private Date dispatchDate;//回传日期 diff --git a/src/main/java/com/dev/swms/server/service/base/AgvTaskManager.java b/src/main/java/com/dev/swms/server/service/base/AgvTaskManager.java index 8d3de2d..e95d8f9 100644 --- a/src/main/java/com/dev/swms/server/service/base/AgvTaskManager.java +++ b/src/main/java/com/dev/swms/server/service/base/AgvTaskManager.java @@ -38,6 +38,9 @@ public interface AgvTaskManager extends BaseManager{ */ @Transactional void activateAgvTask(List ids); + //呼叫料箱、货架,按组下发任务 + @Transactional + void CallGroup(String stocks,Long id,boolean jsa,String remarks ); //呼叫料箱、货架 @Transactional void CallHJS(String stocks,Long id,boolean jsa,String remarks ); @@ -197,6 +200,17 @@ public interface AgvTaskManager extends BaseManager{ @Transactional AgvTask callLoc(String stockLP,Long id,Integer identification,Long jobPriorityType ,String classification,String founderName,String remarks); + /** + * AGV取料 + * @param stockLP + * @param id + * @param identification 1 =直接下发任务 + * @param jobPriorityType 1=优先执行 + * @param classification 呼叫/拣货/盘点 + */ + @Transactional + List callLocGroup(List stockLP,Long id,Integer identification,Long jobPriorityType + ,String classification,String founderName,String remarks); /** * AGV盘点 * @param stockLP 容器码 diff --git a/src/main/java/com/dev/swms/server/service/base/LocationManager.java b/src/main/java/com/dev/swms/server/service/base/LocationManager.java index f785eae..221fa31 100644 --- a/src/main/java/com/dev/swms/server/service/base/LocationManager.java +++ b/src/main/java/com/dev/swms/server/service/base/LocationManager.java @@ -15,7 +15,7 @@ import com.dev.swms.server.model.inventory.AgvTask; import com.dev.swms.server.model.inventory.Stock; import com.dev.energy.server.service.BaseManager; -@Transactional(readOnly = true) +@Transactional(readOnly = false) public interface LocationManager extends BaseManager { diff --git a/src/main/java/com/dev/swms/server/service/base/pojo/DefaultAgvTaskManager.java b/src/main/java/com/dev/swms/server/service/base/pojo/DefaultAgvTaskManager.java index 3e9775a..db934ee 100644 --- a/src/main/java/com/dev/swms/server/service/base/pojo/DefaultAgvTaskManager.java +++ b/src/main/java/com/dev/swms/server/service/base/pojo/DefaultAgvTaskManager.java @@ -836,7 +836,121 @@ public class DefaultAgvTaskManager extends DefaultBaseManager implements AgvTask } return null; } - + + @Override + public List callLocGroup(List stockLPs, Long id,Integer identification,Long jobPriorityType, + String classification,String founderName,String remarks) { + boolean flag = true; + List agvList=new ArrayList(); + LocationStorage ls = this.load(LocationStorage.class, id); + if (flag) { + for(String stockLP:stockLPs) { + AgvTask agvTask = EntityFactory.getEntity(AgvTask.class); + //是否有stockLP 到 ls的任务 + List agvTasks = commonDao.findByQuery(" from AgvTask agvTask " + "where agvTask.containerCode='" + + stockLP + "' and agvTask.status='" + STATUS.ATCALL + "' " + " and agvTask.type='AGV取料'" + + " and agvTask.targetArea like '%"+ls.getCode()+"%' and agvTask.classification='"+classification+"' " + ); + + if (agvTasks.size()>0) { + agvTask = agvTasks.get(0); + }else { + StringBuffer sbSql=new StringBuffer(); + sbSql.append(" from AgvTask agvTask " + "where agvTask.containerCode='" + + stockLP + "' and agvTask.status='" + STATUS.ATCALL + "' " + + " and agvTask.type='AGV取料' and agvTask.classification='"+classification+"' "); + if (ls.getCode().equals("214")||ls.getCode().equals("215")) { + sbSql.append(" and agvTask.targetArea = '%"+ls.getCode()+"%'"); + }else { + sbSql.append(" and agvTask.targetArea not like '%"+"214"+"%'"); + sbSql.append(" and agvTask.targetArea not like '%"+"215"+"%'"); + } + List agvTaskss = commonDao.findByQuery(sbSql.toString()); + if (agvTaskss.size() > 0) { + agvTask = agvTaskss.get(0); + if (agvTask.getTargetAreaCode().equals("214")||agvTask.getTargetAreaCode().equals("215")) { + sbSql.append(" and agvTask.targetArea = '%"+ls.getCode()+"%'"); + } + if (agvTask.getTargetArea() != null) { + if(agvTask.getTargetArea().indexOf(ls.getCode())==-1) { + agvTask.setTargetArea(agvTask.getTargetArea()+","+ls.getCode()); + } + } else { + agvTask.setTargetArea(ls.getCode().trim()); + } + } else { + agvTask.setRobotJobId(TimeNumberUtils.getBigTaskCode()); + agvTask.setSlotCode(ls.getOutLocation()); + agvTask.setWorkMode("WORKBIN_OUTBOUND"); + setContainerCode(stockLP, agvTask,ls);//指定接驳口,点位指定接驳口 + agvTask.setJobType("WORKBIN_MOVE"); + agvTask.setBeforePutConfirm(true); +// agvTask.setClassification("AGV取料"); + agvTask.setType("AGV取料"); + agvTask.setIdentification(identification);//1=下发,0=不下发 + agvTask.setClassification(classification);//业务类型 + agvTask.setTargetArea(ls.getCode()); + agvTask.setFounderName(founderName); + agvTask.setRemarks(remarks); + } + agvTask.setJobPriorityType(jobPriorityType); + if(jobPriorityType!=null&&jobPriorityType==1) { + agvTask.setJobPriority(999L); + } + agvTask.setTargetAreahistory(agvTask.getTargetArea()); + commonDao.store(agvTask); + if(agvTask.isBeIssue()==false) { + agvList.add(agvTask); + } + } + } + } + + if(agvList.size()>0) { + String result=""; + if (identification==1) {//直接下发 + // 取料AGV 任务下发 + result = interfaceReqManager.doWmsReqAgv(ApiURL.issueAGV, getStockAsnList(agvList)+ "", + agvList.get(0).getRobotJobId()+"任务组"); + } + String code=""; + JSONObject json=new JSONObject(); + String message=""; + try{ + json = JSONObject.fromObject(result); + code = json.has("code") ? json.getString("code") : ""; + message=json.has("message") ? json.getString("message") : ""; + }catch (Exception e) { + logger.info("AGV任务下发失败"); + } + //标记任务下发状态 + for(AgvTask agvTask:agvList) { + if (!code.equals("SUCCESS")) { + agvTask.setErrorMessage(message); + }else { + agvTask.setErrorMessage(null); + agvTask.setBeIssue(true); + agvTask.setDateTime1(new Date()); + } + commonDao.store(agvTask); + } + } + + + +// sendAgvTask(agvTask);// 下发RCS +// flag=interfaceReqManager.sendAgvTask(agvTask); + + + + + + + + + + return null; + } private void setContainerCode(String stockLP, AgvTask agvTask,LocationStorage ls) { agvTask.setContainerCode(stockLP); List stocks = commonDao.findByQuery(" from Stock where LP='"+stockLP+"'"); @@ -1322,7 +1436,7 @@ public class DefaultAgvTaskManager extends DefaultBaseManager implements AgvTask String classification,String founderName,String remarks) { synchronized ("callLocAndCallHJ") { AgvTask agv = null; - LocationStorage locationStorage = this.load(LocationStorage.class, id); + LocationStorage locationStorage = this.load(LocationStorage.class, id);//工作站 List agvTasktypes = commonDao.findByQuery("select agvTask.id from AgvTask agvTask " + " where agvTask.beIssue=true " + " and agvTask.classification not in ('"+classification+"') " @@ -1642,7 +1756,37 @@ public class DefaultAgvTaskManager extends DefaultBaseManager implements AgvTask } } } - + //按组下发任务 + public void CallGroup(String stocks,Long id,boolean jsa,String remarks) { + stocks=stocks.toUpperCase(); + String[] strings=stocks.split("\n"); + List stockList=new ArrayList(); + for (String string : strings) { + List stockss = commonDao.findByQuery(" from Stock s where s.LP='"+StringUtil.replace(string)+"'"); + + if (stockss.size()>0) { + List AGVTASK=commonDao.findByQuery("select id from AgvTask " + + " where containerCode='"+stockss.get(0).getLP()+"' " + + " and status in('ATCALL','ATWAIT','ATWORK','ATPICK','WAIT')"); + if(AGVTASK.size()>0) { + continue; + } + stockList.add(string);//容器 + + } + } + if(stockList.size()>0) { + if(jsa) { + //加急任务 + List agv=callLocGroup(stockList, id,1,1L,SlotType.callTaks,UserHolder.getUser().getName(),remarks); + }else { + //料箱 ,工作站 ,面 , 1=下发, 优先级 , 业务类型 + List agv=callLocGroup(stockList, id,1,0L,SlotType.callTaks,UserHolder.getUser().getName(),remarks); + + } + } + + } @Override public void agvStockJobPriorityType(List agvTaskIds) { // TODO 自动生成的方法存根 @@ -2202,4 +2346,61 @@ public class DefaultAgvTaskManager extends DefaultBaseManager implements AgvTask } } + /** + * agv上料 + * @param agvTask + * @return + */ + public JSONArray getStockAsnList(List agvTasks) { + JSONArray jsonArray=new JSONArray(); + for(AgvTask agvTask:agvTasks) { + JSONObject jsonObject=new JSONObject(); +// jsonObject.put("agvCode", agvTask.getAgvCode()); + jsonObject.put("agvEndPoint", agvTask.getAgvEndPoint()); + jsonObject.put("agvType", agvTask.getAgvType()); + if(agvTask.getJobPriorityType().equals("1")) { + jsonObject.put("jobPriority", 999); + }else { + jsonObject.put("jobPriority", agvTask.getJobPriority()); + } + jsonObject.put("jobPriorityType", agvTask.getJobPriorityType()); + jsonObject.put("letDownFlag", agvTask.getLetDownFlag()); + jsonObject.put("needOperation", agvTask.getNeedOperation()); + jsonObject.put("robotJobId", agvTask.getRobotJobId()); + jsonObject.put("robotJobGroupId", agvTask.getRobotJobGroupId()); + jsonObject.put("jobType", agvTask.getJobType()); + jsonObject.put("warehouseId", agvTask.getWarehouseId()); + jsonObject.put("jobId", agvTask.getJobId()); + jsonObject.put("msgId", agvTask.getMsgId()); +// jsonObject.put("complete", agvTask.getMsgId()); + jsonObject.put("complete", agvTask.isComplete()); + JSONObject jsonObject2=new JSONObject(); + jsonObject2.put("workMode", agvTask.getWorkMode()); + + jsonObject2.put("stationCode", agvTask.getStationCode()); + jsonObject2.put("startSlotCode", agvTask.getStartSlotCode()); + jsonObject2.put("containerCode", agvTask.getContainerCode()); + if(agvTask.getType()!=null&&agvTask.getType().equals("AGV上料")) { + jsonObject2.put("endSlotType", agvTask.getEndSlotType()); + //WORKBIN_INBOUND=入库 + if (!agvTask.getWorkMode().equals("WORKBIN_INBOUND")) { + jsonObject2.put("endSlotCode", agvTask.getEndSlotCode()); + } + } + jsonObject2.put("needReset", agvTask.isNeedReset()); + jsonObject2.put("autoOutbound", agvTask.isAutoOutbound()); + jsonObject2.put("beforePutConfirm", agvTask.isBeforePutConfirm()); + if (agvTask.getLayer().equals("")) { +// jsonObject2.put("layer", 2); + }else { + jsonObject2.put("layer", Integer.valueOf(agvTask.getLayer())); + } + jsonObject.put("jobData", jsonObject2); + jsonArray.add(jsonObject); + } + return jsonArray; + } + + + } \ No newline at end of file diff --git a/src/main/java/com/dev/swms/server/service/base/pojo/DefaultImportFileManager.java b/src/main/java/com/dev/swms/server/service/base/pojo/DefaultImportFileManager.java index 4fecaa3..c6a55e2 100644 --- a/src/main/java/com/dev/swms/server/service/base/pojo/DefaultImportFileManager.java +++ b/src/main/java/com/dev/swms/server/service/base/pojo/DefaultImportFileManager.java @@ -1062,8 +1062,8 @@ public class DefaultImportFileManager extends DefaultBaseManager implements Impo //料号 描述 包装数量 长(m) 宽(m) 高(m) 重量(KG) 包装类型 单位 中大物料标记 int j=0; String itemCode=sheet.getCell(j++,i).getContents().trim();//料号 -// String itemName=sheet.getCell(j++,i).getContents().trim();//描述 -// String unit=sheet.getCell(j++,i).getContents().trim();//单位 + String itemName=sheet.getCell(j++,i).getContents().trim();//描述 +// // String xlh=sheet.getCell(j++,i).getContents().trim();//是否许列号 // String bz=sheet.getCell(j++,i).getContents().trim();//保质期 // String dj=sheet.getCell(j++,i).getContents().trim();//单价 @@ -1071,8 +1071,10 @@ public class DefaultImportFileManager extends DefaultBaseManager implements Impo double l=Double.parseDouble(sheet.getCell(j++,i).getContents().trim());//长 double w=Double.parseDouble(sheet.getCell(j++,i).getContents().trim());//宽 double h=Double.parseDouble(sheet.getCell(j++,i).getContents().trim());//高 - double wv=Double.parseDouble(sheet.getCell(j++,i).getContents().trim());//重量 + double wv=Double.parseDouble(sheet.getCell(j++,i).getContents().trim());//规格重量 String s=sheet.getCell(j++,i).getContents().trim();//包装类型 + String unit=sheet.getCell(j++,i).getContents().trim();//单位 + String zoneName=sheet.getCell(j++,i).getContents().trim();//默认库区 // String bs=sheet.getCell(j++,i).getContents().trim();//中大件标识 List items=commonDao.findByQuery("from Item t where t.code=:code ", new String[]{"code"},new Object[]{itemCode}); @@ -1088,8 +1090,10 @@ public class DefaultImportFileManager extends DefaultBaseManager implements Impo // item.setCreatePeople(UserHolder.getUser().getName()); // item.setCreateDate(new Date()); } - /*item.setUnit(unit); - if(xlh!=null&&xlh.length()>0) { + if(unit!=null&&unit.length()>0) { + item.setUnit(unit); + } + /*if(xlh!=null&&xlh.length()>0) { item.setBeMarkWeight(true); } if(bz!=null&&bz.length()>0) { @@ -1106,48 +1110,65 @@ public class DefaultImportFileManager extends DefaultBaseManager implements Impo item.setUnit(unit); item.setGoodType(bs); */ - item.setCAcoefficient(bqty); - item.setPackNumber((int)bqty); + if(zoneName!=null&&zoneName.length()>0) { + List zoneList= commonDao.findByQuery(" from WarehouseArea w where w.name='"+zoneName+"' and w.disabled=false "); + if(zoneList.size()>0) { + item.setDefaultWarehouseArea(zoneList.get(0)); + } + } + if(bqty>0) { + item.setCAcoefficient(bqty); + item.setPackNumber((int)bqty); + } + if(wv>0&&bqty>0) { BigDecimal bg1 = new BigDecimal(wv); - double f2 = bg1.setScale(6, BigDecimal.ROUND_HALF_UP).doubleValue(); -// item.setWeight(f2);//规格重量 + double f2 = bg1.setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue(); + if(f2<0.001) { + f2=0.001; + } + item.setWeight(f2);//规格重量 BigDecimal bg5 = new BigDecimal(wv/bqty); - double f5 = bg5.setScale(6, BigDecimal.ROUND_HALF_UP).doubleValue(); -// item.setSuggest(f5);//毛重 - + double f5 = bg5.setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue(); + if(f5<0.001) { + f5=0.001; + } + item.setSuggest(f5);//毛重 + } + if(w>0&&l>0&&h>0) { BigDecimal bg3 = new BigDecimal(w); - item.setWidth(w/1000); double width = bg3.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); - if(width0.6||item.getWidth()>0.4) { + item.setGoodType("大件"); + }else { + item.setGoodType("小件"); + } + } commonDao.store(item); // wmsOperationHisManager.storeOperationHis(item.getId(),item.getName(), null,"", "物料信息", "导入货品信息",null, // null,0, 0,0, 0, "", "WMS"); diff --git a/src/main/java/com/dev/swms/server/service/base/pojo/DefaultItemManager.java b/src/main/java/com/dev/swms/server/service/base/pojo/DefaultItemManager.java index e1e65b2..25a8288 100644 --- a/src/main/java/com/dev/swms/server/service/base/pojo/DefaultItemManager.java +++ b/src/main/java/com/dev/swms/server/service/base/pojo/DefaultItemManager.java @@ -77,13 +77,14 @@ public class DefaultItemManager extends DefaultBaseManager implements if(!item.isNew()) { i=commonDao.load(Item.class, item.getId()); } + if(item.getWeight()<0.001) { + item.setWeight(0.001); + } if(item.getWeight()>0&&item.getPackNumber()>0) { i.setSuggest(item.getWeight()/item.getPackNumber()); }else { i.setSuggest(item.getWeight()); } - BigDecimal bg31 = new BigDecimal(i.getSuggest()); - i.setSuggest(bg31.setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue()); List invs=commonDao.findByQuery(" from Inventory i where i.itemKey.item.code='"+item.getCode()+"'"); if(invs.size()>0&&i!=null) { @@ -99,7 +100,7 @@ public class DefaultItemManager extends DefaultBaseManager implements }else { } - BigDecimal bg1 = new BigDecimal(item.getSuggest()); + BigDecimal bg1 = new BigDecimal(item.getSuggest());//毛重 double f2 = bg1.setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue(); if(f2<0.001){ i.setSuggest(0.001); @@ -108,18 +109,18 @@ public class DefaultItemManager extends DefaultBaseManager implements } BigDecimal bg2 = new BigDecimal(item.getLength()); double length = bg2.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); - if(length0) { - i.setVolume(a/i.getPackNumber()); - }else { - i.setVolume(a); - } +// if(i.getPackNumber()>0) { +// i.setVolume(a/i.getPackNumber()); +// }else { +// i.setVolume(a); +// } BigDecimal bg = new BigDecimal(i.getVolume()); double f1 = bg.setScale(6, BigDecimal.ROUND_HALF_UP).doubleValue(); - if(f1 list=new ArrayList(); - try{ - String hql=" select inv.location.id from Inventory inv where inv.quantity>0 " + + String hql=" select inv.location.id from Inventory inv where inv.quantity>0 " + + " and inv.location.type in('存货','不良品') and inv.location.status='FREE' " + " GROUP BY inv.location.id "; list=commonDao.findByQuery(hql); + String hql1=" select lc.id from Location lc where lc.status='OCCUPY' " + + " and lc.id not in(select inv.location.id from Inventory inv where inv.quantity>0)" + + " GROUP BY lc.id "; + list.addAll(commonDao.findByQuery(hql1)); if(list.size()>0) { -// kuwei(list); for(Long id:list) { kuwei(id); } } - }catch (Exception e) { - - } - -// List list=new ArrayList(); -// String hql=" select l.id from Location l where l.status='OCCUPY' "; -// list=commonDao.findByQuery(hql); -// if(list.size()>0) { -// kuwei(list); -// } logger.info("刷新库满度完成"); } @@ -1438,10 +1432,12 @@ public class DefaultLocationManager extends DefaultBaseManager implements quant=quant+inventory2.getQuantity(); ItemKey itemKey=commonDao.load(ItemKey.class, inventory2.getItemKey().getId()); Item item=commonDao.load(Item.class, itemKey.getItem().getId()); + if(loc.getDimension()>0&&item.getPackNumber()>0) { b+=((item.getLength()*item.getWidth())/item.getPackNumber()*inventory2.getQuantity())*1.2;//物料的长×宽÷规格数×库存数×1.2=物料库存的面积 sum2+=((item.getLength()*item.getWidth())/item.getPackNumber()*inventory2.getQuantity())*1.2/loc.getDimension()*100;//物料的长×宽÷规格数×库存数×1.2÷库位的体积=库满度 BigDecimal bg3 = new BigDecimal(sum2); mianji = bg3.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + } } String bbb=String.valueOf(mianji);//库满度 if(b>loc.getDimension()){//如果物料库存的面积大于这个库位的面积 @@ -1543,8 +1539,9 @@ public class DefaultLocationManager extends DefaultBaseManager implements null,0, 0,0, 0, "", "WMS"); } } catch (Exception e) { - wmsOperationHisManager.storeOperationHis(loc.getId(),loc.getCode(), null,"", "库位信息", "库满度刷新",null, - null,0, 0,0, 0, e.getMessage().substring(0,255), "WMS"); + logger.info(e.getMessage()); +// wmsOperationHisManager.storeOperationHis(loc.getId(),loc.getCode(), null,"", "库位信息", "库满度刷新",null, +// null,0, 0,0, 0, e.getMessage().substring(0,255), "WMS"); } } diff --git a/src/main/java/com/dev/swms/server/service/count/pojo/DefaultCountPlanManager.java b/src/main/java/com/dev/swms/server/service/count/pojo/DefaultCountPlanManager.java index eb642eb..0b78dad 100644 --- a/src/main/java/com/dev/swms/server/service/count/pojo/DefaultCountPlanManager.java +++ b/src/main/java/com/dev/swms/server/service/count/pojo/DefaultCountPlanManager.java @@ -1800,9 +1800,9 @@ public class DefaultCountPlanManager extends DefaultBaseManager implements // List yfrg=commonDao.findByQuery(" from CountRecord c where c.location.zone.id=1815 " // +" and c.countPlan.id="+countPlanId+" order by c.location.code"); - List yfrg=quserCountPlanTask(1815L, countPlanId);//2#3研发人工区 + List yfrg=quserCountPlanTask(1815L, countPlanId);//2#2研发人工区 if(yfrg.size()>0&&w38==0) { - throw new BusinessException("2#3研发人工区有盘点任务,必须勾选"); + throw new BusinessException("2#2研发人工区有盘点任务,必须勾选"); } List yfgk=quserCountPlanTask(1816L, countPlanId);//2#3研发人工库 if(yfgk.size()>0&&w39==0) { diff --git a/src/main/java/com/dev/swms/server/service/interfaceLog/pojo/DefaultInterfaceRespManager.java b/src/main/java/com/dev/swms/server/service/interfaceLog/pojo/DefaultInterfaceRespManager.java index f2a44be..2792231 100644 --- a/src/main/java/com/dev/swms/server/service/interfaceLog/pojo/DefaultInterfaceRespManager.java +++ b/src/main/java/com/dev/swms/server/service/interfaceLog/pojo/DefaultInterfaceRespManager.java @@ -572,7 +572,7 @@ public class DefaultInterfaceRespManager extends DefaultBaseManager implements I pTicket.setSourceId(strBill1); pTicket.setWorkerName1(WERKS);//工厂 pTicket.setDeliveryMode(ZREV);//receiver - + pTicket.setExecutePlanNo(CY_SEQNR);//机台号 commonDao.store(pTicket); ptid=pTicket.getId(); PickTicketDetail ptd =null; @@ -2782,9 +2782,10 @@ public class DefaultInterfaceRespManager extends DefaultBaseManager implements I +" left join ITEM_KEY ik on inv.ITEM_KEY_ID=ik.ID " +" left join ITEM i on ik.ITEM_ID=i.ID " +" left join LOCATION loc on inv.LOCATION_ID=loc.ID " + +" left join ZONE z on z.id=loc.ZONE_ID " +" where 1=1 and loc.id not in(88242) and i.Be_SAP_Item=1 " + " and inv.status in('待上架','已入库','冻结','整理中') " - + " and inv.quantity<>0 "); + + " and inv.quantity<>0 and z.CARRIER_TYPE_ID in(3,5) "); if (MATNR!=null&&MATNR.length()>0) { sb.append(" and i.code='"+MATNR+"'"); } @@ -3022,7 +3023,9 @@ public class DefaultInterfaceRespManager extends DefaultBaseManager implements I +" left join ITEM_KEY ik on inv.ITEM_KEY_ID=ik.ID " +" left join ITEM i on ik.ITEM_ID=i.ID " +" left join LOCATION loc on inv.LOCATION_ID=loc.ID " - +" where 1=1 and loc.id not in(88242,88241) and inv.MASTER_PACK_QUANTITY>0 and inv.status='已入库' "); + +" left join ZONE z on z.id=loc.ZONE_ID " + +" where 1=1 and loc.id not in(88242,88241) and z.CARRIER_TYPE_ID in(3,5) and " + + " inv.MASTER_PACK_QUANTITY>0 and inv.status='已入库' "); sb.append(" and i.FEE_TYPE='OA' and i.Be_SAP_Item=0"); if (company!=null&&company.length()>0) { sb.append(" and ik.PROP_C9='"+company+"'"); diff --git a/src/main/java/com/dev/swms/server/service/interfaceLog/pojo/DefaultQueryAppManager.java b/src/main/java/com/dev/swms/server/service/interfaceLog/pojo/DefaultQueryAppManager.java index 369b4a7..6be9b2d 100644 --- a/src/main/java/com/dev/swms/server/service/interfaceLog/pojo/DefaultQueryAppManager.java +++ b/src/main/java/com/dev/swms/server/service/interfaceLog/pojo/DefaultQueryAppManager.java @@ -142,6 +142,7 @@ public class DefaultQueryAppManager extends DefaultBaseManager implements QueryA String data = ""; String h = ""; String locFloor=""; + String zoneCode="";//推荐库区 String str1=asn_code;//扫描的凭证号 Session session = ((HibernateDaoSupport) this.commonDao).getSessionFactory().openSession(); try { @@ -177,8 +178,10 @@ public class DefaultQueryAppManager extends DefaultBaseManager implements QueryA + " case when ad.ftl_qty>0 then ad.ftl_qty-ad.RECEIVED_QUANTITY else ad.EXPECTED_QUANTITY-ad.RECEIVED_QUANTITY end as orderQuantity," + "ad.RECEIVED_QUANTITY as expectedQuantity, ad.strBill8,ad.PROP_C5 as propC5," +" ad.PROP_C2 as propC2,ad.PROP_C1 as propC1,PROP_C3 as propC3,ad.strBill2,item.UNIT as unit," - + "item.ISBOM,z.id as z_id,item.volume,item.BE_MARK_WEIGHT as beMarkWeight,item.FEE_TYPE," - + " item.be_Extend1,item.be_Extend2,asn.BILL_TYPE_ID,ad.strBill11,ad.bf_qty " + + "item.ISBOM," + + "(case when item.default_Warehouse_Area_ID is not NULL then item.default_Warehouse_Area_ID ELSE z.id END) as z_id," + + "item.volume,item.BE_MARK_WEIGHT as beMarkWeight,item.FEE_TYPE," + + " item.be_Extend1,item.be_Extend2,asn.BILL_TYPE_ID,ad.strBill11,ad.bf_qty ,z.name as z_name " + " from ASN_DETAIL ad " + " left join ASN asn on asn.id=ad.ASN_ID " + " left join ITEM item on item.id=ad.ITEM_ID " @@ -321,6 +324,7 @@ public class DefaultQueryAppManager extends DefaultBaseManager implements QueryA return resultJson; } } + zoneCode= arrier[23]==null?"":arrier[23].toString();//库区 array.add(obj); } data = array.toString(); @@ -365,6 +369,7 @@ public class DefaultQueryAppManager extends DefaultBaseManager implements QueryA resultJson.put("data", data); resultJson.put("msg", msg); resultJson.put("h", h); + resultJson.put("zoneCode", zoneCode); resultJson.put("locFloor", locFloor); return resultJson; } diff --git a/src/main/java/com/dev/swms/server/service/receiving/pojo/DefaultASNManager.java b/src/main/java/com/dev/swms/server/service/receiving/pojo/DefaultASNManager.java index b6c0cc7..6b8cff1 100644 --- a/src/main/java/com/dev/swms/server/service/receiving/pojo/DefaultASNManager.java +++ b/src/main/java/com/dev/swms/server/service/receiving/pojo/DefaultASNManager.java @@ -66,6 +66,7 @@ import com.dev.swms.server.model.base.Warehouse; import com.dev.swms.server.model.base.WarehouseArea; import com.dev.swms.server.model.base.WarehouseAreaStatus; import com.dev.swms.server.model.base.Worker; +import com.dev.swms.server.model.delivery.ZonePlant; import com.dev.swms.server.model.interfaceLog.InterfaceLog; import com.dev.swms.server.model.interfaces.InterfaceWmsDownload; import com.dev.swms.server.model.inventory.AgvTask; @@ -2327,7 +2328,7 @@ public void addASNDetail(Long id,ASNDetail asnDetail) { @Override public void receiveGoods(List asnDetailIds, Date receiveDate1, - Long workerId,long dock_id,Long ls_id,double receivedQuantity,long stockId, + Long workerId,long dock_id,Long zone_id,double receivedQuantity,long stockId, Long pqty,String mac,String statusDes,boolean agv) throws Exception{ for(Long id:asnDetailIds){//循环整理(收货) ASNDetail asnDetail=this.load(ASNDetail.class, id);//根据整理的这条数据获取它所有的明细 @@ -2337,14 +2338,27 @@ public void addASNDetail(Long id,ASNDetail asnDetail) { } BillType bt=commonDao.load(BillType.class, asn.getBillType().getId()); Item item=this.load(Item.class, asnDetail.getItem().getId());//货品 - WarehouseArea warehouseArea =commonDao.load(WarehouseArea.class, ls_id);//库区 + WarehouseArea warehouseArea =commonDao.load(WarehouseArea.class, zone_id);//库区 + if(warehouseArea!=null) { + //库区限制LOC, + if(asnDetail.getLotInfo()!=null&&asnDetail.getLotInfo().getPropC2()!=null) { + String pr2=asnDetail.getLotInfo().getPropC2(); + String wahql=" from ZonePlant z where z.area.id="+zone_id ; + List zplist=commonDao.findByQuery(wahql); + for(ZonePlant zp:zplist) { + if(zp.getpLocation().getCode().equals(pr2)) { + throw new BusinessException(pr2+"不能整理到"+warehouseArea.getName()); + } + } + } + } Stock stock=commonDao.load(Stock.class, stockId); Location location=null; location=this.load(Location.class, dock_id);//库位 if(warehouseArea==null&&location==null) { throw new BusinessException("库区和库位不能都为空"); } - if(ls_id.intValue()==1763&&dock_id==0) { + if(zone_id.intValue()==1763&&dock_id==0) { throw new BusinessException("料箱区,必须扫描料箱格口码"); } if(stock==null&&location!=null) { @@ -2405,7 +2419,7 @@ public void addASNDetail(Long id,ASNDetail asnDetail) { } } //判断该容器已有其它库区物料 - int count=queryConWare(stockId, ls_id); + int count=queryConWare(stockId, zone_id); if(count==1){ throw new BusinessException("该容器已有其它库区物料!"); } diff --git a/src/main/java/com/dev/swms/server/service/receiving/pojo/DefaultMoveDocManager.java b/src/main/java/com/dev/swms/server/service/receiving/pojo/DefaultMoveDocManager.java index e7cdaac..ca16eb3 100644 --- a/src/main/java/com/dev/swms/server/service/receiving/pojo/DefaultMoveDocManager.java +++ b/src/main/java/com/dev/swms/server/service/receiving/pojo/DefaultMoveDocManager.java @@ -44,6 +44,7 @@ import com.dev.swms.server.model.base.WarehouseArea; import com.dev.swms.server.model.base.WarehouseAreaStatus; import com.dev.swms.server.model.base.Worker; import com.dev.swms.server.model.delivery.PlantLocation; +import com.dev.swms.server.model.delivery.ZonePlant; import com.dev.swms.server.model.interfaceLog.InterfaceLog; import com.dev.swms.server.model.inventory.Configuration; import com.dev.swms.server.model.inventory.Inventory; @@ -1107,7 +1108,7 @@ public class DefaultMoveDocManager extends DefaultBaseManager implements MoveDoc public void manualMoveDetail(MoveDocDetail detail, Long userId, Double caseQty, Double puQty, Stock srcLp) { Location deslocation = this.commonDao.load(Location.class, detail.getDstLoc().getId()); Location srclocation = this.commonDao.load(Location.class, detail.getSrcLoc().getId()); - + WarehouseArea wa=commonDao.load(WarehouseArea.class, deslocation.getZone().getId()); if (deslocation.getCountLock() != null && !deslocation.getCountLock().equals("")) { throw new BusinessException("该库位正在盘点,不能上架"); } @@ -1116,6 +1117,19 @@ public class DefaultMoveDocManager extends DefaultBaseManager implements MoveDoc Item item = this.commonDao.load(Item.class, detail.getItem().getId()); ItemKey itemKey = this.commonDao.load(ItemKey.class, detail.getItemKey().getId()); Worker worker = commonDao.load(Worker.class, userId); + if(wa!=null) { + //库区限制LOC, + if(itemKey.getLotInfo()!=null&&itemKey.getLotInfo().getPropC2()!=null) { + String pr2=itemKey.getLotInfo().getPropC2(); + String wahql=" from ZonePlant z where z.area.id="+wa.getId() ; + List zplist=commonDao.findByQuery(wahql); + for(ZonePlant zp:zplist) { + if(zp.getpLocation().getCode().equals(pr2)) { + throw new BusinessException(pr2+"不能上架到"+wa.getName()); + } + } + } + } if (!(MoveDocStatus.CANCEL.equals(detail.getMoveDoc().getStatus()) || MoveDocStatus.CLOSE.equals(detail .getMoveDoc().getStatus()))) { Double moveQuantity = 0d; @@ -2288,6 +2302,8 @@ public class DefaultMoveDocManager extends DefaultBaseManager implements MoveDoc srcInv.setStatuss("T"); } commonDao.store(srcInv); + locst.setStatus(WarehouseAreaStatus.OCCUPY); + commonDao.store(locst); } } @@ -2526,11 +2542,11 @@ public class DefaultMoveDocManager extends DefaultBaseManager implements MoveDoc String px_sql = " order by l.gdType asc "; //库位高度 if (st.getGdType().equals(TranType.gd_d)) { - sql += " and 1=1 and l.gdType=1 "; + sql += " and 1=1 and l.gdType in('1','2') "; } else if (st.getGdType().equals(TranType.gd_z)) { - sql += " and l.gdType =2 "; + sql += " and l.gdType !='1' "; } else if (st.getGdType().equals(TranType.gd_g)) { - sql += " and l.gdType =3 "; + sql += " and l.gdType ='3' "; } // sql += " and l.name in ('01-02-01','02-02-01','03-02-01','04-02-01') "; if (st.getLocationStorage()!=null) { @@ -2580,7 +2596,7 @@ public class DefaultMoveDocManager extends DefaultBaseManager implements MoveDoc // ls = this.commonDao.findByQuery(hql1 + px_sql); // } - if (ls.size() <= 8) { + if (ls.size() <= 10) { throw new BusinessException("无合适的存放位"); } else { return ls.get(0); @@ -2665,6 +2681,9 @@ public class DefaultMoveDocManager extends DefaultBaseManager implements MoveDoc List inventories = commonDao.findByQuery(" from Inventory inv where inv.location.code='"+t.getBarcode()+"'"); if (inventories.size()>0) { Inventory inventory=inventories.get(0); + Location lc=commonDao.load(Location.class, inventory.getLocation().getId()); + lc.setStatus(WarehouseAreaStatus.FREE); + commonDao.store(lc); this.commonDao.delete(inventory); } flag=false; @@ -3575,8 +3594,6 @@ public class DefaultMoveDocManager extends DefaultBaseManager implements MoveDoc inv = new Inventory();// EntityFactory.getEntity(Inventory.class); inv.setLocation(location); inv.setItemKey(itemKey); - location.setCurrentItem(item.getId()); - location.setCurrentLot(itemKey.getId()); inv.setCaCoefficient(1D); inv.setLP(st); // inv.setStatus("待上架"); @@ -4187,7 +4204,7 @@ public class DefaultMoveDocManager extends DefaultBaseManager implements MoveDoc // ls = this.commonDao.findByQuery(hql1 + px_sql); // } - if (ls.size() <= 4) { + if (ls.size() <= 5) { throw new BusinessException("不存在合适的库位"); } else { return ls.get(0); diff --git a/src/main/java/com/dev/swms/server/service/shipping/pojo/DefaultPickTicketManager.java b/src/main/java/com/dev/swms/server/service/shipping/pojo/DefaultPickTicketManager.java index a967e4f..ffbb480 100644 --- a/src/main/java/com/dev/swms/server/service/shipping/pojo/DefaultPickTicketManager.java +++ b/src/main/java/com/dev/swms/server/service/shipping/pojo/DefaultPickTicketManager.java @@ -473,7 +473,9 @@ public class DefaultPickTicketManager extends DefaultBaseManager implements Pick if ((pickTicket.getAllocatedQuantity() > 0 || pickTicket.getAllocatedQuantity() == pickTicket.getOrderQuantity() && pickTicket.getPickedQuantity() == 0 && pickTicket.getShippedQuantity() == 0) || pickTicket.getOrderQuantity() == pickTicket.getAllocatedQuantity()) { - pickTicket.setStatus(PickTicketStatus.ALLOCATE); + if(!pickTicket.getStatus().equals(PickTicketStatus.CHECK)) { + pickTicket.setStatus(PickTicketStatus.ALLOCATE); + } } if (pickTicket.getPickedQuantity() < pickTicket.getAllocatedQuantity() && pickTicket.getPickedQuantity() > 0) { pickTicket.setStatus(PickTicketStatus.PICKUP); @@ -2818,6 +2820,20 @@ public class DefaultPickTicketManager extends DefaultBaseManager implements Pick for (Map.Entry me : itor) { Inventory inventory = this.load(Inventory.class, Long.parseLong(me.getKey().toString())); + String ptd_loc=ptd.getNewLotInfo().getPropC2(); + String inv_loc=inventory.getItemKey().getLotInfo().getPropC2(); + String ptd_plan=ptd.getNewLotInfo().getPropC9(); + String inv_plan=inventory.getItemKey().getLotInfo().getPropC9(); + if(ptd_loc!=null&&ptd_loc.length()>0) { + if(inv_loc!=null&&!inv_loc.equals(ptd_loc)) { + throw new BusinessException("需要分配库存地"+ptd_loc+"的库存"); + } + } + if(ptd_plan!=null&&ptd_plan.length()>0) { + if(inv_plan!=null&&!inv_plan.equals(ptd_plan)) { + throw new BusinessException("需要分配工厂"+ptd_plan+"的库存"); + } + } double quantity = Double.parseDouble(me.getValue().get(0).toString()); double unallocateQty = ptd.getOrderQuantity() - ptd.getAllocatedQuantity(); if (unallocateQty == 0) { @@ -4344,7 +4360,7 @@ public class DefaultPickTicketManager extends DefaultBaseManager implements Pick if (wa!=null&&(wa.getLevels()==0||!wa.isBeBill())) { task.setInventoryStatus("合单完成"); } - if(!bt.isBePresentation()) { + if(!bt.isBePresentation()&&wa.getCarrierType().getId()==3) { task.setInventoryStatus("交单完成"); } if(beUnpacking!=null&&beUnpacking.length()>0) { diff --git a/src/main/java/com/dev/swms/server/web/servlet/ASNReceiveServlet.java b/src/main/java/com/dev/swms/server/web/servlet/ASNReceiveServlet.java index e9027b4..0d41426 100644 --- a/src/main/java/com/dev/swms/server/web/servlet/ASNReceiveServlet.java +++ b/src/main/java/com/dev/swms/server/web/servlet/ASNReceiveServlet.java @@ -849,7 +849,7 @@ public class ASNReceiveServlet extends HttpServlet { try { if (userId > 0) { if (warehouseId > 0) { - if(specs<=0||weight<=0||length<=0||width<=0||weight<=0||height<=0) { + if(specs<=0||weight<=0||length<=0||width<=0||height<=0) { status = "2"; msg = "规格、长宽高、重量需大于0!"; }else { @@ -866,18 +866,18 @@ public class ASNReceiveServlet extends HttpServlet { } BigDecimal bg2 = new BigDecimal(length/100); double length1 = bg2.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); - if(length ads=commonDao.findByQuery(" from ASNDetail ad where ad.asn.id="+ad.getAsn().getId()+" and ad.item.id="+ad.getItem().getId()); diff --git a/src/main/java/com/dev/swms/server/web/servlet/export/impl/XLSExportGenerator.java b/src/main/java/com/dev/swms/server/web/servlet/export/impl/XLSExportGenerator.java index 6499560..dd54419 100644 --- a/src/main/java/com/dev/swms/server/web/servlet/export/impl/XLSExportGenerator.java +++ b/src/main/java/com/dev/swms/server/web/servlet/export/impl/XLSExportGenerator.java @@ -139,12 +139,11 @@ public class XLSExportGenerator implements ExportExcelGenerator, ApplicationCont if(data.indexOf(",")>-1){ data="\""+data.replace("\"", "\"\"")+"\""; } - data=data.replaceAll("\r\n", "")+"\t"; + data=data.replaceAll("\r\n", "")+""; } } else { data=""; } - } return data; diff --git a/src/test/yao/2025.sql b/src/test/yao/2025.sql new file mode 100644 index 0000000..8a0e923 --- /dev/null +++ b/src/test/yao/2025.sql @@ -0,0 +1,13 @@ +---------------2025-03-14 +CREATE TABLE [dbo].[ZONE_PLANT] ( + [ID] numeric(19) IDENTITY(1,1) NOT NULL, + [ZONE_ID] int NULL, + [PLANE_LOCATION_ID] int NULL, + CONSTRAINT [PK__zone_pla__3213E83FEFD8CD6E] PRIMARY KEY CLUSTERED ([ID]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +) +ON [PRIMARY] +GO + +ALTER TABLE [dbo].[ZONE_PLANT] SET (LOCK_ESCALATION = TABLE) \ No newline at end of file diff --git a/src/webapp/WEB-INF/classes/config/origen/base/editCallLOCGroupPage.xml b/src/webapp/WEB-INF/classes/config/origen/base/editCallLOCGroupPage.xml new file mode 100644 index 0000000..628ce0f --- /dev/null +++ b/src/webapp/WEB-INF/classes/config/origen/base/editCallLOCGroupPage.xml @@ -0,0 +1,54 @@ + + + + + + +