Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedata/becleanitem/service/ClassifyBasketManagerImpl.java =================================================================== diff -u -r40861 -r41397 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedata/becleanitem/service/ClassifyBasketManagerImpl.java (.../ClassifyBasketManagerImpl.java) (revision 40861) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedata/becleanitem/service/ClassifyBasketManagerImpl.java (.../ClassifyBasketManagerImpl.java) (revision 41397) @@ -16,7 +16,6 @@ import org.apache.commons.collections.MapUtils; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.StringUtils; -import org.springframework.dao.InvalidDataAccessResourceUsageException; import com.forgon.Constants; import com.forgon.directory.acegi.tools.AcegiHelper; @@ -183,9 +182,9 @@ } @Override - public List loadPendingWashBasketAndClassifiedItemInfos(){ + public List loadPendingWashBasketAndClassifiedItemInfos(String settleAccountsDepartCoding){ //sql语句 - String sql = getPendingWashBasketAndClassifiedItemSql(); + String sql = getPendingWashBasketAndClassifiedItemSql(settleAccountsDepartCoding); List pendingWashBasketDtos = new ArrayList(); List classifiedItemInfoDtoVos = new ArrayList(); //1、获取待清洗篮筐列表数据 @@ -267,9 +266,9 @@ * 获取sql语句:待清洗篮框信息及篮框明细物品信息 * @return string */ - private String getPendingWashBasketAndClassifiedItemSql() { - String coding = AcegiHelper.getLoginUser().getOrgUnitCodingFromSupplyRoomConfig(); - String codingSql = StringUtils.isBlank(coding)?"1=1":String.format("c.departCode='%s'",coding); + private String getPendingWashBasketAndClassifiedItemSql(String settleAccountsDepartCoding) { + //String coding = AcegiHelper.getLoginUser().getOrgUnitCodingFromSupplyRoomConfig(); + //String codingSql = StringUtils.isBlank(coding)?"1=1":String.format("c.departCode='%s'",coding); StringBuilder sql = new StringBuilder(); //select sql.append(" select cb.containerBarcode,cb.recyclingTime cbRecyclingTime,cb.containerName,cb.id classifybasketID , " + @@ -286,18 +285,35 @@ " left join MaterialDefinition md on md.id = ci.materialdefinition_id "+ " left join TousseDefinition td on td.id = ci.toussedefinition_id "+ " left join RecyclingRecord rr on rr.id = ci.recyclingRecordId "); + if(StringUtils.isNotBlank(settleAccountsDepartCoding)){ + sql.append(" left join InvoicePlan ip on ip.id = rr.recyclingApplication_id "); + } //where - sql.append(String.format(" where c.purpose = '%s' and %s and c.status = '%s' "+ - " and not exists (select 1 from ClassifyBasket_WashRecord cw where cw.ClassifyBasket_ID=cb.id ) "+ - " and cb.classifyBasketStatus = 0 " + - " and not exists (select 1 from PackingRecord_ClassifyBasket where classifyBasketId is not null and cb.id = classifyBasketId) " - , Container.CONTAINER_PURPOSE_CLEAN_BASKET,codingSql,Container.CONTAINER_STATUS_WASHLOADING)); + sql.append(this.getPendingWashBasketAndClassifiedItemWhereSql()); + + if(StringUtils.isNotBlank(settleAccountsDepartCoding)){ + sql.append(" and ip.settleAccountsDepartCoding = '" + settleAccountsDepartCoding + "'"); + } + //order sql.append(" order by cb.recyclingTime desc "); return sql.toString(); } + private String getPendingWashBasketAndClassifiedItemWhereSql(){ + String coding = AcegiHelper.getLoginUser().getOrgUnitCodingFromSupplyRoomConfig(); + String codingSql = StringUtils.isBlank(coding)?"1=1":String.format("c.departCode='%s'",coding); + StringBuilder sql = new StringBuilder(); + //where + sql.append(String.format(" where c.purpose = '%s' and %s and c.status = '%s' "+ + " and not exists (select 1 from ClassifyBasket_WashRecord cw where cw.ClassifyBasket_ID=cb.id ) "+ + " and cb.classifyBasketStatus = 0 " + + " and not exists (select 1 from PackingRecord_ClassifyBasket where classifyBasketId is not null and cb.id = classifyBasketId) " + , Container.CONTAINER_PURPOSE_CLEAN_BASKET,codingSql,Container.CONTAINER_STATUS_WASHLOADING)); + return sql.toString(); + } + @Override public boolean isPackingBasket(String classifyBasketId) { if (StringUtils.isNotBlank(classifyBasketId)) { @@ -884,5 +900,47 @@ } return false; } + + @Override + public List> getPendingWashAndDisinfectBasketSettleAccountsDepart() { + + List> settleAccountsDepartMapList = new ArrayList>(); + + StringBuilder sql = new StringBuilder(); + //select + sql.append(" select ip.settleAccountsDepartCoding, ip.settleAccountsDepart "); + //from join + sql.append(" from Container c "); + sql.append(" join ClassifyBasket cb on cb.containerName = c.containerName "); + sql.append(" join ClassifiedItem ci on ci.classifybasket_id = cb.id "); + sql.append(" join RecyclingRecord rr on rr.id = ci.recyclingRecordId "); + sql.append(" join InvoicePlan ip on ip.id = rr.recyclingApplication_id "); + //where + sql.append(this.getPendingWashBasketAndClassifiedItemWhereSql()); + + Set settleAccountsDepartCodingSet = new HashSet(); + ResultSet rs = null; + try { + rs = objectDao.executeSql(sql.toString()); + while(rs.next()){ + String settleAccountsDepartCoding = rs.getString("settleAccountsDepartCoding"); + String settleAccountsDepart = rs.getString("settleAccountsDepart"); + if(settleAccountsDepartCodingSet.contains(settleAccountsDepartCoding)){ + continue; + } + settleAccountsDepartCodingSet.add(settleAccountsDepartCoding); + Map settleAccountsDepartMap = new HashMap(); + settleAccountsDepartMap.put("settleAccountsDepartCoding", settleAccountsDepartCoding); + settleAccountsDepartMap.put("settleAccountsDepart", settleAccountsDepart); + settleAccountsDepartMapList.add(settleAccountsDepartMap); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + + return settleAccountsDepartMapList; + } } Index: ssts-wash/src/main/java/com/forgon/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/action/WashAndDisinfectRecordAction.java =================================================================== diff -u -r40302 -r41397 --- ssts-wash/src/main/java/com/forgon/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/action/WashAndDisinfectRecordAction.java (.../WashAndDisinfectRecordAction.java) (revision 40302) +++ ssts-wash/src/main/java/com/forgon/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/action/WashAndDisinfectRecordAction.java (.../WashAndDisinfectRecordAction.java) (revision 41397) @@ -21,6 +21,7 @@ import net.sf.json.JsonConfig; import net.sf.json.util.PropertyFilter; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.StringUtils; import org.apache.struts2.convention.annotation.Action; @@ -38,7 +39,6 @@ import com.forgon.disinfectsystem.common.StdSchedulerTools; import com.forgon.disinfectsystem.entity.basedatamanager.cleanmethod.CleanMethod; import com.forgon.disinfectsystem.entity.basedatamanager.container.Container; -import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; import com.forgon.disinfectsystem.entity.becleanitem.ClassifyBasket; import com.forgon.disinfectsystem.entity.washanddisinfectmanager.washanddisinfectrecord.WashAndDisinfectPic; import com.forgon.disinfectsystem.entity.washanddisinfectmanager.washanddisinfectrecord.WashAndDisinfectRecord; @@ -402,13 +402,32 @@ public void getPendingWashAndDisinfectTousseAndBasket(){ try { -// JSONArray jsonArray = washAndDisinfectRecordManager.getPendingWashAndDisinfectTousseAndBasket(); - JSONArray jsonArray = washAndDisinfectRecordManager.getPendingWashAndDisinfectTousseAndBasket2(); +// JSONArray jsonArray = washAndDisinfectRecordManager.getPendingWashAndDisinfectTousseAndBasket(); + //清洗篮筐在回收记录单上的申请科室所对应的结算科室 + String settleAccountsDepartCoding = StrutsParamUtils.getPraramValue("settleAccountsDepartCoding", ""); + JSONArray jsonArray = washAndDisinfectRecordManager.getPendingWashAndDisinfectTousseAndBasket2(settleAccountsDepartCoding); StrutsResponseUtils.output(jsonArray); } catch (Exception e) { e.printStackTrace(); } } + + /** + * 查询待清洗篮筐关联的结算科室(清洗篮筐在回收记录单上的申请科室所对应的结算科室) + */ + public void getPendingWashAndDisinfectBasketSettleAccountsDepart(){ + JSONObject result = JSONUtil.buildJsonObject(true); + try { + List> settleAccountsDepartList = classifyBasketManager.getPendingWashAndDisinfectBasketSettleAccountsDepart(); + if(CollectionUtils.isNotEmpty(settleAccountsDepartList)){ + result = JSONUtil.buildJsonObject(true, JSONArray.fromObject(settleAccountsDepartList)); + } + } catch (Exception e) { + e.printStackTrace(); + result = JSONUtil.buildJsonObject(false, e.getMessage()); + } + StrutsResponseUtils.output(result); + } public void iniInfo() { Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedata/becleanitem/service/ClassifyBasketManager.java =================================================================== diff -u -r40302 -r41397 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedata/becleanitem/service/ClassifyBasketManager.java (.../ClassifyBasketManager.java) (revision 40302) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedata/becleanitem/service/ClassifyBasketManager.java (.../ClassifyBasketManager.java) (revision 41397) @@ -2,6 +2,7 @@ import java.util.Collection; import java.util.List; +import java.util.Map; import java.util.Set; import com.forgon.disinfectsystem.dto.PendingWashBasketDto; @@ -75,10 +76,11 @@ public boolean isPackingBasket(String classifyBasketId); /** - * + * 查询待清洗篮筐信息 + * @param settleAccountsDepartCoding 清洗篮筐在回收记录单上的申请科室所对应的结算科室 * @return */ - public List loadPendingWashBasketAndClassifiedItemInfos(); + public List loadPendingWashBasketAndClassifiedItemInfos(String settleAccountsDepartCoding); /** * 获取篮筐的清洗记录条数 * @param classifyBasketId @@ -110,4 +112,10 @@ * @param willReturnTousseDefinitions 外来器械包、拆分小包的包定义 */ public void releaseBasketAfterReturnTousseDefinition(ForeignTousseApplication foreignTousseApplication, List willReturnTousseDefinitions, String actionType); + + /** + * 查询待清洗篮筐关联的结算科室(清洗篮筐在回收记录单上的申请科室所对应的结算科室) + * @return 结算科室map + */ + public List> getPendingWashAndDisinfectBasketSettleAccountsDepart(); } Index: ssts-wash/src/main/java/com/forgon/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/service/WashAndDisinfectRecordManager.java =================================================================== diff -u -r41008 -r41397 --- ssts-wash/src/main/java/com/forgon/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/service/WashAndDisinfectRecordManager.java (.../WashAndDisinfectRecordManager.java) (revision 41008) +++ ssts-wash/src/main/java/com/forgon/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/service/WashAndDisinfectRecordManager.java (.../WashAndDisinfectRecordManager.java) (revision 41397) @@ -254,9 +254,10 @@ /** * 获取待清洗篮筐列表 * 优化版 + * @param settleAccountsDepartCoding 结算科室编码 * @return */ - public JSONArray getPendingWashAndDisinfectTousseAndBasket2(); + public JSONArray getPendingWashAndDisinfectTousseAndBasket2(String settleAccountsDepartCoding); /** * 根据篮筐条码加载每个篮筐实例的内容 Index: ssts-wash/src/main/java/com/forgon/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/service/WashAndDisinfectRecordManagerImpl.java =================================================================== diff -u -r41232 -r41397 --- ssts-wash/src/main/java/com/forgon/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/service/WashAndDisinfectRecordManagerImpl.java (.../WashAndDisinfectRecordManagerImpl.java) (revision 41232) +++ ssts-wash/src/main/java/com/forgon/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/service/WashAndDisinfectRecordManagerImpl.java (.../WashAndDisinfectRecordManagerImpl.java) (revision 41397) @@ -20,7 +20,6 @@ import java.util.regex.Pattern; import java.util.stream.Collectors; -import com.fasterxml.jackson.databind.ObjectMapper; import com.forgon.disinfectsystem.entity.washanddisinfectmanager.washData.*; import com.forgon.tools.util.PathUtils; @@ -84,7 +83,6 @@ import com.forgon.disinfectsystem.entity.basedatamanager.reportoption.GoodsOption; import com.forgon.disinfectsystem.entity.basedatamanager.rinser.Rinser; import com.forgon.disinfectsystem.entity.basedatamanager.rinser.RinserDepartment; -import com.forgon.disinfectsystem.entity.basedatamanager.sterilizer.Sterilizer; import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.ClassifyBasket_TousseInstance; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; @@ -102,7 +100,6 @@ import com.forgon.disinfectsystem.entity.qualitymonitoringmanager.qualitymonitoring.QualityMonitoringInstance; import com.forgon.disinfectsystem.entity.recyclingrecord.RecyclingItem; import com.forgon.disinfectsystem.entity.recyclingrecord.RecyclingRecord; -import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationRecord; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.GtWD500Details; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.GtWD500Record; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizerrecord.JKNQX1500Record; @@ -3767,9 +3764,9 @@ } @Override - public JSONArray getPendingWashAndDisinfectTousseAndBasket2() { + public JSONArray getPendingWashAndDisinfectTousseAndBasket2(String settleAccountsDepartCoding) { //1、获取待清洗篮筐列表数据 - List pendingWashBasketVos = classifyBasketManager.loadPendingWashBasketAndClassifiedItemInfos(); + List pendingWashBasketVos = classifyBasketManager.loadPendingWashBasketAndClassifiedItemInfos(settleAccountsDepartCoding); JSONArray resultArray = new JSONArray(); JSONArray notTimeoutJsonArray = new JSONArray();//未超时的篮筐,需要放在后面 TimeoutSetting timeoutSetting = timeoutManager.getTimeoutSetting(TimeoutManager.PROCEDURE_RECYCLE_TO_WASH); Index: ssts-web/src/test/java/test/forgon/disinfectsystem/recyclingrecord/AllTests.java =================================================================== diff -u -r40684 -r41397 --- ssts-web/src/test/java/test/forgon/disinfectsystem/recyclingrecord/AllTests.java (.../AllTests.java) (revision 40684) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/recyclingrecord/AllTests.java (.../AllTests.java) (revision 41397) @@ -30,7 +30,8 @@ AssociatedWashDataTests.class, RecyclingRecordTableManagerTests.class, FindWashDataListTest.class, - AssociatedWashDataTests.class}) + AssociatedWashDataTests.class, + ClassifyBasketManagerTest.class}) public class AllTests { } Index: ssts-web/src/test/java/test/forgon/disinfectsystem/recyclingrecord/service/ClassifyBasketManagerTest.java =================================================================== diff -u --- ssts-web/src/test/java/test/forgon/disinfectsystem/recyclingrecord/service/ClassifyBasketManagerTest.java (revision 0) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/recyclingrecord/service/ClassifyBasketManagerTest.java (revision 41397) @@ -0,0 +1,120 @@ +package test.forgon.disinfectsystem.recyclingrecord.service; + +import static org.junit.Assert.*; + +import java.util.List; +import java.util.Map; + +import org.apache.commons.lang.StringUtils; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import com.forgon.directory.acegi.tools.AcegiHelper; +import com.forgon.disinfectsystem.basedata.becleanitem.service.ClassifyBasketManager; +import com.forgon.disinfectsystem.dto.PendingWashBasketDto; +import com.forgon.disinfectsystem.entity.basedatamanager.container.Container; +import com.forgon.disinfectsystem.entity.becleanitem.ClassifiedItem; +import com.forgon.disinfectsystem.entity.becleanitem.ClassifyBasket; +import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; +import com.forgon.disinfectsystem.entity.recyclingrecord.RecyclingRecord; +import com.forgon.runwithtrans.model.RunWithTransNewTask; +import com.forgon.tools.date.DateTools; + +import test.forgon.disinfectsystem.AbstractCSSDTest; + +public class ClassifyBasketManagerTest extends AbstractCSSDTest { + + @Autowired + private ClassifyBasketManager classifyBasketManager; + + /** + * 测试结算科室编码 + */ + private String settleAccountsDepartCoding; + /** + * 测试清洗篮筐 + */ + private String containerName; + /** + * 清洗篮筐条码 + */ + private String containerBarcode; + + /** + * 生成测试数据 + */ + private void prepareDate(){ + this.initCSSDData(); + settleAccountsDepartCoding = "测试结算科室编码" + DateTools.getCurrentDayByFormat(DateTools.COMMON_DATE_HMS); + //新建清洗篮筐Container、篮筐状态为"清洗装载" + containerName = "测试清洗篮筐" + DateTools.getCurrentDayByFormat(DateTools.COMMON_DATE_HMS); + containerBarcode = "清洗篮筐条码" + DateTools.getCurrentDayByFormat(DateTools.COMMON_DATE_HMS); + runWithTransNewManager.runWith_TRANS_NEW(new RunWithTransNewTask() { + @Override + public void runTask() { + //回收记录RecyclingRecord及其关联的申请单InvoicePlan + InvoicePlan recyclingApplication = new InvoicePlan(); + recyclingApplication.setSettleAccountsDepartCoding(settleAccountsDepartCoding); + objectDao.save(recyclingApplication); + RecyclingRecord recyclingRecord = new RecyclingRecord(); + recyclingRecord.setRecyclingApplication(recyclingApplication); + objectDao.save(recyclingRecord); + //清洗篮筐 + Container c = new Container(); + c.setBarcode(containerBarcode); + c.setContainerName(containerName); + c.setPurpose(Container.CONTAINER_PURPOSE_CLEAN_BASKET); + c.setStatus(Container.CONTAINER_STATUS_WASHLOADING); + c.setDepartCode(AcegiHelper.getLoginUser().getOrgUnitCodingFromSupplyRoomConfig()); + objectDao.save(c); + //清洗篮筐实例ClassifyBasket、洗篮筐装载的物品ClassifiedItem + ClassifyBasket classifyBasket = new ClassifyBasket(); + classifyBasket.setContainerName(containerName); + classifyBasket.setContainerBarcode(containerBarcode); + objectDao.save(classifyBasket); + ClassifiedItem classifiedItem = new ClassifiedItem(); + classifiedItem.setClassifyBasket(classifyBasket); + classifiedItem.setRecyclingRecordId(recyclingRecord.getId()); + objectDao.save(classifiedItem); + objectDao.getHt().flush(); + } + }); + } + + /** + * 根据结算科室查询待清洗篮筐信息 + */ + @Test + public void loadPendingWashBasketAndClassifiedItemInfosTest(){ + this.prepareDate(); + List pendingWashBasketDtoList = classifyBasketManager.loadPendingWashBasketAndClassifiedItemInfos(settleAccountsDepartCoding); + assertTrue(pendingWashBasketDtoList.size() > 0); + PendingWashBasketDto targetPendingWashBasketDto = null; + for (PendingWashBasketDto pendingWashBasketDto : pendingWashBasketDtoList) { + if(StringUtils.equals(pendingWashBasketDto.getContainerBarcode(), containerBarcode)){ + targetPendingWashBasketDto = pendingWashBasketDto; + break; + } + } + assertNotNull(targetPendingWashBasketDto); + } + + /** + * 查询待清洗篮筐关联的结算科室(清洗篮筐在回收记录单上的申请科室所对应的结算科室) + */ + @Test + public void getPendingWashAndDisinfectBasketSettleAccountsDepartTest(){ + this.prepareDate(); + List> settleAccountsDepartMapList = classifyBasketManager.getPendingWashAndDisinfectBasketSettleAccountsDepart(); + assertTrue(settleAccountsDepartMapList.size() > 0); + Map settleAccountsDepartMap = null; + for (Map map : settleAccountsDepartMapList) { + if(StringUtils.equals(map.get("settleAccountsDepartCoding"), settleAccountsDepartCoding)){ + settleAccountsDepartMap = map; + break; + } + } + assertNotNull(settleAccountsDepartMap); + } + +}