Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/vo/WaitPackingTaskVoGroupClassifyBasket.java =================================================================== diff -u --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/vo/WaitPackingTaskVoGroupClassifyBasket.java (revision 0) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/vo/WaitPackingTaskVoGroupClassifyBasket.java (revision 40694) @@ -0,0 +1,228 @@ +package com.forgon.disinfectsystem.packing.vo; + +import java.util.ArrayList; +import java.util.List; + +/** + * 装配任务列表vo + * DSKQYY-7 enableGroupPendingAssemblyTasksByBasket为true时 使用的数据结构 不开启则使用WaitPackingTaskVo + * @author zc.li + * + */ +public class WaitPackingTaskVoGroupClassifyBasket { + /** + * 篮筐实例id + */ + private Long classifyBasketId; + /** + * 容器条码 + */ + private String containerBarcode; + /** + * 容器id + */ + private Long containerId; + /** + * 篮筐名称 + */ + private String containerName; + /** + * 文件夹名称 变量名和原有不变 + */ + private String text; + /** + * 装配任务数量 + */ + private Integer amount; + /** + * 加急数量 + */ + private Integer urgentAmount; + /** + * 标识牌条码 + * 该属性只适用于一个标识牌实例绑定一个篮筐的时候 + * 整包清洗的标识牌数量1,拆包清洗的忽略此属性,放入一个篮筐时,该篮筐不能放其他东西,该属性才有值 + * 装配时扫描出该装配任务选中后(在没有丢失的情况下),直接把标识牌条码带出来,不用再扫标识牌条码 + */ + private String idCardBarcode; + /** + * 是否有申请备注 + */ + private boolean haveRemarkOfApplyGoods; + /** + * 是否超时。children中有一个超时,则认为已经超时 + */ + private boolean isTimeout; + /** + * 前端需要的 + */ + private String cls = "no-leaf-icons"; + /** + * 最大的预计使用时间 + */ + private String lastExpectUseTime = ""; + /** + * 最大的超时时间 + */ + private Long timeoutDuration = 0L; + + //补充器械 + private boolean replenishMaterils = false; + + private String colorCode; + + private String urgentLevel; + + private Integer grade; + + /** + * 装配任务 + */ + private List children = new ArrayList(); + + public Long getClassifyBasketId() { + return classifyBasketId; + } + + public void setClassifyBasketId(Long classifyBasketId) { + this.classifyBasketId = classifyBasketId; + } + + public String getContainerBarcode() { + return containerBarcode; + } + + public void setContainerBarcode(String containerBarcode) { + this.containerBarcode = containerBarcode; + } + + public Long getContainerId() { + return containerId; + } + + public void setContainerId(Long containerId) { + this.containerId = containerId; + } + + public String getContainerName() { + return containerName; + } + + public void setContainerName(String containerName) { + this.containerName = containerName; + } + + public Integer getAmount() { + return amount; + } + + public void setAmount(Integer amount) { + this.amount = amount; + } + + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public Integer getUrgentAmount() { + return urgentAmount; + } + + public void setUrgentAmount(Integer urgentAmount) { + this.urgentAmount = urgentAmount; + } + + public String getIdCardBarcode() { + return idCardBarcode; + } + + public void setIdCardBarcode(String idCardBarcode) { + this.idCardBarcode = idCardBarcode; + } + + public List getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } + + public boolean getHaveRemarkOfApplyGoods() { + return haveRemarkOfApplyGoods; + } + + public void setHaveRemarkOfApplyGoods(boolean haveRemarkOfApplyGoods) { + this.haveRemarkOfApplyGoods = haveRemarkOfApplyGoods; + } + + public boolean getIsTimeout() { + return isTimeout; + } + + public void setIsTimeout(boolean isTimeout) { + this.isTimeout = isTimeout; + } + + public String getCls() { + return cls; + } + + public void setCls(String cls) { + this.cls = cls; + } + + public String getLastExpectUseTime() { + return lastExpectUseTime; + } + + public void setLastExpectUseTime(String lastExpectUseTime) { + this.lastExpectUseTime = lastExpectUseTime; + } + + public Long getTimeoutDuration() { + return timeoutDuration; + } + + public void setTimeoutDuration(Long timeoutDuration) { + this.timeoutDuration = timeoutDuration; + } + + public boolean getReplenishMaterils() { + return replenishMaterils; + } + + public void setReplenishMaterils(boolean replenishMaterils) { + this.replenishMaterils = replenishMaterils; + } + + public String getColorCode() { + return colorCode; + } + + public void setColorCode(String colorCode) { + this.colorCode = colorCode; + } + + public String getUrgentLevel() { + return urgentLevel; + } + + public void setUrgentLevel(String urgentLevel) { + this.urgentLevel = urgentLevel; + } + + public Integer getGrade() { + return grade; + } + + public void setGrade(Integer grade) { + this.grade = grade; + } + +} Index: ssts-web/src/test/java/test/forgon/disinfectsystem/synthetic/allrecycle/service/PackingModule.java =================================================================== diff -u -r33916 -r40694 --- ssts-web/src/test/java/test/forgon/disinfectsystem/synthetic/allrecycle/service/PackingModule.java (.../PackingModule.java) (revision 33916) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/synthetic/allrecycle/service/PackingModule.java (.../PackingModule.java) (revision 40694) @@ -56,7 +56,7 @@ if(CollectionUtils.isNotEmpty(taskGroups)){ List taskIds = new ArrayList<>(); for(TaskGroup tg : taskGroups){ - List vos = packingManager.getWaitPackingTaskTaskVoList(tg.getTaskGroupName(), null,null,null, null, null); + List vos = packingManager.getWaitPackingTaskTaskVoList(tg.getTaskGroupName(), null,null,null, null, null, null); if(CollectionUtils.isNotEmpty(vos)){ for(WaitPackingTaskVo taskVo : vos){ if(CollectionUtils.isNotEmpty(taskVo.getChildren())){ Index: ssts-web/src/test/java/test/forgon/disinfectsystem/packing/service/PackingManagerForGetWaitPackingTaskJsonTests.java =================================================================== diff -u --- ssts-web/src/test/java/test/forgon/disinfectsystem/packing/service/PackingManagerForGetWaitPackingTaskJsonTests.java (revision 0) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/packing/service/PackingManagerForGetWaitPackingTaskJsonTests.java (revision 40694) @@ -0,0 +1,96 @@ +package test.forgon.disinfectsystem.packing.service; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import net.sf.json.JSONObject; +import test.forgon.constant.Constants; +import org.junit.Test; +import com.forgon.disinfectsystem.entity.basedatamanager.container.Container; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; +import com.forgon.disinfectsystem.entity.becleanitem.ClassifyBasket; +import com.forgon.disinfectsystem.packing.vo.WaitPackingTaskItemVo; +import com.forgon.disinfectsystem.packing.vo.WaitPackingTaskVo; +import com.forgon.disinfectsystem.packing.vo.WaitPackingTaskVoGroupClassifyBasket; + +import test.forgon.disinfectsystem.AbstractCSSDTest; +/** + * 加载装配任务 + * @author zc.li + * + */ +public class PackingManagerForGetWaitPackingTaskJsonTests extends AbstractCSSDTest { + Integer pageIndex = 1; + Integer pageSize = 20; + String basketBarcodes = ""; + String settleAccountsDepartCoding = Constants.ORG_UNIT_CODE_NEIKE; + JSONObject returnObj = new JSONObject(); + /** + * 测试 + */ + @Test + public void getWaitPackingTaskJsonTest1(){ + initCSSDData(); + TousseDefinition td = NewPackingTaskCommon.saveTousseDefinition(objectDao, "包1", TousseDefinition.PACKAGE_TYPE_INSIDE); + NewPackingTaskCommon.newCssdHandleTousses(objectDao, td, Constants.TASKGROUP_CHANGGUZU); + Container container清洗筐116 = containerManager.getContainer("清洗筐116"); + Container container清洗筐117 = containerManager.getContainer("清洗筐117"); + int taskType = 1; + ClassifyBasket classifyBasket清洗筐116 = NewPackingTaskCommon.newClassifyBasket(objectDao,container清洗筐116); + NewPackingTaskCommon.newPackingTask(objectDao, td, classifyBasket清洗筐116, null, taskType, container清洗筐116, Constants.ORG_UNIT_CODE_NEIKE); + + + ClassifyBasket classifyBasket清洗筐117 = NewPackingTaskCommon.newClassifyBasket(objectDao, container清洗筐117); + NewPackingTaskCommon.newPackingTask(objectDao, td, classifyBasket清洗筐117, null, taskType, container清洗筐117, Constants.ORG_UNIT_CODE_NEIKE); + String tousseOrDepart = null; + List waitPackingTaskVos = packingManager.getWaitPackingTaskTaskVoList(null, Constants.TASKGROUP_CHANGGUZU, basketBarcodes, returnObj, tousseOrDepart, pageIndex, pageSize, null, false, null); + + assertNotNull("有装配任务",waitPackingTaskVos); + + assertEquals("装配任务只有一种包", 1 , waitPackingTaskVos.size()); + WaitPackingTaskVo waitPackingTaskVo = waitPackingTaskVos.get(0); + List waitPackingTaskItemVos = waitPackingTaskVo.getChildren(); + assertNotNull("有装配任务", waitPackingTaskItemVos); + assertEquals("装配任务有2个", 2, waitPackingTaskItemVos.size()); + } + @Test + public void getWaitPackingTaskJsonTest2(){ + initCSSDData(); + TousseDefinition td = NewPackingTaskCommon.saveTousseDefinition(objectDao, "包1", TousseDefinition.PACKAGE_TYPE_INSIDE); + NewPackingTaskCommon.newCssdHandleTousses(objectDao, td, Constants.TASKGROUP_CHANGGUZU); + Container container清洗筐116 = containerManager.getContainer("清洗筐116"); + Container container清洗筐117 = containerManager.getContainer("清洗筐117"); + int taskType = 1; + ClassifyBasket classifyBasket清洗筐116 = NewPackingTaskCommon.newClassifyBasket(objectDao, container清洗筐116); + NewPackingTaskCommon.newPackingTask(objectDao, td, classifyBasket清洗筐116, null, taskType, container清洗筐116, Constants.ORG_UNIT_CODE_NEIKE); + + + ClassifyBasket classifyBasket清洗筐117 = NewPackingTaskCommon.newClassifyBasket(objectDao, container清洗筐117); + NewPackingTaskCommon.newPackingTask(objectDao, td, classifyBasket清洗筐117, null, taskType, container清洗筐117, Constants.ORG_UNIT_CODE_NEIKE); + String tousseOrDepart = null; + List waitPackingTaskVoGroupClassifyBaskets = new ArrayList(); + packingManager.getWaitPackingTaskTaskVoList(null, Constants.TASKGROUP_CHANGGUZU, basketBarcodes, returnObj, tousseOrDepart, pageIndex, pageSize, waitPackingTaskVoGroupClassifyBaskets, true, null); + + assertNotNull("有装配任务",waitPackingTaskVoGroupClassifyBaskets); + assertEquals("装配任务有两个文件夹 一个篮筐一个文件夹", 2 , waitPackingTaskVoGroupClassifyBaskets.size()); + WaitPackingTaskVoGroupClassifyBasket waitPackingTaskVo0 = waitPackingTaskVoGroupClassifyBaskets.get(0); + WaitPackingTaskVoGroupClassifyBasket waitPackingTaskVo1 = waitPackingTaskVoGroupClassifyBaskets.get(1); + Set folderNames = new HashSet(); + folderNames.add(waitPackingTaskVo0.getText()); + folderNames.add(waitPackingTaskVo1.getText()); + String folderName116 = container清洗筐116.getContainerName() + "("+ container清洗筐116.getBarcode() +")"; + String folderName117 = container清洗筐117.getContainerName() + "("+ container清洗筐117.getBarcode() +")"; + assertEquals("文件夹包含"+ folderName116, true, folderNames.contains(folderName116)); + assertEquals("文件夹包含"+ folderName117, true, folderNames.contains(folderName117)); + List waitPackingTaskItemVos = waitPackingTaskVo0.getChildren(); + assertNotNull("有装配任务", waitPackingTaskItemVos); + assertEquals("文件夹中有1个装配任务", 1, waitPackingTaskItemVos.size()); + List waitPackingTaskItemVos1 = waitPackingTaskVo0.getChildren(); + assertNotNull("有装配任务", waitPackingTaskItemVos1); + assertEquals("文件夹中有1个装配任务", 1, waitPackingTaskItemVos1.size()); + } +} Index: ssts-web/src/test/java/test/forgon/disinfectsystem/packing/AllTests.java =================================================================== diff -u -r40566 -r40694 --- ssts-web/src/test/java/test/forgon/disinfectsystem/packing/AllTests.java (.../AllTests.java) (revision 40566) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/packing/AllTests.java (.../AllTests.java) (revision 40694) @@ -6,6 +6,8 @@ import test.forgon.disinfectsystem.packing.controller.PackingReviewControllerTests; import test.forgon.disinfectsystem.packing.service.ComboToussePackingTests; import test.forgon.disinfectsystem.packing.service.PackHandoverRecordManagerTests; +import test.forgon.disinfectsystem.packing.service.PackingManagerForGetWaitPackingTaskJsonTests; +import test.forgon.disinfectsystem.packing.service.PackingManagerForLoadWaitPackingTaskDepartAndPage; import test.forgon.disinfectsystem.packing.service.PackingManagerTests; /** * @@ -26,6 +28,8 @@ PackingManagerTests.class, PackHandoverRecordManagerTests.class, ComboToussePackingTests.class, + PackingManagerForGetWaitPackingTaskJsonTests.class, + PackingManagerForLoadWaitPackingTaskDepartAndPage.class, PackingReviewControllerTests.class }) public class AllTests { Index: ssts-web/src/test/java/test/forgon/disinfectsystem/packing/service/PackingManagerTests.java =================================================================== diff -u -r40665 -r40694 --- ssts-web/src/test/java/test/forgon/disinfectsystem/packing/service/PackingManagerTests.java (.../PackingManagerTests.java) (revision 40665) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/packing/service/PackingManagerTests.java (.../PackingManagerTests.java) (revision 40694) @@ -1938,7 +1938,7 @@ JSONObject returnObj = new JSONObject(); int pageIndex = 0; int pageSize = 10; - taskVos = packingManager.getWaitPackingTaskJson(taskGroup,basketBarcode,returnObj,pageIndex, pageSize); + taskVos = packingManager.getWaitPackingTaskJson(taskGroup,basketBarcode,returnObj,pageIndex, pageSize, null); retObj.put("data", taskVos); JSONUtil.addSuccess(retObj, true); } catch (Exception e1) { @@ -1958,7 +1958,7 @@ JSONObject returnObj = new JSONObject(); int pageIndex = 0; int pageSize = 10; - taskVos = packingManager.getWaitPackingTaskJson(taskGroup,basketBarcode,returnObj,pageIndex, pageSize); + taskVos = packingManager.getWaitPackingTaskJson(taskGroup,basketBarcode,returnObj,pageIndex, pageSize, null); retObj.put("data", taskVos); JSONUtil.addSuccess(retObj, true); } catch (Exception e1) { Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManager.java =================================================================== diff -u -r40663 -r40694 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManager.java (.../PackingManager.java) (revision 40663) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManager.java (.../PackingManager.java) (revision 40694) @@ -32,6 +32,7 @@ import com.forgon.disinfectsystem.packing.vo.WaitPackingTaskInfoVo; import com.forgon.disinfectsystem.packing.vo.WaitPackingTaskVo; import com.forgon.disinfectsystem.packing.vo.PackingRecordVo; +import com.forgon.disinfectsystem.packing.vo.WaitPackingTaskVoGroupClassifyBasket; import com.forgon.tools.hibernate.BasePoManager; /** @@ -136,7 +137,7 @@ int packingAmount, Long sourceId, Integer taskType, String basketBarcode, String basketName,String department); - public JSONArray getWaitPackingTaskJson(String taskGroup,String basketBarcodes, JSONObject returnObj, Integer pageIndex, Integer pageSize); + public JSONArray getWaitPackingTaskJson(String taskGroup,String basketBarcodes, JSONObject returnObj, Integer pageIndex, Integer pageSize, String settleAccountsDepartCoding); /** * * @param taskGroup 任务组 @@ -145,7 +146,7 @@ * @param pageSize * @return */ - public JSONArray getWaitPackingTaskJson(String taskGroup, String tousseOrDepart, Integer pageIndex, Integer pageSize); + public JSONArray getWaitPackingTaskJson(String taskGroup, String tousseOrDepart, Integer pageIndex, Integer pageSize, String settleAccountsDepartCoding); /** * 获取装配任务,返回vo对象 * @param taskGroup @@ -154,7 +155,7 @@ * @param tousseOrDepart 模糊查询 科室或包名 * @return */ - public List getWaitPackingTaskTaskVoList(String taskGroup, String basketBarcode, JSONObject returnObj,String tousseOrDepart, Integer pageIndex, Integer pageSize); + public List getWaitPackingTaskTaskVoList(String taskGroup, String basketBarcode, JSONObject returnObj,String tousseOrDepart, Integer pageIndex, Integer pageSize, String settleAccountsDepartCoding); /** * 获取装配任务,返回vo对象 * @param packingTaskId 装配任务id @@ -164,9 +165,12 @@ * @param tousseOrDepart 模糊查询 科室或包名 * @param pageIndex * @param pageSize + * @param waitPackingTaskVoGroupClassifyBaskets enableGroupPendingAssemblyTasksByBasket为true时 方法返回的数据存在此处 + * @param enableGroupPendingAssemblyTasksByBasket 是否开启 写在参数里 方便测试用例测试不同配置项得场景 * @return */ - public List getWaitPackingTaskTaskVoList(Long packingTaskId, String taskGroup, String basketBarcode, JSONObject returnObj,String tousseOrDepart, Integer pageIndex, Integer pageSize); + public List getWaitPackingTaskTaskVoList(Long packingTaskId, String taskGroup, String basketBarcode, JSONObject returnObj,String tousseOrDepart, Integer pageIndex, Integer pageSize, List waitPackingTaskVoGroupClassifyBaskets + , Boolean enableGroupPendingAssemblyTasksByBasket, String settleAccountsDepartCoding); public void createWashedClassifyBasketPackingTask(); @@ -390,8 +394,14 @@ * @param tousseOrDepart 包名或科室 * @return */ - public int getPackingTaskTousseNameCount(String taskGroup, String tousseOrDepart); + public int getPackingTaskTousseNameCount(String taskGroup, String tousseOrDepart, String settleAccountsDepartCoding); /** + * 获取装配任务文件夹 + * @param taskGroup 任务组 + * @return + */ + public JSONArray loadWaitPackingTaskDepart(String taskGroup); + /** * 验证器械包是否可以被聚合 * @param tdIds 包定义ids * @return Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/controller/PackingController.java =================================================================== diff -u -r37207 -r40694 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/controller/PackingController.java (.../PackingController.java) (revision 37207) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/controller/PackingController.java (.../PackingController.java) (revision 40694) @@ -41,10 +41,12 @@ import com.forgon.log.model.Log; import com.forgon.log.service.LogManager; import com.forgon.security.service.OperationManager; +import com.forgon.tools.StrutsParamUtils; import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.hibernate.ObjectDao; import com.forgon.tools.json.JSONUtil; import com.forgon.tools.util.SpringUtils; +import com.forgon.tools.util.SqlUtils; /** * @author dandan 2018年6月16日 下午4:24:52 @@ -103,7 +105,9 @@ JSONObject returnObj = new JSONObject(); int pageIndex = SpringUtils.getPraramValue("pageIndex", 0); int pageSize = SpringUtils.getPraramValue("pageSize", 0); - JSONArray data = packingManager.getWaitPackingTaskJson(taskGroup,basketBarcodes,returnObj, pageIndex, pageSize); + String settleAccountsDepartCoding = StrutsParamUtils.getPraramValue("settleAccountsDepartCoding", null); + SqlUtils.checkInputParam(settleAccountsDepartCoding); + JSONArray data = packingManager.getWaitPackingTaskJson(taskGroup,basketBarcodes,returnObj, pageIndex, pageSize, settleAccountsDepartCoding); obj.put("data", data); obj.put("notWashedInfo", returnObj.optString("notWashedInfo")); Index: ssts-web/src/test/java/test/forgon/disinfectsystem/packing/service/PackingManagerForLoadWaitPackingTaskDepartAndPage.java =================================================================== diff -u --- ssts-web/src/test/java/test/forgon/disinfectsystem/packing/service/PackingManagerForLoadWaitPackingTaskDepartAndPage.java (revision 0) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/packing/service/PackingManagerForLoadWaitPackingTaskDepartAndPage.java (revision 40694) @@ -0,0 +1,63 @@ +package test.forgon.disinfectsystem.packing.service; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import javax.validation.constraints.AssertTrue; + +import net.sf.json.JSONArray; + +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang.StringUtils; +import org.junit.Test; + +import com.forgon.disinfectsystem.entity.basedatamanager.container.Container; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; +import com.forgon.disinfectsystem.entity.becleanitem.ClassifyBasket; + +import test.forgon.constant.Constants; +import test.forgon.disinfectsystem.AbstractCSSDTest; + +public class PackingManagerForLoadWaitPackingTaskDepartAndPage extends AbstractCSSDTest{ + @Test + public void testLoadWaitPackingTaskDepart(){ + initCSSDData(); + TousseDefinition td = NewPackingTaskCommon.saveTousseDefinition(objectDao, "包1", TousseDefinition.PACKAGE_TYPE_INSIDE); + NewPackingTaskCommon.newCssdHandleTousses(objectDao, td, Constants.TASKGROUP_CHANGGUZU); + Container container清洗筐116 = containerManager.getContainer("清洗筐116"); + Container container清洗筐117 = containerManager.getContainer("清洗筐117"); + int taskType = 1; + ClassifyBasket classifyBasket清洗筐116 = NewPackingTaskCommon.newClassifyBasket(objectDao, container清洗筐116); + NewPackingTaskCommon.newPackingTask(objectDao, td, classifyBasket清洗筐116, null, taskType, container清洗筐116, Constants.ORG_UNIT_NAME_OR); + + + ClassifyBasket classifyBasket清洗筐117 = NewPackingTaskCommon.newClassifyBasket(objectDao, container清洗筐117); + NewPackingTaskCommon.newPackingTask(objectDao, td, classifyBasket清洗筐117, null, taskType, container清洗筐117, Constants.ORG_UNIT_CODE_NEIKE); + JSONArray result = packingManager.loadWaitPackingTaskDepart(Constants.TASKGROUP_CHANGGUZU); + assertTrue("有结算科室", CollectionUtils.isNotEmpty(result)); + assertEquals("有2个结算科室", 2, result.size()); + System.out.println(result.toString()); + } + @Test + public void testGetPackingTaskTousseNameCount(){ + initCSSDData(); + TousseDefinition td = NewPackingTaskCommon.saveTousseDefinition(objectDao, "包1", TousseDefinition.PACKAGE_TYPE_INSIDE); + NewPackingTaskCommon.newCssdHandleTousses(objectDao, td, Constants.TASKGROUP_CHANGGUZU); + Container container清洗筐116 = containerManager.getContainer("清洗筐116"); + Container container清洗筐117 = containerManager.getContainer("清洗筐117"); + int taskType = 1; + ClassifyBasket classifyBasket清洗筐116 = NewPackingTaskCommon.newClassifyBasket(objectDao, container清洗筐116); + NewPackingTaskCommon.newPackingTask(objectDao, td, classifyBasket清洗筐116, null, taskType, container清洗筐116, Constants.ORG_UNIT_NAME_OR); + + TousseDefinition td2 = NewPackingTaskCommon.saveTousseDefinition(objectDao, "包2", TousseDefinition.PACKAGE_TYPE_INSIDE); + NewPackingTaskCommon.newCssdHandleTousses(objectDao, td2, Constants.TASKGROUP_CHANGGUZU); + ClassifyBasket classifyBasket清洗筐117 = NewPackingTaskCommon.newClassifyBasket(objectDao, container清洗筐117); + NewPackingTaskCommon.newPackingTask(objectDao, td2, classifyBasket清洗筐117, null, taskType, container清洗筐117, Constants.ORG_UNIT_CODE_NEIKE); + int conut = packingManager.getPackingTaskTousseNameCount(Constants.TASKGROUP_CHANGGUZU, StringUtils.EMPTY, null); + assertEquals("有2个装配任务", 2, conut); + conut = packingManager.getPackingTaskTousseNameCount(Constants.TASKGROUP_CHANGGUZU, StringUtils.EMPTY, Constants.ORG_UNIT_NAME_OR); + assertEquals("有1个"+ Constants.ORG_UNIT_NAME_OR +"的装配任务", 1, conut); + conut = packingManager.getPackingTaskTousseNameCount(Constants.TASKGROUP_CHANGGUZU, StringUtils.EMPTY, Constants.ORG_UNIT_CODE_NEIKE); + assertEquals("有1个"+ Constants.ORG_UNIT_CODE_NEIKE +"的装配任务", 1, conut); + } +} Index: ssts-web/src/test/java/test/forgon/disinfectsystem/packing/service/NewPackingTaskCommon.java =================================================================== diff -u --- ssts-web/src/test/java/test/forgon/disinfectsystem/packing/service/NewPackingTaskCommon.java (revision 0) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/packing/service/NewPackingTaskCommon.java (revision 40694) @@ -0,0 +1,55 @@ +package test.forgon.disinfectsystem.packing.service; + +import com.forgon.directory.model.CssdHandleTousses; +import com.forgon.disinfectsystem.entity.basedatamanager.container.Container; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; +import com.forgon.disinfectsystem.entity.becleanitem.ClassifyBasket; +import com.forgon.disinfectsystem.entity.packing.PackingTask; +import com.forgon.tools.hibernate.ObjectDao; + +public class NewPackingTaskCommon { + static String cssd = "testCSSD"; + public static PackingTask newPackingTask(ObjectDao objectDao, TousseDefinition tousseDefinition + , ClassifyBasket classifyBasket, String classifyBasketIds, int taskType, Container container, String settleAccountsDepartCoding){ + PackingTask packingTask = new PackingTask(); + packingTask.setTousseDefinition(tousseDefinition); + packingTask.setClassifyBasket_id(classifyBasket.getId()); + packingTask.setClassifyBasketIds(classifyBasketIds); + packingTask.setOrgUnitCoding(cssd); + packingTask.setAmount(1); + packingTask.setTaskType(taskType); + packingTask.setBasketBarcode(container.getBarcode()); + packingTask.setUnPackAmount(1); + packingTask.setRecyclingBasketName(classifyBasket.getContainerName()); + packingTask.setSettleAccountsDepartCoding(settleAccountsDepartCoding); + objectDao.saveOrUpdate(packingTask); + return packingTask; + } + public static ClassifyBasket newClassifyBasket(ObjectDao objectDao, Container container){ + ClassifyBasket classifyBasket = new ClassifyBasket(); + classifyBasket.setContainerName(container.getContainerName()); + classifyBasket.setContainerBarcode(container.getBarcode()); + objectDao.saveOrUpdate(classifyBasket); + return classifyBasket; + } + + public static TousseDefinition saveTousseDefinition(ObjectDao objectDao, String name, String tousseType){ + TousseDefinition td = new TousseDefinition(); + td.setTousseType(tousseType); + td.setName(name); + objectDao.save(td); + td.setAncestorID(td.getId()); + objectDao.update(td); + //此处如果删除 后续一些sql查询可能获取不到AncestorID 用AncestorID关联也查不到数据 + td = (TousseDefinition)objectDao.getById(TousseDefinition.class.getSimpleName(), td.getId()); + return td; + } + public static CssdHandleTousses newCssdHandleTousses(ObjectDao objectDao, TousseDefinition td , String taskGroup){ + CssdHandleTousses cssdHandleTousses = new CssdHandleTousses(); + cssdHandleTousses.setOrgUnitCode(cssd); + cssdHandleTousses.setTousseDefinitionId(td.getId()); + cssdHandleTousses.setTaskGroup(taskGroup); + objectDao.saveOrUpdate(cssdHandleTousses); + return cssdHandleTousses; + } +} Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java =================================================================== diff -u -r40681 -r40694 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 40681) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 40694) @@ -1754,36 +1754,57 @@ } @Override - public JSONArray getWaitPackingTaskJson(String taskGroup, String tousseOrDepart, Integer pageIndex, Integer pageSize){ - List taskVos = getWaitPackingTaskTaskVoList(taskGroup, null,null,tousseOrDepart, pageIndex,pageSize); + public JSONArray getWaitPackingTaskJson(String taskGroup, String tousseOrDepart, Integer pageIndex, Integer pageSize, String settleAccountsDepartCoding){ + boolean enableGroupPendingAssemblyTasksByBasket = CssdUtils.getSystemSetConfigByNameBool("enableGroupPendingAssemblyTasksByBasket", false); + List waitPackingTaskVoGroupClassifyBaskets = enableGroupPendingAssemblyTasksByBasket? new ArrayList():null; + List taskVos = getWaitPackingTaskTaskVoList(null, taskGroup, null,null,tousseOrDepart, pageIndex,pageSize, waitPackingTaskVoGroupClassifyBaskets, enableGroupPendingAssemblyTasksByBasket, settleAccountsDepartCoding); JSONArray jsonArray = new JSONArray(); - jsonArray.addAll(taskVos); + if(enableGroupPendingAssemblyTasksByBasket){ + jsonArray.addAll(waitPackingTaskVoGroupClassifyBaskets); + }else{ + jsonArray.addAll(taskVos); + } return jsonArray; } @Override - public JSONArray getWaitPackingTaskJson(String taskGroup, String basketBarcodes, JSONObject returnObj, Integer pageIndex, Integer pageSize) { + public JSONArray getWaitPackingTaskJson(String taskGroup, String basketBarcodes, JSONObject returnObj, Integer pageIndex, Integer pageSize, String settleAccountsDepartCoding) { List taskVos = null; JSONArray jsonArray = new JSONArray(); + //有篮筐条码时 返回数据结构和enableGroupPendingAssemblyTasksByBasket没开启一样 + boolean enableGroupPendingAssemblyTasksByBasket = StringUtils.isNotBlank(basketBarcodes)?false:CssdUtils.getSystemSetConfigByNameBool("enableGroupPendingAssemblyTasksByBasket", false); + List waitPackingTaskVoGroupClassifyBaskets = enableGroupPendingAssemblyTasksByBasket? new ArrayList():null; + if(StringUtils.isNotBlank(basketBarcodes)){ taskVos = new LinkedList(); String[] basketBarcodesArray = basketBarcodes.split(";"); for (String basketBarcode : basketBarcodesArray) { - List taskVos_basket = getWaitPackingTaskTaskVoList(taskGroup, basketBarcode,returnObj,null,pageIndex,pageSize); + List taskVos_basket = getWaitPackingTaskTaskVoList(null, taskGroup, basketBarcode,returnObj,null,pageIndex,pageSize, waitPackingTaskVoGroupClassifyBaskets, enableGroupPendingAssemblyTasksByBasket, settleAccountsDepartCoding); if(taskVos_basket != null){ taskVos.addAll(taskVos_basket); } } }else{ - taskVos = getWaitPackingTaskTaskVoList(taskGroup, basketBarcodes,null,null, pageIndex, pageSize); + + taskVos = getWaitPackingTaskTaskVoList(null, taskGroup, basketBarcodes,null,null, pageIndex, pageSize, waitPackingTaskVoGroupClassifyBaskets, enableGroupPendingAssemblyTasksByBasket, settleAccountsDepartCoding); } - jsonArray.addAll(taskVos); + if(enableGroupPendingAssemblyTasksByBasket){ + jsonArray.addAll(waitPackingTaskVoGroupClassifyBaskets); + }else{ + jsonArray.addAll(taskVos); + } return jsonArray; } @Override - public List getWaitPackingTaskTaskVoList(Long packingTaskId, String taskGroup, String basketBarcode, JSONObject returnObj,String tousseOrDepart, Integer pageIndex, Integer pageSize) { + public List getWaitPackingTaskTaskVoList(Long packingTaskId, String taskGroup, String basketBarcode, JSONObject returnObj,String tousseOrDepart, Integer pageIndex, Integer pageSize, List waitPackingTaskVoGroupClassifyBaskets, Boolean enableGroupPendingAssemblyTasksByBasket, String settleAccountsDepartCoding) { List taskVos = new ArrayList(); + if(enableGroupPendingAssemblyTasksByBasket == null){ + enableGroupPendingAssemblyTasksByBasket = false; + } + if(enableGroupPendingAssemblyTasksByBasket && waitPackingTaskVoGroupClassifyBaskets == null){ + waitPackingTaskVoGroupClassifyBaskets = new ArrayList(); + } if (tousseOrDepart == null) { tousseOrDepart = ""; } @@ -1798,8 +1819,8 @@ if(StringUtils.isBlank(taskGroup)){ throw new RuntimeException("任务组不能为空"); } - //按包名称和任务类型taskType分页,taskType不为1要排在最后,加急除外,加急排最前,不按装配任务条数分页,先查询本页的包名称,再去查询这些包的所有装配任务 - List tousseNamesAndTaskTypes = null; + //按文件夹名称和任务类型taskType分页,taskType不为1要排在最后,加急除外,加急排最前,不按装配任务条数分页,先查询本页的包名称,再去查询这些包的所有装配任务 + List foldersAndTaskTypes = null; SupplyRoomConfig supplyRoomConfig = supplyRoomConfigManager.getSystemParamsObj(); Set queryTousseTypes = getQueryTousseTypes(taskGroup, supplyRoomConfig); PackingTask packingTask = null; @@ -1817,8 +1838,8 @@ orderByWashTime = true; } if(!DatabaseUtil.isPoIdValid(packingTaskId) && pageSize != null && pageIndex != null && pageIndex > 0 && pageSize > 0){ - tousseNamesAndTaskTypes = getTousseNamesAndTaskType(orderByWashTime,taskGroup, basketBarcode, pageIndex, pageSize, queryTousseTypes, tousseOrDepart, recyclingAmountConfirmSql); - if(CollectionUtils.isEmpty(tousseNamesAndTaskTypes)){ + foldersAndTaskTypes = getFoldersAndTaskType(orderByWashTime,taskGroup, basketBarcode, pageIndex, pageSize, queryTousseTypes, tousseOrDepart, recyclingAmountConfirmSql, enableGroupPendingAssemblyTasksByBasket, settleAccountsDepartCoding); + if(CollectionUtils.isEmpty(foldersAndTaskTypes)){ return taskVos; } } @@ -1842,22 +1863,22 @@ if(tdOfPackingTask == null || !TousseDefinition.PACKAGE_TYPE_FOREIGN.equals(tdOfPackingTask.getTousseType()) && !TousseDefinition.PACKAGE_TYPE_SPLIT.equals(tdOfPackingTask.getTousseType()) && !TousseDefinition.PACKAGE_TYPE_CUSTOM.equals(tdOfPackingTask.getTousseType())){ - taskList = findPackingTaskFromCssdHandleToussesConfig(packingTaskId, showRecyclingPeopleColumnInPackingTasksList, taskGroup,basketBarcode,supplyRoomConfig, tousseNamesAndTaskTypes, tousseOrDepart,recyclingAmountConfirmSql, enableUrgentFunction,enableExtendedInformationOfUrgentFunction); + taskList = findPackingTaskFromCssdHandleToussesConfig(packingTaskId, showRecyclingPeopleColumnInPackingTasksList, taskGroup,basketBarcode,supplyRoomConfig, foldersAndTaskTypes, tousseOrDepart,recyclingAmountConfirmSql, enableUrgentFunction,enableExtendedInformationOfUrgentFunction, enableGroupPendingAssemblyTasksByBasket, settleAccountsDepartCoding); } if(supplyRoomConfig != null){ //外来器械包默认处理科室及任务组 JSONObject foreignTousseHandleDepartAndTaskGroupJsonobject = supplyRoomConfig.getOneForeignTousseHandleDepartAndTaskGroupByDepartCode(AcegiHelper.getCurrentOrgUnitCode()); if(tdOfPackingTask != null && TousseDefinition.PACKAGE_TYPE_FOREIGN.equals(tdOfPackingTask.getTousseType()) || foreignTousseHandleDepartAndTaskGroupJsonobject != null && StringUtils.equals(taskGroup, foreignTousseHandleDepartAndTaskGroupJsonobject.optString("taskGroup"))){ //外来器械包的装配任务查询 - List foreignTousseTaskList = findForeignToussePackingTask(packingTaskId, showRecyclingPeopleColumnInPackingTasksList, basketBarcode, enableUrgentFunction, tousseNamesAndTaskTypes, tousseOrDepart, recyclingAmountConfirmSql,enableExtendedInformationOfUrgentFunction); + List foreignTousseTaskList = findForeignToussePackingTask(packingTaskId, showRecyclingPeopleColumnInPackingTasksList, basketBarcode, enableUrgentFunction, foldersAndTaskTypes, tousseOrDepart, recyclingAmountConfirmSql,enableExtendedInformationOfUrgentFunction, enableGroupPendingAssemblyTasksByBasket, settleAccountsDepartCoding); if(CollectionUtils.isNotEmpty(foreignTousseTaskList)){ taskList.addAll(foreignTousseTaskList); } } if(tdOfPackingTask != null && TousseDefinition.PACKAGE_TYPE_CUSTOM.equals(tdOfPackingTask.getTousseType()) || StringUtils.equals(taskGroup, supplyRoomConfig.getCustomTousseDefaultTaskGroup())){ //自定义器械包的装配任务查询 - List customerTousseTaskList = findCustomerToussePackingTask(packingTaskId, showRecyclingPeopleColumnInPackingTasksList, basketBarcode, tousseNamesAndTaskTypes, tousseOrDepart, recyclingAmountConfirmSql, enableUrgentFunction,enableExtendedInformationOfUrgentFunction); + List customerTousseTaskList = findCustomerToussePackingTask(packingTaskId, showRecyclingPeopleColumnInPackingTasksList, basketBarcode, foldersAndTaskTypes, tousseOrDepart, recyclingAmountConfirmSql, enableUrgentFunction,enableExtendedInformationOfUrgentFunction, enableGroupPendingAssemblyTasksByBasket, settleAccountsDepartCoding); if(CollectionUtils.isNotEmpty(customerTousseTaskList)){ taskList.addAll(customerTousseTaskList); } @@ -1871,6 +1892,13 @@ Map scanBasketTaskMap = new LinkedHashMap(); //不用扫篮筐的装配任务 Map unScanBasketTaskMap = new LinkedHashMap(); + + //enableGroupPendingAssemblyTasksByBasket is ture + //需要扫篮筐的装配任务 + Map scanGroupBasketTaskMap = new LinkedHashMap(); + //不用扫篮筐的装配任务 + Map unScanGroupBasketTaskMap = new LinkedHashMap(); + boolean haveTimeOut = false;//是否有超时,如果有 加入超时的排序 if (CollectionUtils.isNotEmpty(taskList)) { @@ -1922,12 +1950,36 @@ String notWashedInfo = "";//返回前台的关于篮筐未清洗的提示信息 Collection packingTaskIds = new HashSet(); Collection washRecordIds = new HashSet(); + //入到多个篮筐才查询 + Map classifyBasketIdToContainer = new HashMap(); for (Object[] result : taskList) { PackingTask task = (PackingTask)result[0]; packingTaskIds.add(task.getId()); if(DatabaseUtil.isPoIdValid(task.getWashRecord_id())){ washRecordIds.add(task.getWashRecord_id()); } + if(enableGroupPendingAssemblyTasksByBasket && DatabaseUtil.isPoIdValid(task.getClassifyBasket_id())){ + if(!classifyBasketIdToContainer.containsKey(task.getClassifyBasket_id()) + && StringUtils.isNotBlank(task.getClassifyBasketIds()) + && task.getClassifyBasketIds().contains(";")){ + String[] classifyBasketIds = task.getClassifyBasketIds().split(Constants.IDS_SEPARATOR); + Set classifyBasketIdSet = new HashSet(); + for (int i = 0; i < classifyBasketIds.length; i++) { + if(classifyBasketIdSet.size() > 1){ + break; + } + if(StringUtils.isNotBlank(classifyBasketIds[i])){ + classifyBasketIdSet.add(classifyBasketIds[i]); + } + } + if(classifyBasketIdSet.size() > 0){//入到了多个篮筐 就用ClassifyBasket_id + ClassifyBasket classifyBasket = classifyBasketManager.get(task.getClassifyBasket_id()); + Container container = containerManager.getContainerByBarcode(classifyBasket.getContainerBarcode()); + classifyBasketIdToContainer.put(task.getClassifyBasket_id(), container); + } + } + } + } //统一查询清洗记录 Map washAndDisinfectRecordMap = new HashMap(); @@ -2168,109 +2220,235 @@ itemVo.setInvoicePlanId(invoicePlanId); itemVo.setIdCardBarcode(task.getIdCardBarcode()); itemVo.setUseAmount(task.getUseAmount()); - String nodeText = tousseName; - itemVo.setText(nodeText); - - WaitPackingTaskVo vo = null; - - if(PackingTask.TASK_RECYCLINGRECORD.equals(task.getTaskType())){ - vo = scanBasketTaskMap.get(nodeText); + itemVo.setText(tousseName); + if(enableGroupPendingAssemblyTasksByBasket){ + List basketNames = new ArrayList();//一个装配任务入到到个篮筐 也只显示task.classifyBasket_id的篮筐 + List basketBarcodes = new ArrayList(); + String containerBarcode = ""; + if(classifyBasketIdToContainer.containsKey(task.getClassifyBasket_id())){ + Container container = classifyBasketIdToContainer.get(task.getClassifyBasket_id()); + basketNames.add(container.getContainerName()); + basketBarcodes.add(container.getBarcode()); + containerBarcode = container.getBarcode(); + }else if(StringUtils.isBlank(task.getRecyclingBasketName())){ + basketNames.add("空"); + basketBarcodes.add(""); + }else if(task.getRecyclingBasketName().contains(Constants.IDS_SEPARATOR)){ + String[] basketNameStr = task.getRecyclingBasketName().split(";"); + + for (int i = 0; i < basketNameStr.length; i++) { + if(StringUtils.isNotBlank(basketNameStr[i])){ + basketNames.add(basketNameStr[i]); + break; + } + } + if(StringUtils.isBlank(task.getBasketBarcode())){ + basketBarcodes.add(""); + }else{ + String[] barcodeStr = task.getBasketBarcode().split(";"); + + for (int i = 0; i < barcodeStr.length; i++) { + if(StringUtils.isNotBlank(barcodeStr[i])){ + basketBarcodes.add(barcodeStr[i]); + containerBarcode = barcodeStr[i]; + break; + } + } + } + + }else{ + basketNames.add(task.getRecyclingBasketName().replace(Constants.IDS_SEPARATOR, "")); + if(StringUtils.isBlank(task.getBasketBarcode())){ + basketBarcodes.add(""); + }else{ + containerBarcode = task.getBasketBarcode().replace(Constants.IDS_SEPARATOR, ""); + basketBarcodes.add(containerBarcode); + } + } + String basketName = basketNames.get(0); + String key0 = null; + if("空".equals(basketName)){ + key0 = "空"; + }else{ + key0 = basketName + "("+basketBarcodes.get(0) +")"; + } + WaitPackingTaskVoGroupClassifyBasket vo = null; + if(PackingTask.TASK_RECYCLINGRECORD.equals(task.getTaskType())){ + vo = scanGroupBasketTaskMap.get(key0); + }else{ + vo = unScanGroupBasketTaskMap.get(key0); + } + if(vo == null){ + vo = new WaitPackingTaskVoGroupClassifyBasket(); + vo.setAmount(task.getUnPackAmount()); + vo.setUrgentAmount(task.getUrgentAmount()); + vo.setText(key0); + vo.setIdCardBarcode(task.getIdCardBarcode()); + vo.setContainerBarcode(containerBarcode); + if(PackingTask.TASK_RECYCLINGRECORD.equals(task.getTaskType())){ + scanGroupBasketTaskMap.put(key0, vo); + }else{ + unScanGroupBasketTaskMap.put(key0, vo); + } + } else { + vo.setAmount(vo.getAmount() + task.getUnPackAmount()); + Integer urgentAmount = vo.getUrgentAmount() == null ? Integer.valueOf(0) : vo.getUrgentAmount(); + + if(task.getUrgentAmount() != null){ + vo.setUrgentAmount(urgentAmount + task.getUrgentAmount()); + } + } + if(!vo.getHaveRemarkOfApplyGoods() && StringUtils.isNotBlank(task.getRemarkOfApplyGoods())){ + vo.setHaveRemarkOfApplyGoods(true); + } + if(isTimeout){ + vo.setIsTimeout(isTimeout); + vo.setCls("itemTimeout"); + } + List childrens = vo.getChildren(); + if(timeoutDuration != null && timeoutDuration > 0){ + if(vo.getTimeoutDuration() == null || vo.getTimeoutDuration() < timeoutDuration){ + vo.setTimeoutDuration(timeoutDuration); + } + } + List errorList = errorsMap.get(task.getId()); + if(errorList != null && errorList.size() > 0){ + itemVo.setReplenishMaterils(true); + vo.setReplenishMaterils(true); + itemVo.getErrors().addAll(errorList); + } + List damages = damagesMap.get(task.getId()); + if(damages != null && damages.size() > 0){ + itemVo.setReplenishMaterils(true); + vo.setReplenishMaterils(true); + itemVo.getDamages().addAll(damages); + } + childrens.add(itemVo); + itemVo.setAmount(task.getUnPackAmount()); + itemVo.setMaxAmount(task.getUnPackAmount()); + itemVo.setSupplierName(td.getSupplierName()); + itemVo.setTaskType(task.getTaskType()); + itemVo.setAllowModifyPackageType(td.getAllowModifyPackageType()); + //丢失、报损未补充可装配数量 + Integer unPackingAmount = getWaitSupplementTousseAmount(itemVo.getErrorDamages(),task.getStatus(),td); + if(unPackingAmount > 0 && unPackingAmount < itemVo.getAmount()){ + Integer canPackingAmount = itemVo.getAmount() - unPackingAmount; + itemVo.setAmount(unPackingAmount); + itemVo.setMaxAmount(unPackingAmount); + WaitPackingTaskItemVo newItemVo = new WaitPackingTaskItemVo(); + List listProNotToCopy = new ArrayList(); + listProNotToCopy.add("errors"); + listProNotToCopy.add("damages"); + listProNotToCopy.add("replenishMaterils"); + ReflectUtil.copyProperties(itemVo, newItemVo, true, listProNotToCopy); + newItemVo.setAmount(canPackingAmount); + newItemVo.setMaxAmount(canPackingAmount); + newItemVo.setStatus(PackingTask.STATUS_AWAIT_PACKING); + childrens.add(newItemVo); + } }else{ - vo = unScanBasketTaskMap.get(nodeText); - } - if(vo == null){ - vo = new WaitPackingTaskVo(); - vo.setAmount(task.getUnPackAmount()); - vo.setUrgentAmount(task.getUrgentAmount()); - vo.setText(nodeText); - vo.setPackageType(td.getPackageType()); - vo.setSterilingMethod(td.getSterilingMethod()); - vo.setTousseType(td.getTousseType()); - vo.setIsTraceable(td.getIsTraceable()); - vo.setIsPrint(td.getIsPrint()); - vo.setIsReview(td.getIsReview()); - vo.setTousseName(tousseName); - vo.setTousseID(tousseID); - vo.setInvoicePlanId(invoicePlanId); - vo.setNeedInspectMaterials(td.getNeedInspectMaterials()); - vo.setTaskType(task.getTaskType()); - vo.setUuid_vedioNames(td.getUuid_vedioNames()); - vo.setHaveIDCard(haveIDCard); - vo.setIdCardBarcode(task.getIdCardBarcode()); - + WaitPackingTaskVo vo = null; + List childrens = null; + String nodeText = tousseName; if(PackingTask.TASK_RECYCLINGRECORD.equals(task.getTaskType())){ - scanBasketTaskMap.put(nodeText, vo); + vo = scanBasketTaskMap.get(nodeText); }else{ - unScanBasketTaskMap.put(nodeText, vo); + vo = unScanBasketTaskMap.get(nodeText); } - } else { - vo.setAmount(vo.getAmount() + task.getUnPackAmount()); - Integer urgentAmount = vo.getUrgentAmount() == null ? Integer.valueOf(0) : vo.getUrgentAmount(); - - if(task.getUrgentAmount() != null){ - vo.setUrgentAmount(urgentAmount + task.getUrgentAmount()); + if(vo == null){ + vo = new WaitPackingTaskVo(); + vo.setAmount(task.getUnPackAmount()); + vo.setUrgentAmount(task.getUrgentAmount()); + vo.setText(nodeText); + vo.setPackageType(td.getPackageType()); + vo.setSterilingMethod(td.getSterilingMethod()); + vo.setTousseType(td.getTousseType()); + vo.setIsTraceable(td.getIsTraceable()); + vo.setIsPrint(td.getIsPrint()); + vo.setIsReview(td.getIsReview()); + vo.setTousseName(tousseName); + vo.setTousseID(tousseID); + vo.setInvoicePlanId(invoicePlanId); + vo.setNeedInspectMaterials(td.getNeedInspectMaterials()); + vo.setTaskType(task.getTaskType()); + vo.setUuid_vedioNames(td.getUuid_vedioNames()); + vo.setHaveIDCard(haveIDCard); + vo.setIdCardBarcode(task.getIdCardBarcode()); + + if(PackingTask.TASK_RECYCLINGRECORD.equals(task.getTaskType())){ + scanBasketTaskMap.put(nodeText, vo); + }else{ + unScanBasketTaskMap.put(nodeText, vo); + } + } else { + vo.setAmount(vo.getAmount() + task.getUnPackAmount()); + Integer urgentAmount = vo.getUrgentAmount() == null ? Integer.valueOf(0) : vo.getUrgentAmount(); + + if(task.getUrgentAmount() != null){ + vo.setUrgentAmount(urgentAmount + task.getUrgentAmount()); + } } - } - if(!vo.getHaveRemarkOfApplyGoods() && StringUtils.isNotBlank(task.getRemarkOfApplyGoods())){ - vo.setHaveRemarkOfApplyGoods(true); - } - String note = td.getNote(); - if(StringUtils.isNotBlank(note)){ - vo.setNote(note); - } - // 只要有一个消毒物品的包定义是不允许修改,那么就不允许修改此包的所有装配任务 - if(StringUtils.equals(td.getAllowModifyPackageType(), TousseDefinition.STR_NO)){ - vo.setAllowModifyPackageType(td.getAllowModifyPackageType()); - } - vo.setErrorRemark(task.getErrorRemark()); - vo.setDamageRemark(task.getDamageRemark()); - vo.setUnPackingAmount(vo.getAmount()); - if(isTimeout){ - vo.setIsTimeout(isTimeout); - vo.setCls("itemTimeout"); - } - List childrens = vo.getChildren(); - childrens.add(itemVo); - vo.setCustomSplitBasketAmount(vo.getCustomSplitBasketAmount()+customSplitBasketAmount); - if(timeoutDuration != null && timeoutDuration > 0){ - if(vo.getTimeoutDuration() == null || vo.getTimeoutDuration() < timeoutDuration){ - vo.setTimeoutDuration(timeoutDuration); + if(!vo.getHaveRemarkOfApplyGoods() && StringUtils.isNotBlank(task.getRemarkOfApplyGoods())){ + vo.setHaveRemarkOfApplyGoods(true); } + String note = td.getNote(); + if(StringUtils.isNotBlank(note)){ + vo.setNote(note); + } + // 只要有一个消毒物品的包定义是不允许修改,那么就不允许修改此包的所有装配任务 + if(StringUtils.equals(td.getAllowModifyPackageType(), TousseDefinition.STR_NO)){ + vo.setAllowModifyPackageType(td.getAllowModifyPackageType()); + } + vo.setErrorRemark(task.getErrorRemark()); + vo.setDamageRemark(task.getDamageRemark()); + vo.setUnPackingAmount(vo.getAmount()); + if(isTimeout){ + vo.setIsTimeout(isTimeout); + vo.setCls("itemTimeout"); + } + childrens = vo.getChildren(); + vo.setCustomSplitBasketAmount(vo.getCustomSplitBasketAmount()+customSplitBasketAmount); + if(timeoutDuration != null && timeoutDuration > 0){ + if(vo.getTimeoutDuration() == null || vo.getTimeoutDuration() < timeoutDuration){ + vo.setTimeoutDuration(timeoutDuration); + } + } + List errorList = errorsMap.get(task.getId()); + if(errorList != null && errorList.size() > 0){ + itemVo.setReplenishMaterils(true); + vo.setReplenishMaterils(true); + itemVo.getErrors().addAll(errorList); + } + List damages = damagesMap.get(task.getId()); + if(damages != null && damages.size() > 0){ + itemVo.setReplenishMaterils(true); + vo.setReplenishMaterils(true); + itemVo.getDamages().addAll(damages); + } + childrens.add(itemVo); + itemVo.setAmount(task.getUnPackAmount()); + itemVo.setMaxAmount(task.getUnPackAmount()); + itemVo.setSupplierName(td.getSupplierName()); + itemVo.setTaskType(task.getTaskType()); + itemVo.setAllowModifyPackageType(td.getAllowModifyPackageType()); + //丢失、报损未补充可装配数量 + Integer unPackingAmount = getWaitSupplementTousseAmount(itemVo.getErrorDamages(),task.getStatus(),td); + if(unPackingAmount > 0 && unPackingAmount < itemVo.getAmount()){ + Integer canPackingAmount = itemVo.getAmount() - unPackingAmount; + itemVo.setAmount(unPackingAmount); + itemVo.setMaxAmount(unPackingAmount); + WaitPackingTaskItemVo newItemVo = new WaitPackingTaskItemVo(); + List listProNotToCopy = new ArrayList(); + listProNotToCopy.add("errors"); + listProNotToCopy.add("damages"); + listProNotToCopy.add("replenishMaterils"); + ReflectUtil.copyProperties(itemVo, newItemVo, true, listProNotToCopy); + newItemVo.setAmount(canPackingAmount); + newItemVo.setMaxAmount(canPackingAmount); + newItemVo.setStatus(PackingTask.STATUS_AWAIT_PACKING); + childrens.add(newItemVo); + } } - itemVo.setAmount(task.getUnPackAmount()); - itemVo.setMaxAmount(task.getUnPackAmount()); - itemVo.setSupplierName(td.getSupplierName()); - itemVo.setTaskType(task.getTaskType()); - itemVo.setAllowModifyPackageType(td.getAllowModifyPackageType()); - List errorList = errorsMap.get(task.getId()); - if(errorList != null && errorList.size() > 0){ - itemVo.setReplenishMaterils(true); - vo.setReplenishMaterils(true); - itemVo.getErrors().addAll(errorList); - } - List damages = damagesMap.get(task.getId()); - if(damages != null && damages.size() > 0){ - itemVo.setReplenishMaterils(true); - vo.setReplenishMaterils(true); - itemVo.getDamages().addAll(damages); - } - //丢失、报损未补充可装配数量 - Integer unPackingAmount = getWaitSupplementTousseAmount(itemVo.getErrorDamages(),task.getStatus(),td); - if(unPackingAmount > 0 && unPackingAmount < itemVo.getAmount()){ - Integer canPackingAmount = itemVo.getAmount() - unPackingAmount; - itemVo.setAmount(unPackingAmount); - itemVo.setMaxAmount(unPackingAmount); - WaitPackingTaskItemVo newItemVo = new WaitPackingTaskItemVo(); - List listProNotToCopy = new ArrayList(); - listProNotToCopy.add("errors"); - listProNotToCopy.add("damages"); - listProNotToCopy.add("replenishMaterils"); - ReflectUtil.copyProperties(itemVo, newItemVo, true, listProNotToCopy); - newItemVo.setAmount(canPackingAmount); - newItemVo.setMaxAmount(canPackingAmount); - newItemVo.setStatus(PackingTask.STATUS_AWAIT_PACKING); - childrens.add(newItemVo); - } } if(StringUtils.isNotBlank(notWashedInfo)){ notWashedInfo += "还未完成清洗,需要完成清洗后才能装配!"; @@ -2279,62 +2457,122 @@ } } } - boolean isUrgent = false;//是否有加急 如果有 那么页面上看到的装配任务的文件夹要按照紧急程度排序 - if(scanBasketTaskMap.size() > 0){ - for(WaitPackingTaskVo vo : scanBasketTaskMap.values()){ - if(enableUrgentFunction){ - Integer urgentAmount = vo.getUrgentAmount(); - if(urgentAmount != null && urgentAmount > 0){ - //设置WaitPackingTaskVo的最高加急信息 - calcAndSetUrgentLevelOfWaitPackingTaskVo(vo); - if(!isUrgent){ - isUrgent = true; + if(enableGroupPendingAssemblyTasksByBasket){ + boolean isUrgent = false;//是否有加急 如果有 那么页面上看到的装配任务的文件夹要按照紧急程度排序 + if(scanGroupBasketTaskMap.size() > 0){ + for(WaitPackingTaskVoGroupClassifyBasket vo : scanGroupBasketTaskMap.values()){ + if(enableUrgentFunction){ + Integer urgentAmount = vo.getUrgentAmount(); + if(urgentAmount != null && urgentAmount > 0){ + //设置WaitPackingTaskVo的最高加急信息 + calcAndSetUrgentLevelOfWaitPackingTaskVo(vo); + if(!isUrgent){ + isUrgent = true; + } } } + waitPackingTaskVoGroupClassifyBaskets.add(vo); } - taskVos.add(vo); } - } - if(unScanBasketTaskMap.size() > 0){ - for(WaitPackingTaskVo vo : unScanBasketTaskMap.values()){ - if(enableUrgentFunction){ - Integer urgentAmount = vo.getUrgentAmount(); - if(urgentAmount != null && urgentAmount > 0){ - //设置WaitPackingTaskVo的最高加急信息 - calcAndSetUrgentLevelOfWaitPackingTaskVo(vo); - if(!isUrgent){ - isUrgent = true; + if(unScanGroupBasketTaskMap.size() > 0){ + for(WaitPackingTaskVoGroupClassifyBasket vo : unScanGroupBasketTaskMap.values()){ + if(enableUrgentFunction){ + Integer urgentAmount = vo.getUrgentAmount(); + if(urgentAmount != null && urgentAmount > 0){ + //设置WaitPackingTaskVo的最高加急信息 + calcAndSetUrgentLevelOfWaitPackingTaskVo(vo); + if(!isUrgent){ + isUrgent = true; + } } } + waitPackingTaskVoGroupClassifyBaskets.add(vo); } - taskVos.add(vo); } - } - boolean haveTimeOutFinal = haveTimeOut?true:false; - if(isUrgent){ - Collections.sort(taskVos,new Comparator() { - @Override - public int compare(WaitPackingTaskVo b1, - WaitPackingTaskVo b2) { - int result = b2.getLastExpectUseTime().compareTo(b1.getLastExpectUseTime()); - if(result != 0){ - return result; + boolean haveTimeOutFinal = haveTimeOut?true:false; + if(isUrgent){ + Collections.sort(waitPackingTaskVoGroupClassifyBaskets,new Comparator() { + @Override + public int compare(WaitPackingTaskVoGroupClassifyBasket b1, + WaitPackingTaskVoGroupClassifyBasket b2) { + int result = b2.getLastExpectUseTime().compareTo(b1.getLastExpectUseTime()); + if(result != 0){ + return result; + } + result = b2.getGrade().compareTo(b1.getGrade()); + if(result != 0){ + return result; + } + return b2.getTimeoutDuration().compareTo(b1.getTimeoutDuration()); } - result = b2.getGrade().compareTo(b1.getGrade()); - if(result != 0){ - return result; + }); + }else if(haveTimeOutFinal){ + Collections.sort(waitPackingTaskVoGroupClassifyBaskets,new Comparator() { + @Override + public int compare(WaitPackingTaskVoGroupClassifyBasket b1, + WaitPackingTaskVoGroupClassifyBasket b2) { + return b2.getTimeoutDuration().compareTo(b1.getTimeoutDuration()); } - return b2.getTimeoutDuration().compareTo(b1.getTimeoutDuration()); + }); + } + }else{ + boolean isUrgent = false;//是否有加急 如果有 那么页面上看到的装配任务的文件夹要按照紧急程度排序 + if(scanBasketTaskMap.size() > 0){ + for(WaitPackingTaskVo vo : scanBasketTaskMap.values()){ + if(enableUrgentFunction){ + Integer urgentAmount = vo.getUrgentAmount(); + if(urgentAmount != null && urgentAmount > 0){ + //设置WaitPackingTaskVo的最高加急信息 + calcAndSetUrgentLevelOfWaitPackingTaskVo(vo); + if(!isUrgent){ + isUrgent = true; + } + } + } + taskVos.add(vo); } - }); - }else if(haveTimeOutFinal){ - Collections.sort(taskVos,new Comparator() { - @Override - public int compare(WaitPackingTaskVo b1, - WaitPackingTaskVo b2) { - return b2.getTimeoutDuration().compareTo(b1.getTimeoutDuration()); + } + if(unScanBasketTaskMap.size() > 0){ + for(WaitPackingTaskVo vo : unScanBasketTaskMap.values()){ + if(enableUrgentFunction){ + Integer urgentAmount = vo.getUrgentAmount(); + if(urgentAmount != null && urgentAmount > 0){ + //设置WaitPackingTaskVo的最高加急信息 + calcAndSetUrgentLevelOfWaitPackingTaskVo(vo); + if(!isUrgent){ + isUrgent = true; + } + } + } + taskVos.add(vo); } - }); + } + boolean haveTimeOutFinal = haveTimeOut?true:false; + if(isUrgent){ + Collections.sort(taskVos,new Comparator() { + @Override + public int compare(WaitPackingTaskVo b1, + WaitPackingTaskVo b2) { + int result = b2.getLastExpectUseTime().compareTo(b1.getLastExpectUseTime()); + if(result != 0){ + return result; + } + result = b2.getGrade().compareTo(b1.getGrade()); + if(result != 0){ + return result; + } + return b2.getTimeoutDuration().compareTo(b1.getTimeoutDuration()); + } + }); + }else if(haveTimeOutFinal){ + Collections.sort(taskVos,new Comparator() { + @Override + public int compare(WaitPackingTaskVo b1, + WaitPackingTaskVo b2) { + return b2.getTimeoutDuration().compareTo(b1.getTimeoutDuration()); + } + }); + } } return taskVos; } @@ -2446,19 +2684,20 @@ } @Override - public List getWaitPackingTaskTaskVoList(String taskGroup, String basketBarcode, JSONObject returnObj, String tousseOrDepart, Integer pageIndex, Integer pageSize) { - return getWaitPackingTaskTaskVoList(null, taskGroup, basketBarcode, returnObj,tousseOrDepart, pageIndex, pageSize); + public List getWaitPackingTaskTaskVoList(String taskGroup, String basketBarcode, JSONObject returnObj, String tousseOrDepart, Integer pageIndex, Integer pageSize, String settleAccountsDepartCoding) { + return getWaitPackingTaskTaskVoList(null, taskGroup, basketBarcode, returnObj,tousseOrDepart, pageIndex, pageSize, null, null, settleAccountsDepartCoding); } /** - * 获取待装配任务分页的文件夹的包名称和任务类型 任务类型返回1 和 0(此处0为非1的数) + * 获取待装配任务分页的文件夹的名称和任务类型 任务类型返回1 和 0(此处0为非1的数) * @param orderByWashTime 是否根据清洗时间排序 目的是实现装配任务按超时顺序排序 * @param taskGroup 任务组 * @param basketBarcode 篮筐条码 * @param pageIndex 第几页 * @param pageSize 每页条数 * @return */ - public List getTousseNamesAndTaskType(boolean orderByWashTime, String taskGroup, String basketBarcode, int pageIndex, int pageSize, Set queryTousseTypes, String tousseOrDepart, String recyclingAmountConfirmSql){ + public List getFoldersAndTaskType(boolean orderByWashTime, String taskGroup, String basketBarcode, int pageIndex, int pageSize, Set queryTousseTypes, String tousseOrDepart, String recyclingAmountConfirmSql, boolean enableGroupPendingAssemblyTasksByBasket, String settleAccountsDepartCoding){ + String tousseTypeAndTaskGroupSql = ""; if(queryTousseTypes.contains(TousseDefinition.PACKAGE_TYPE_FOREIGN) && queryTousseTypes.contains(TousseDefinition.PACKAGE_TYPE_CUSTOM)){ tousseTypeAndTaskGroupSql = " and (td.tousseType in('"+ TousseDefinition.PACKAGE_TYPE_CUSTOM+ "','"+ TousseDefinition.PACKAGE_TYPE_FOREIGN +"','"+ TousseDefinition.PACKAGE_TYPE_FOREIGN +"') or td.ancestorID in(select tousseDefinitionId from CssdHandleTousses where taskGroup='"+ taskGroup +"' ) and td.tousseType not in('"+TousseDefinition.PACKAGE_TYPE_FOREIGN+"','"+TousseDefinition.PACKAGE_TYPE_SPLIT+"','"+TousseDefinition.PACKAGE_TYPE_CUSTOM+"')) "; //外来器械和自定义器械,有专门获取装配任务 @@ -2469,6 +2708,15 @@ }else{ tousseTypeAndTaskGroupSql = " and (td.ancestorID in(select tousseDefinitionId from CssdHandleTousses where taskGroup='"+ taskGroup +"' ) and td.tousseType not in('"+TousseDefinition.PACKAGE_TYPE_FOREIGN+"','"+TousseDefinition.PACKAGE_TYPE_SPLIT+"','"+TousseDefinition.PACKAGE_TYPE_CUSTOM+"')) "; } + String tousseNameOrBasketSlq = null; + String tNameDesc = null; + if(enableGroupPendingAssemblyTasksByBasket){ + tousseNameOrBasketSlq = "t.classifyBasket_id,"; + tNameDesc = ""; + }else{ + tousseNameOrBasketSlq = "t.name,"; + tNameDesc = ",t.name desc"; + } String tousseOrDepartSql = ""; if(StringUtils.isNotBlank(tousseOrDepart)){ // sqlServer如果字符串中有"[",进行转译 @@ -2498,20 +2746,21 @@ boolean isSqlServer = dbConnection.isSqlServer(); String oracleOrderBysql = ""; if(isSqlServer || dbConnection.isMySQLOrTiDB()){ - rowIdSql = " ROW_NUMBER() OVER(order by "+ (orderByWashTime?"max(t.washTime) desc,":"") +"max(t.expectUseTime) desc, max(t.grade) desc, t.taskType desc, t.name desc) AS rowNo,"; + rowIdSql = " ROW_NUMBER() OVER(order by "+ (orderByWashTime?"max(t.washTime) desc,":"") +"max(t.expectUseTime) desc, max(t.grade) desc, t.taskType desc"+ tNameDesc +") AS rowNo,"; }else{ - oracleOrderBysql = " order by "+ (orderByWashTime?" max(t.washTime) desc,":"") +"max(t.expectUseTime) desc, max(t.grade) desc, t.taskType desc, t.name desc "; + oracleOrderBysql = " order by "+ (orderByWashTime?" max(t.washTime) desc,":"") +"max(t.expectUseTime) desc, max(t.grade) desc, t.taskType desc " + tNameDesc; } - String sql = String.format("select " + rowIdSql + "t.name,t.taskType,max(t.washTime) washTime from (select td.name,case when po.taskType="+ PackingTask.TASK_RECYCLINGRECORD +" then 1 else 0 end taskType,ui.expectUseTime,ul.grade,po.washTime from %s po " + String sql = String.format("select " + rowIdSql + tousseNameOrBasketSlq +"t.taskType,max(t.washTime) washTime from (select po.classifyBasket_id,td.name,case when po.taskType="+ PackingTask.TASK_RECYCLINGRECORD +" then 1 else 0 end taskType,ui.expectUseTime,ul.grade,po.washTime from %s po " + " join TousseDefinition td on td.id=po.tousseDefinition_id " + " left join UrgentLevel ul on ul.id=po.urgentLevel_Id " + " left join UrgentAdditionalInfo ui on ui.id=po.urgentAdditionalInfoId where " + " po.orgUnitCoding = '" + AcegiHelper.getLoginUser().getOrgUnitCodingFromSupplyRoomConfig() + "' " + recyclingAmountConfirmSql + + (StringUtils.isNotBlank(settleAccountsDepartCoding)?" and po.settleAccountsDepartCoding='"+ settleAccountsDepartCoding +"'":StringUtils.EMPTY) + " and td.ancestorID in (select id from TousseDefinition where (hidePackingTask is null or hidePackingTask<>'是') and (forDisplay=1 or tousseType='外来器械拆分小包')) %s %s %s" - + ") t group by "+ (orderByWashTime?"t.washTime,":"")+"t.name,t.taskType" + + ") t group by "+ (orderByWashTime?"t.washTime,":"")+ tousseNameOrBasketSlq + "t.taskType" + oracleOrderBysql , PackingTask.class.getSimpleName() ,StringUtils.isBlank(basketBarcode)?"":" and po.basketBarcode like '%" + basketBarcode + "%' " @@ -2528,7 +2777,11 @@ rs = objectDao.executeSql(sql); while(rs.next()){ Object[] obj = new Object[2]; - obj[0] = rs.getObject("name"); + if(enableGroupPendingAssemblyTasksByBasket){ + obj[0] = rs.getObject("classifyBasket_id"); + }else{ + obj[0] = rs.getObject("name"); + } obj[1] = rs.getInt("taskType"); tousseNamesAndTasks.add(obj); } @@ -2573,7 +2826,21 @@ return queryTousseTypes; } @Override - public int getPackingTaskTousseNameCount(String taskGroup, String tousseOrDepart){ + public int getPackingTaskTousseNameCount(String taskGroup, String tousseOrDepart, String settleAccountsDepartCoding){ + //GDSKQYY-7 + boolean enableGroupPendingAssemblyTasksByBasket = CssdUtils.getSystemSetConfigByNameBool("enableGroupPendingAssemblyTasksByBasket", false); + String distinctName = enableGroupPendingAssemblyTasksByBasket?"po.classifyBasket_id":"td.name"; + String sql = "select count(distinct "+ distinctName +") "; + sql += getPackingTaskListTotalwhereSql(taskGroup, tousseOrDepart, false, settleAccountsDepartCoding); + return objectDao.countBySql(sql); + } + /** + * 获取装配任务列表汇总的wheresql + * @param taskGroup + * @param tousseOrDepart + * @return + */ + private String getPackingTaskListTotalwhereSql(String taskGroup, String tousseOrDepart, boolean querySettleAccountsDepart, String settleAccountsDepartCoding){ Set queryTousseTypes = getQueryTousseTypes(taskGroup, supplyRoomConfigManager.getSystemParamsObj()); String tousseTypeAndTaskGroupSql = ""; if(queryTousseTypes.contains(TousseDefinition.PACKAGE_TYPE_FOREIGN) && queryTousseTypes.contains(TousseDefinition.PACKAGE_TYPE_CUSTOM)){ @@ -2585,12 +2852,18 @@ }else{ tousseTypeAndTaskGroupSql = " and (td.ancestorID in(select tousseDefinitionId from CssdHandleTousses where taskGroup='"+ taskGroup +"' ) and td.tousseType not in('"+TousseDefinition.PACKAGE_TYPE_FOREIGN+"','"+TousseDefinition.PACKAGE_TYPE_SPLIT+"','"+TousseDefinition.PACKAGE_TYPE_CUSTOM+"')) "; } - String sql = "select count(distinct td.name) from PackingTask po " + String sql = " from PackingTask po " + " join TousseDefinition td on td.id=po.tousseDefinition_id " + " join TousseDefinition tdc on tdc.id=td.ancestorID " + + (querySettleAccountsDepart?" left join " + + OrgUnit.class.getSimpleName() + + " ou on ou.orgUnitCoding=po.settleAccountsDepartCoding left join " + +SupplyRoomConfig.class.getSimpleName() + +" sc on sc.orgUnitCoding=ou.orgUnitCoding and sc.supplyRoomType=4 ":StringUtils.EMPTY) + " where po.orgUnitCoding = '" + AcegiHelper.getLoginUser().getOrgUnitCodingFromSupplyRoomConfig() + "' and (tdc.hidePackingTask is null or tdc.hidePackingTask<>'是') and (tdc.forDisplay=1 or tdc.tousseType='"+ TousseDefinition.PACKAGE_TYPE_SPLIT +"') " + + (StringUtils.isNotBlank(settleAccountsDepartCoding)?" and po.settleAccountsDepartCoding='"+ settleAccountsDepartCoding +"'":StringUtils.EMPTY) + tousseTypeAndTaskGroupSql; if(StringUtils.isNotBlank(tousseOrDepart)){ // sqlServer如果字符串中有"[",进行转译 @@ -2617,8 +2890,39 @@ } } } - return objectDao.countBySql(sql); + return sql; } + @Override + public JSONArray loadWaitPackingTaskDepart(String taskGroup) { + String sql = "SELECT DISTINCT ou.name, po.settleAccountsDepartCoding,sc.sequence " + + getPackingTaskListTotalwhereSql(taskGroup, null, true, null); + List departList = new ArrayList<>(); + int a= 10; + Set readed = new HashSet();//防止有同名 但序号不同的数据 + try (ResultSet rs = objectDao.executeSql(sql)) { + while (rs.next()) { + JSONObject depart = new JSONObject(); + String name = rs.getString("name"); + if(readed.contains(name)){ + continue; + }else{ + readed.add(name); + } + depart.put("name", name); + + depart.put("settleAccountsDepartCoding", rs.getString("settleAccountsDepartCoding")); + int sequence = rs.getInt("sequence"); + depart.put("sequence", sequence == 0?999:sequence); + departList.add(depart); + } + } catch (SQLException e) { + logger.error("Error loading wait packing task departments for taskGroup: {"+ taskGroup +"}"); + } + departList.sort((JSONObject d1, JSONObject d2) -> Integer.compare(d1.optInt("sequence"),d2.optInt("sequence"))); + JSONArray sortedDeparts = new JSONArray(); + departList.forEach(sortedDeparts::add); + return sortedDeparts; + } /** * 收集装配任务的信息,统一查询篮筐和申请单 * @param taskList 装配任务 @@ -2716,6 +3020,39 @@ vo.setLastExpectUseTime(lastExpectUseTime); } /** + * 设置WaitPackingTaskVo的最高加急信息,供前台使用 + * @param itemsVo + */ + private void calcAndSetUrgentLevelOfWaitPackingTaskVo(WaitPackingTaskVoGroupClassifyBasket vo){ + UrgentLevel maxUl = null; + List itemsVo = vo.getChildren(); + String lastExpectUseTime = ""; + if(itemsVo != null && itemsVo.size() > 0){ + for (int i = 0; i < itemsVo.size(); i++) { + WaitPackingTaskItemVo item = itemsVo.get(i); + UrgentLevel ulOfItem = item.getUrgentLevelObj(); + if(maxUl == null + || (ulOfItem != null + && ulOfItem.getGrade() + > maxUl.getGrade())){ + maxUl = ulOfItem; + } + if(item.getUrgentAdditionalInfo() != null + && StringUtils.isNotBlank(item.getUrgentAdditionalInfo().getExpectUseTimeStr())){ + if(lastExpectUseTime == null || item.getUrgentAdditionalInfo().getExpectUseTimeStr().compareTo(lastExpectUseTime) > 0){ + lastExpectUseTime = item.getUrgentAdditionalInfo().getExpectUseTimeStr(); + } + } + } + } + if(maxUl != null){ + vo.setColorCode(maxUl.getColorCode()); + vo.setUrgentLevel(maxUl.getName()); + vo.setGrade(maxUl.getGrade()); + } + vo.setLastExpectUseTime(lastExpectUseTime); + } + /** * 获取待补充材料所包含的器械包数量 * @param recyclingErrors * @param damages @@ -2818,7 +3155,7 @@ * @return 同时返回PackingTask和TousseDefintion两个实体类,避免多次查询 */ private List findPackingTaskFromCssdHandleToussesConfig(Long packingTaskId, boolean showRecyclingPeopleColumnInPackingTasksList, String taskGroup,String basketBarcode,SupplyRoomConfig config, List tousseNamesAndTaskTypes, String tousseOrDepart, String recyclingAmountConfirmSql, boolean enableUrgentFunction - , boolean enableExtendedInformationOfUrgentFunction) { + , boolean enableExtendedInformationOfUrgentFunction, boolean enableGroupPendingAssemblyTasksByBasket, String settleAccountsDepartCoding) { String orgCode = AcegiHelper.getLoginUser().getOrgUnitCodingFromSupplyRoomConfig(); StringBuffer sbf = new StringBuffer(); String extraOrder = ""; @@ -2871,6 +3208,7 @@ + "where " //+ "po.tousseDefinition_id = td.id and " + "ct.tousseDefinitionId=td.ancestorID " + + (StringUtils.isNotBlank(settleAccountsDepartCoding)?" and po.settleAccountsDepartCoding='"+ settleAccountsDepartCoding +"'":StringUtils.EMPTY) //+ "and po.orgUnitCoding = ct.orgUnitCode " + "and (td.tousseType not in('"+TousseDefinition.PACKAGE_TYPE_FOREIGN+"','"+TousseDefinition.PACKAGE_TYPE_SPLIT+"','"+TousseDefinition.PACKAGE_TYPE_CUSTOM+"')) " //外来器械和自定义器械,有专门获取装配任务 + "and ct.taskGroup = '"+taskGroup+"' and po.orgUnitCoding = '" + orgCode + "' and po.unPackAmount > 0 " + recyclingAmountConfirmSql); @@ -2891,13 +3229,15 @@ + " left join IDCardInstance ii on ii.id=ifp.idCardInstanceID " + " left join IDCardDefinition idn on idn.id=ii.idCardDefinitionID " + leftJoinRecyclingRecordSql + + (StringUtils.isNotBlank(settleAccountsDepartCoding)?" and po.settleAccountsDepartCoding='"+ settleAccountsDepartCoding +"'":StringUtils.EMPTY) + "where po.orgUnitCoding = ct.orgUnitCode " + "and (td.tousseType not in('"+TousseDefinition.PACKAGE_TYPE_FOREIGN+"','"+TousseDefinition.PACKAGE_TYPE_SPLIT+"','"+TousseDefinition.PACKAGE_TYPE_CUSTOM+"')) " //外来器械和自定义器械,有专门获取装配任务 + + (StringUtils.isNotBlank(settleAccountsDepartCoding)?" and po.settleAccountsDepartCoding='"+ settleAccountsDepartCoding +"'":StringUtils.EMPTY) + "and ct.taskGroup = '"+taskGroup+"' and po.orgUnitCoding = '" + orgCode + "' and po.unPackAmount > 0 " + recyclingAmountConfirmSql); } if(DatabaseUtil.isPoIdValid(packingTaskId)){ sbf.append(" and po.id=" + packingTaskId); - }else if(CollectionUtils.isNotEmpty(tousseNamesAndTaskTypes)){ + }else if(!enableGroupPendingAssemblyTasksByBasket && CollectionUtils.isNotEmpty(tousseNamesAndTaskTypes)){ sbf.append(" and ("); for (int i = 0; i < tousseNamesAndTaskTypes.size(); i++) { Object[] tousseNamesAndTaskType = tousseNamesAndTaskTypes.get(i); @@ -2914,6 +3254,29 @@ } } sbf.append(") "); + }else if(enableGroupPendingAssemblyTasksByBasket && CollectionUtils.isNotEmpty(tousseNamesAndTaskTypes)){ + sbf.append(" and ("); + for (int i = 0; i < tousseNamesAndTaskTypes.size(); i++) { + Object[] tousseNamesAndTaskType = tousseNamesAndTaskTypes.get(i); + BigDecimal classifyBasket_idObj = (BigDecimal)tousseNamesAndTaskType[0]; + long classifyBasket_id = classifyBasket_idObj == null?0:classifyBasket_idObj.longValue(); + Integer taskType = (Integer)tousseNamesAndTaskType[1]; + if(i > 0){ + sbf.append(" or "); + } + if(DatabaseUtil.isPoIdValid(classifyBasket_id)){ + sbf.append(" po.classifyBasket_id="+ classifyBasket_id +" and po.taskType"); + }else{ + sbf.append(" po.classifyBasket_id is null and po.taskType"); + } + + if(PackingTask.TASK_RECYCLINGRECORD.equals(taskType)){ + sbf.append("=1 "); + }else{ + sbf.append("<>1 "); + } + } + sbf.append(") "); } if(StringUtils.isNotBlank(tousseOrDepart) && !DatabaseUtil.isPoIdValid(packingTaskId)){ // sqlServer如果字符串中有"[",进行转译 @@ -3019,7 +3382,7 @@ * @param tousseNamesAndTaskTypes 包名称和装配任务类型 * @return 同时返回PackingTask和TousseDefintion两个实体类,避免多次查询 */ - private List findForeignToussePackingTask(Long packingTaskId, boolean showRecyclingPeopleColumnInPackingTasksList, String basketBarcode, boolean enableUrgentFunction, List tousseNamesAndTaskTypes, String tousseOrDepart, String recyclingAmountConfirmSql, boolean enableExtendedInformationOfUrgentFunction) { + private List findForeignToussePackingTask(Long packingTaskId, boolean showRecyclingPeopleColumnInPackingTasksList, String basketBarcode, boolean enableUrgentFunction, List tousseNamesAndTaskTypes, String tousseOrDepart, String recyclingAmountConfirmSql, boolean enableExtendedInformationOfUrgentFunction, boolean enableGroupPendingAssemblyTasksByBasket, String settleAccountsDepartCoding) { String orgCode = AcegiHelper.getLoginUser().getOrgUnitCodingFromSupplyRoomConfig(); String urgentlevelQuery = null; String urgentlevelJoin = null; @@ -3064,7 +3427,8 @@ + urgentlevelJoin + leftJoinRecyclingRecordSql + " where (td.tousseType='"+TousseDefinition.PACKAGE_TYPE_FOREIGN + "' or td.tousseType='" + TousseDefinition.PACKAGE_TYPE_SPLIT + "')" - + " and po.orgUnitCoding = '" + orgCode + "' " + recyclingAmountConfirmSql); + + " and po.orgUnitCoding = '" + orgCode + "' " + recyclingAmountConfirmSql + + (StringUtils.isNotBlank(settleAccountsDepartCoding)?" and po.settleAccountsDepartCoding='"+ settleAccountsDepartCoding +"'":StringUtils.EMPTY)); Container basket = null; if(StringUtils.isNotBlank(basketBarcode)){ //验证篮筐是否清洗 @@ -3082,7 +3446,7 @@ } if(DatabaseUtil.isPoIdValid(packingTaskId)){ sbf.append(" and po.id=" + packingTaskId); - }else if(CollectionUtils.isNotEmpty(tousseNamesAndTaskTypes)){ + }else if(!enableGroupPendingAssemblyTasksByBasket && CollectionUtils.isNotEmpty(tousseNamesAndTaskTypes)){ sbf.append(" and ("); for (int i = 0; i < tousseNamesAndTaskTypes.size(); i++) { Object[] tousseNamesAndTaskType = tousseNamesAndTaskTypes.get(i); @@ -3099,6 +3463,29 @@ } } sbf.append(") "); + }else if(enableGroupPendingAssemblyTasksByBasket && CollectionUtils.isNotEmpty(tousseNamesAndTaskTypes)){ + sbf.append(" and ("); + for (int i = 0; i < tousseNamesAndTaskTypes.size(); i++) { + Object[] tousseNamesAndTaskType = tousseNamesAndTaskTypes.get(i); + BigDecimal classifyBasket_idObj = (BigDecimal)tousseNamesAndTaskType[0]; + long classifyBasket_id = classifyBasket_idObj == null?0:classifyBasket_idObj.longValue(); + Integer taskType = (Integer)tousseNamesAndTaskType[1]; + if(i > 0){ + sbf.append(" or "); + } + if(DatabaseUtil.isPoIdValid(classifyBasket_id)){ + sbf.append(" po.classifyBasket_id="+ classifyBasket_id +" and po.taskType"); + }else{ + sbf.append(" po.classifyBasket_id is null and po.taskType"); + } + + if(PackingTask.TASK_RECYCLINGRECORD.equals(taskType)){ + sbf.append("=1 "); + }else{ + sbf.append("<>1 "); + } + } + sbf.append(") "); } if(StringUtils.isNotBlank(tousseOrDepart) && !DatabaseUtil.isPoIdValid(packingTaskId)){ // sqlServer如果字符串中有"[",进行转译 @@ -3135,7 +3522,7 @@ * @param tousseNamesAndTaskTypes 包名称和装配任务类型 * @return 同时返回PackingTask和TousseDefintion两个实体类,避免多次查询 */ - private List findCustomerToussePackingTask(Long packingTaskId, boolean showRecyclingPeopleColumnInPackingTasksList, String basketBarcode, List tousseNamesAndTaskTypes, String tousseOrDepart, String recyclingAmountConfirmSql, boolean enableUrgentFunction, boolean enableExtendedInformationOfUrgentFunction) { + private List findCustomerToussePackingTask(Long packingTaskId, boolean showRecyclingPeopleColumnInPackingTasksList, String basketBarcode, List tousseNamesAndTaskTypes, String tousseOrDepart, String recyclingAmountConfirmSql, boolean enableUrgentFunction, boolean enableExtendedInformationOfUrgentFunction, boolean enableGroupPendingAssemblyTasksByBasket, String settleAccountsDepartCoding) { String orgCode = AcegiHelper.getLoginUser().getOrgUnitCodingFromSupplyRoomConfig(); String selectRecyclingUserSql = null; String leftJoinRecyclingRecordSql = null; @@ -3176,7 +3563,9 @@ + " left join IDCardInstance ii on ii.id=ifp.idCardInstanceID " + " left join IDCardDefinition idn on idn.id=ii.idCardDefinitionID " + leftJoinRecyclingRecordSql - + "where td.tousseType='"+TousseDefinition.PACKAGE_TYPE_CUSTOM+"' and po.orgUnitCoding = '" + orgCode + "' " + recyclingAmountConfirmSql); + + "where td.tousseType='"+TousseDefinition.PACKAGE_TYPE_CUSTOM+"' and po.orgUnitCoding = '" + orgCode + "' " + + (StringUtils.isNotBlank(settleAccountsDepartCoding)?" and po.settleAccountsDepartCoding='"+ settleAccountsDepartCoding +"'":StringUtils.EMPTY) + + recyclingAmountConfirmSql); if(StringUtils.isNotBlank(basketBarcode)){ //验证篮筐是否清洗 Container basket = containerManager @@ -3191,7 +3580,7 @@ } if(DatabaseUtil.isPoIdValid(packingTaskId)){ sbf.append(" and po.id=" + packingTaskId); - }else if(CollectionUtils.isNotEmpty(tousseNamesAndTaskTypes)){ + }else if(!enableGroupPendingAssemblyTasksByBasket && CollectionUtils.isNotEmpty(tousseNamesAndTaskTypes)){ sbf.append(" and ("); for (int i = 0; i < tousseNamesAndTaskTypes.size(); i++) { Object[] tousseNamesAndTaskType = tousseNamesAndTaskTypes.get(i); @@ -3208,6 +3597,29 @@ } } sbf.append(") "); + }else if(enableGroupPendingAssemblyTasksByBasket && CollectionUtils.isNotEmpty(tousseNamesAndTaskTypes)){ + sbf.append(" and ("); + for (int i = 0; i < tousseNamesAndTaskTypes.size(); i++) { + Object[] tousseNamesAndTaskType = tousseNamesAndTaskTypes.get(i); + BigDecimal classifyBasket_idObj = (BigDecimal)tousseNamesAndTaskType[0]; + long classifyBasket_id = classifyBasket_idObj == null?0:classifyBasket_idObj.longValue(); + Integer taskType = (Integer)tousseNamesAndTaskType[1]; + if(i > 0){ + sbf.append(" or "); + } + if(DatabaseUtil.isPoIdValid(classifyBasket_id)){ + sbf.append(" po.classifyBasket_id="+ classifyBasket_id +" and po.taskType"); + }else{ + sbf.append(" po.classifyBasket_id is null and po.taskType"); + } + + if(PackingTask.TASK_RECYCLINGRECORD.equals(taskType)){ + sbf.append("=1 "); + }else{ + sbf.append("<>1 "); + } + } + sbf.append(") "); } if(StringUtils.isNotBlank(tousseOrDepart) && !DatabaseUtil.isPoIdValid(packingTaskId)){ // sqlServer如果字符串中有"[",进行转译 @@ -4639,7 +5051,7 @@ } } for (PackingTask packingTask : packingTaskList) { - List vos = getWaitPackingTaskTaskVoList(packingTask.getId(), taskGroup, null, null,null, 0, 0); + List vos = getWaitPackingTaskTaskVoList(packingTask.getId(), taskGroup, null, null,null, 0, 0, null, null, null); if(CollectionUtils.isNotEmpty(vos)){ for (WaitPackingTaskVo vo : vos) { List childrens = vo.getChildren(); Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/PackingAction.java =================================================================== diff -u -r38866 -r40694 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/PackingAction.java (.../PackingAction.java) (revision 38866) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/PackingAction.java (.../PackingAction.java) (revision 40694) @@ -732,8 +732,11 @@ String taskGroup = StrutsParamUtils.getPraramValue("taskGroup", null); int pageIndex = StrutsParamUtils.getPraramValue("pageIndex", 1); int pageSize = StrutsParamUtils.getPraramValue("pageSize", 20); + String settleAccountsDepartCoding = StrutsParamUtils.getPraramValue("settleAccountsDepartCoding", null); String tousseOrDepart = StrutsParamUtils.getPraramValue("tousseOrDepart", null); - StrutsResponseUtils.output(packingManager.getWaitPackingTaskJson(taskGroup,tousseOrDepart,pageIndex,pageSize)); + SqlUtils.checkInputParam(settleAccountsDepartCoding); + SqlUtils.checkInputParam(tousseOrDepart); + StrutsResponseUtils.output(packingManager.getWaitPackingTaskJson(taskGroup,tousseOrDepart,pageIndex,pageSize, settleAccountsDepartCoding)); } catch (Exception e) { e.printStackTrace(); StrutsResponseUtils.output(new JSONArray()); @@ -745,7 +748,9 @@ try { String taskGroup = StrutsParamUtils.getPraramValue("taskGroup", null); String tousseOrDepart = StrutsParamUtils.getPraramValue("tousseOrDepart", null); - int totalCount = packingManager.getPackingTaskTousseNameCount(taskGroup, tousseOrDepart); + String settleAccountsDepartCoding = StrutsParamUtils.getPraramValue("settleAccountsDepartCoding", null); + SqlUtils.checkInputParam(settleAccountsDepartCoding); + int totalCount = packingManager.getPackingTaskTousseNameCount(taskGroup, tousseOrDepart, settleAccountsDepartCoding); int pageSize = StrutsParamUtils.getPraramValue("pageSize", 20); int pageNo = 0; if(totalCount > 0){ @@ -761,6 +766,20 @@ } StrutsResponseUtils.output(obj); } + //获取待装配任务所属结算科室信息 + public void loadWaitPackingTaskDepartJson(){ + JSONObject obj = new JSONObject(); + try { + String taskGroup = StrutsParamUtils.getPraramValue("taskGroup", null); + obj.put("departs", packingManager.loadWaitPackingTaskDepart(taskGroup)); + JSONUtil.addSuccess(obj, true); + } catch (Exception e) { + e.printStackTrace(); + JSONUtil.addSuccess(obj, false); + obj.put("message", e.getMessage()); + } + StrutsResponseUtils.output(obj); + } // 扫描清洗篮筐获取装配任务 public void loadPackingTaskByBasketBarCode(){ String basketBarcode = StrutsParamUtils.getPraramValue("basketBarcode", null); @@ -773,7 +792,9 @@ JSONObject returnObj = new JSONObject(); int pageIndex = StrutsParamUtils.getPraramValue("pageIndex", 0); int pageSize = StrutsParamUtils.getPraramValue("pageSize", 0); - JSONArray taskVos = packingManager.getWaitPackingTaskJson(taskGroup,basketBarcode,returnObj,pageIndex, pageSize); + String settleAccountsDepartCoding = StrutsParamUtils.getPraramValue("settleAccountsDepartCoding", null); + SqlUtils.checkInputParam(settleAccountsDepartCoding); + JSONArray taskVos = packingManager.getWaitPackingTaskJson(taskGroup,basketBarcode,returnObj,pageIndex, pageSize, settleAccountsDepartCoding); retObj.put("data", taskVos); retObj.put("notWashedInfo", returnObj.optString("notWashedInfo")); JSONUtil.addSuccess(retObj, true);