Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManager.java =================================================================== diff -u -r32533 -r34000 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManager.java (.../TousseDefinitionManager.java) (revision 32533) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManager.java (.../TousseDefinitionManager.java) (revision 34000) @@ -5,6 +5,8 @@ import java.util.Map; import java.util.Set; +import javax.servlet.http.HttpSession; + import net.sf.json.JSONArray; import net.sf.json.JSONObject; @@ -785,7 +787,7 @@ * 批量修改器械包定义属性 * @param modifyTousseDefinitionDto 批量修改器械包dto */ - public void batchModifyTousseDefinition(ModifyTousseDefinitionDto modifyTousseDefinitionDto); + public void batchModifyTousseDefinition(ModifyTousseDefinitionDto modifyTousseDefinitionDto, HttpSession session); /** * 修改器械包定义单个属性 Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java =================================================================== diff -u -r33610 -r34000 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java (.../TousseDefinitionManagerImpl.java) (revision 33610) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java (.../TousseDefinitionManagerImpl.java) (revision 34000) @@ -6,8 +6,10 @@ import java.io.UnsupportedEncodingException; import java.lang.reflect.Method; import java.math.BigDecimal; +import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.sql.Timestamp; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -25,10 +27,13 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; +import javax.servlet.http.HttpSession; + import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.apache.commons.beanutils.ConvertUtils; +import org.apache.commons.collections.MapUtils; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang3.ArrayUtils; @@ -43,6 +48,8 @@ import org.hibernate.Session; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.BatchPreparedStatementSetter; +import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Component; import com.beust.jcommander.ParameterException; @@ -70,6 +77,7 @@ import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.ComboTousseOrgUint; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.ForeignTousseCombo; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinitionBelongDepart; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; import com.forgon.disinfectsystem.entity.basedatamanager.videomanager.VideoFile; import com.forgon.disinfectsystem.entity.becleanitem.ClassifiedItem; @@ -168,7 +176,13 @@ private SqlFunctionsAdapter sqlFunctionsAdapter; private DataModifyRecordManager dataModifyRecordManager; + + private JdbcTemplate jdbcTemplate; + public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { + this.jdbcTemplate = jdbcTemplate; + } + public void setDataModifyRecordManager(DataModifyRecordManager dataModifyRecordManager) { this.dataModifyRecordManager = dataModifyRecordManager; } @@ -4801,7 +4815,10 @@ } @Override - public void batchModifyTousseDefinition(ModifyTousseDefinitionDto modifyTousseDefinitionDto){ + public void batchModifyTousseDefinition(ModifyTousseDefinitionDto modifyTousseDefinitionDto, HttpSession session){ + + setSessionAttribute(session, "开始批量修改包定义"); + Long startTime = System.currentTimeMillis(); String isDisable = modifyTousseDefinitionDto.getIsDisable();//是否停用 String packageSize = modifyTousseDefinitionDto.getPackageSize();//包大小 String price = modifyTousseDefinitionDto.getPrice();//价格 @@ -4816,73 +4833,419 @@ String isPacking = modifyTousseDefinitionDto.getIsPacking();//是否装配 String isReview = modifyTousseDefinitionDto.getIsReview();//是否审核 String isConvertApplyGoods = modifyTousseDefinitionDto.getIsConvertApplyGoods();//是否转换申请物品 + String belongOrgUnitCodes = modifyTousseDefinitionDto.getBelongOrgUnitCodes(); + + //改动记录集合 + List dataModifyRecordList = new ArrayList(); + Date modifyDateTime = new Date(); + Long modifyUserID = AcegiHelper.getLoginUser().getUserId(); + String idColumnName = ""; + String idColumnValue = ""; + if(dbConnection.isOracle()){ + idColumnName = " id, "; + idColumnValue = " HIBERNATE_SEQUENCE.Nextval, "; + } + //修改属性名称和修改值的map + Map filedValueMap = new HashMap(); + //根据器械包ids获取器械包定义 + List tousseDefinitionIds = modifyTousseDefinitionDto.getTousseDefinitionIds(); + //不是消毒物品的器械包定义id + List notDisinfectionTDIds = new ArrayList(); //若批量修改属性存在不为空则:开始批量修改 - if(StringUtils.isNotEmpty(isDisable) || StringUtils.isNotEmpty(packageSize) + List needModifys = this.getTousseDefinitionCollection(tousseDefinitionIds); + if(CollectionUtils.isEmpty(needModifys)){ + throw new RuntimeException("包定义不存在!"); + } + if((StringUtils.isNotEmpty(isDisable) || StringUtils.isNotEmpty(packageSize) || StringUtils.isNotEmpty(price) || StringUtils.isNotEmpty(borrowPrice) || StringUtils.isNotEmpty(packageType) || StringUtils.isNotEmpty(taskGroup) || StringUtils.isNotEmpty(barcodePaperType) || StringUtils.isNotEmpty(sterilingMethod) || StringUtils.isNotEmpty(tousseGroupID) || StringUtils.isNotEmpty(tousseGroupName) || StringUtils.isNotEmpty(isRecycling) || StringUtils.isNotEmpty(isPacking) - || StringUtils.isNotEmpty(isReview) || StringUtils.isNotEmpty(isConvertApplyGoods)){ - //根据器械包ids获取器械包定义 - List tousseDefinitionIds = modifyTousseDefinitionDto.getTousseDefinitionIds(); - List needModifys = this.getCollectionForUpdate(tousseDefinitionIds); - for (TousseDefinition origineTd : needModifys) { - //复制源器械包定义 - TousseDefinition tousseDefinition = new TousseDefinition(); - BeanUtils.copyProperties(origineTd, tousseDefinition); -// tousseDefinition.setOrginalName(origineTd.getName());//防止因为名字不一致而触发名称修改 + || StringUtils.isNotEmpty(isReview) || StringUtils.isNotEmpty(isConvertApplyGoods))){ + for (TousseDefinition tousseDefinition : needModifys) { //若修改属性不为空则修改 - if(StringUtils.isNotEmpty(isDisable)){//是否停用 - tousseDefinition.setIsDisable(isDisable); + if(StringUtils.isNotEmpty(isDisable) && !StringUtils.equals(tousseDefinition.getIsDisable(), isDisable)){//是否停用 + addDataModifyRecord(dataModifyRecordList, tousseDefinition, tousseDefinition.getIsDisable(), isDisable, modifyDateTime, modifyUserID, "是否停用", "isDisable"); + filedValueMap.put("isDisable", isDisable); } - if(StringUtils.isNotEmpty(packageSize)){//包大小 - tousseDefinition.setPackageSize(packageSize); + if(StringUtils.isNotEmpty(packageSize) && !StringUtils.equals(tousseDefinition.getPackageSize(), packageSize)){//包大小 + addDataModifyRecord(dataModifyRecordList, tousseDefinition, tousseDefinition.getPackageSize(), packageSize, modifyDateTime, modifyUserID, "包大小", "packageSize"); + filedValueMap.put("packageSize", packageSize); } - // GDSZYY-63 器械包定义管理页面通过批量修改应该不允许修改消毒物品的价格 - if(StringUtils.isNotEmpty(price) && !StringUtils.equals(origineTd.getTousseType(), TousseDefinition.PACKAGE_TYPE_DISINFECTION)){//价格 - tousseDefinition.setPrice(Double.valueOf(price)); + if(StringUtils.isNotEmpty(borrowPrice) && !StringUtils.equals(borrowPrice, tousseDefinition.getBorrowPrice()+"")){//借出价格 + addDataModifyRecord(dataModifyRecordList, tousseDefinition, tousseDefinition.getBorrowPrice()+"", borrowPrice, modifyDateTime, modifyUserID, "借出价格", "borrowPrice"); + filedValueMap.put("borrowPrice", Double.valueOf(borrowPrice)); } - if(StringUtils.isNotEmpty(borrowPrice)){//借出价格 - tousseDefinition.setBorrowPrice(Double.valueOf(borrowPrice)); + if(StringUtils.isNotEmpty(packageType) && !StringUtils.equals(packageType, tousseDefinition.getPackageType())){//默认器械包类型 + addDataModifyRecord(dataModifyRecordList, tousseDefinition, tousseDefinition.getPackageType(), packageType, modifyDateTime, modifyUserID, "默认器械包类型", "packageType"); + filedValueMap.put("packageType", packageType); } - if(StringUtils.isNotEmpty(packageType)){//默认器械包类型 - tousseDefinition.setPackageType(packageType); + if(StringUtils.isNotEmpty(taskGroup) && !StringUtils.equals(taskGroup, tousseDefinition.getTaskGroup())){//所属任务组 + addDataModifyRecord(dataModifyRecordList, tousseDefinition, tousseDefinition.getTaskGroup(), taskGroup, modifyDateTime, modifyUserID, "所属任务组", "taskGroup"); + filedValueMap.put("taskGroup", taskGroup); } - if(StringUtils.isNotEmpty(taskGroup)){//所属任务组 - tousseDefinition.setTaskGroup(taskGroup); + if(StringUtils.isNotEmpty(barcodePaperType) && !StringUtils.equals(barcodePaperType, tousseDefinition.getBarcodePaperType())){//打印标签纸类型 + addDataModifyRecord(dataModifyRecordList, tousseDefinition, tousseDefinition.getBarcodePaperType(), barcodePaperType, modifyDateTime, modifyUserID, "打印标签纸类型", "barcodePaperType"); + filedValueMap.put("barcodePaperType", barcodePaperType); } - if(StringUtils.isNotEmpty(barcodePaperType)){//打印标签纸类型 - tousseDefinition.setBarcodePaperType(barcodePaperType); + if(StringUtils.isNotEmpty(sterilingMethod) && !StringUtils.equals(sterilingMethod, tousseDefinition.getSterilingMethod())){//灭菌程序 + addDataModifyRecord(dataModifyRecordList, tousseDefinition, tousseDefinition.getSterilingMethod(), sterilingMethod, modifyDateTime, modifyUserID, "灭菌程序", "sterilingMethod"); + filedValueMap.put("sterilingMethod", sterilingMethod); } - if(StringUtils.isNotEmpty(sterilingMethod)){//灭菌程序 - tousseDefinition.setSterilingMethod(sterilingMethod); + if(StringUtils.isNotEmpty(tousseGroupID) && !StringUtils.equals(tousseGroupID, tousseDefinition.getTousseGroupID()+"")){//器械包分组的id + addDataModifyRecord(dataModifyRecordList, tousseDefinition, tousseDefinition.getTousseGroupID()+"", tousseGroupID, modifyDateTime, modifyUserID, "器械包分组的id", "tousseGroupID"); + filedValueMap.put("tousseGroupID", Long.valueOf(tousseGroupID)); } - if(StringUtils.isNotEmpty(tousseGroupID)){//器械包分组的id - tousseDefinition.setTousseGroupID(Long.valueOf(tousseGroupID)); + if(StringUtils.isNotEmpty(tousseGroupName) && !StringUtils.equals(tousseGroupName, tousseDefinition.getTousseGroupName())){//器械包分组的名字 + addDataModifyRecord(dataModifyRecordList, tousseDefinition, tousseDefinition.getTousseGroupName(), tousseGroupName, modifyDateTime, modifyUserID, "器械包分组的名字", "tousseGroupName"); + filedValueMap.put("tousseGroupName", tousseGroupName); } - if(StringUtils.isNotEmpty(tousseGroupName)){//器械包分组的名字 - tousseDefinition.setTousseGroupName(tousseGroupName); + if(StringUtils.isNotEmpty(isRecycling) && !StringUtils.equals(isRecycling, tousseDefinition.getIsRecycling())){//是否回收 + addDataModifyRecord(dataModifyRecordList, tousseDefinition, tousseDefinition.getIsRecycling(), isRecycling, modifyDateTime, modifyUserID, "是否回收", "isRecycling"); + filedValueMap.put("isRecycling", isRecycling); } - if(StringUtils.isNotEmpty(isRecycling)){//是否回收 - tousseDefinition.setIsRecycling(isRecycling); + if(StringUtils.isNotEmpty(isPacking) && !StringUtils.equals(isPacking, tousseDefinition.getIsPacking())){//是否装配 + addDataModifyRecord(dataModifyRecordList, tousseDefinition, tousseDefinition.getIsPacking(), isPacking, modifyDateTime, modifyUserID, "是否装配", "isPacking"); + filedValueMap.put("isPacking", isPacking); } - if(StringUtils.isNotEmpty(isPacking)){//是否装配 - tousseDefinition.setIsPacking(isPacking); + if(StringUtils.isNotEmpty(isReview) && !StringUtils.equals(isReview, tousseDefinition.getIsReview())){//是否审核 + addDataModifyRecord(dataModifyRecordList, tousseDefinition, tousseDefinition.getIsReview(), isReview, modifyDateTime, modifyUserID, "是否审核", "isReview"); + filedValueMap.put("isReview", isReview); } - if(StringUtils.isNotEmpty(isReview)){//是否审核 - tousseDefinition.setIsReview(isReview); + if(StringUtils.isNotEmpty(isConvertApplyGoods) && !StringUtils.equals(isConvertApplyGoods, tousseDefinition.getIsConvertApplyGoods())){//是否转换申请物品 + addDataModifyRecord(dataModifyRecordList, tousseDefinition, tousseDefinition.getIsConvertApplyGoods(), isConvertApplyGoods, modifyDateTime, modifyUserID, "是否转换申请物品", "isConvertApplyGoods"); + filedValueMap.put("isConvertApplyGoods", isConvertApplyGoods); } - if(StringUtils.isNotEmpty(isConvertApplyGoods)){//是否转换申请物品 - tousseDefinition.setIsConvertApplyGoods(isConvertApplyGoods); + // GDSZYY-63 器械包定义管理页面通过批量修改应该不允许修改消毒物品的价格 + if(StringUtils.isNotEmpty(price) && !StringUtils.equals(price, tousseDefinition.getPrice()+"") + && !StringUtils.equals(tousseDefinition.getTousseType(), TousseDefinition.PACKAGE_TYPE_DISINFECTION)){//价格 + addDataModifyRecord(dataModifyRecordList, tousseDefinition, tousseDefinition.getPrice()+"", price, modifyDateTime, modifyUserID, "价格", "price"); + notDisinfectionTDIds.add(tousseDefinition.getId()); } - //保存器械包定义 - this.saveOrUpdateTousseDefinition(origineTd, tousseDefinition,null); } - } + } + + //一些通用属性的修改 + if(MapUtils.isNotEmpty(filedValueMap)){ + String setSql = ""; + List sqlList = new ArrayList(); + for (String fileName : filedValueMap.keySet()) { + String tempSql = fileName + " = "; + Object value = filedValueMap.get(fileName); + if(value != null && value instanceof String){ + tempSql += "'" + value + "'"; + }else{ + tempSql += value; + } + sqlList.add(tempSql); + } + setSql = StringTools.join(sqlList, ","); + String updateSql = String.format("update %s set %s where %s ", TousseDefinition.class.getSimpleName(), setSql, + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("id", tousseDefinitionIds)); + setSessionAttribute(session, "批量修改器械包定义属性"); + long updateTime = System.currentTimeMillis(); + System.out.println("开始批量修改器械包定义:" + updateSql); + jdbcTemplate.execute(updateSql); + System.out.println("完成批量修改器械包定义,执行时间 = " + ((System.currentTimeMillis()-updateTime) / 1000)); + } + + //GDSZYY-63 器械包定义管理页面通过批量修改应该不允许修改消毒物品的价格 + if(StringUtils.isNotBlank(price) && CollectionUtils.isNotEmpty(notDisinfectionTDIds)){ + String updateSql = String.format("update %s set price = %s where %s ", + TousseDefinition.class.getSimpleName(), + price, + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("id", notDisinfectionTDIds)); + setSessionAttribute(session, "批量修改非消毒物品器械包定义价格"); + long updateTime = System.currentTimeMillis(); + System.out.println("开始批量修改非消毒物品器械包定义价格:" + updateSql); + jdbcTemplate.execute(updateSql); + System.out.println("完成批量修改非消毒物品器械包定义价格,执行时间 = " + ((System.currentTimeMillis()-updateTime) / 1000)); + } + + //修改任务组后,联动修改CssdHandleTousses + if(StringUtils.isNotBlank(taskGroup)){ + String updateSql = String.format("update %s set taskGroup = '%s' where %s ", + CssdHandleTousses.class.getSimpleName(), + taskGroup, + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("tousseDefinitionId", tousseDefinitionIds)); + setSessionAttribute(session, "批量修改供应室处理器械包关联配置"); + long updateTime = System.currentTimeMillis(); + System.out.println("开始批量修改供应室处理器械包关联配置:" + updateSql); + jdbcTemplate.execute(updateSql); + System.out.println("完成批量修改供应室处理器械包关联配置,执行时间 = " + ((System.currentTimeMillis()-updateTime) / 1000)); + } + + //批量修改所属科室 + if(StringUtils.isNotBlank(belongOrgUnitCodes)){ + if(CssdUtils.getSystemSetConfigByNameBool("enableTousseDefinitionBelongDepart", false)){ + if(CollectionUtils.isNotEmpty(needModifys)){ + //查询原来器械包定义的所属科室 + Map oldTousseDefinitionIDOrgUnitCodesMap = getTousseBelongOrgUnitCodes(tousseDefinitionIds); + + List belongCodes = (List) StringTools.toCollectionIgnoreNullAndBlank(belongOrgUnitCodes,Constants.IDS_SEPARATOR_COMMA); + + //计算器械包定义的所属科室中间表记录数: + String departCodeSql = ""; + String countSql = String.format("select count(*) from %s where %s ", + TousseDefinitionBelongDepart.class.getSimpleName(), + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("tousseDefinitionId", tousseDefinitionIds)); + int count = objectDao.countBySql(countSql); + System.out.println("数据库已经保存的TousseDefinitionBelongDepart表数据量:" + count); + System.out.println("需要插入TousseDefinitionBelongDepart表数据量:" + belongCodes.size()*tousseDefinitionIds.size()); + //判断是否先删除包定义的所属科室 + boolean deleteAllRecordBeforeInsert = deleteAllRecordBeforeInsert(count, belongCodes.size()*tousseDefinitionIds.size()); + + if(!deleteAllRecordBeforeInsert){ + //只删除此次不需要保存的所属科室,保留此次需要保存的所属科室 + departCodeSql = " and " + SqlUtils.getStringFieldNotInCollectionsPredicate("orgUnitCoding", belongCodes); + } + + //删除器械包定义的所属科室 + String deleteSql = String.format("delete from %s where %s %s ", + TousseDefinitionBelongDepart.class.getSimpleName(), + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("tousseDefinitionId", tousseDefinitionIds), + departCodeSql); + setSessionAttribute(session, "删除器械包定义所属科室"); + long deleteTime = System.currentTimeMillis(); + System.out.println("开始删除器械包定义所属科室:" + deleteSql); + jdbcTemplate.execute(deleteSql); + System.out.println("完成删除器械包定义所属科室,执行时间 = " + ((System.currentTimeMillis()-deleteTime) / 1000)); + + if(!deleteAllRecordBeforeInsert){ + //删除此次不需要的所属科室,保存新增的所属科室(新保存记录大于原来数据库保存数据的时候,效率高) + setSessionAttribute(session, "保存器械包定义所属科室"); + //插入器械包定义所属科室记录 + String insertSql = "insert into TousseDefinitionBelongDepart (" + idColumnName + " tousseDefinitionId, orgUnitCoding, tousseType) " + + "select " + idColumnValue + " td.id, ou.orgUnitCoding, td.tousseType from TousseDefinition td, OrgUnit ou " + + "where 1=1 " + + "and not exists (select tdb.tousseDefinitionId from TousseDefinitionBelongDepart tdb where tdb.tousseDefinitionId = td.id and tdb.orgUnitCoding = ou.orgUnitCoding )" + + " and " + + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("td.id", tousseDefinitionIds) + + " and " + + SqlUtils.getStringFieldInLargeCollectionsPredicate("ou.orgUnitCoding", belongCodes); + long insertTime = System.currentTimeMillis(); + System.out.println("开始插入TousseDefinitionBelongDepart表记录, insertSql === "+ insertSql); + jdbcTemplate.execute(insertSql); + System.out.println("完成插入TousseDefinitionBelongDepart表记录" + ", 执行时间 = " + ((System.currentTimeMillis()-insertTime) / 1000)); + }else{ + //删除包定义的所有所属科室,再保存此次需要保存的所属科室(新保存记录小于原来数据库保存数据的时候,效率高) + setSessionAttribute(session, "保存器械包定义所属科室"); + List tousseDefinitionBelongDepartList = new ArrayList(); + for(TousseDefinition td : needModifys){ + for (String belongCode : belongCodes) { + TousseDefinitionBelongDepart tousseDefinitionBelongDepart = new TousseDefinitionBelongDepart(); + tousseDefinitionBelongDepart.setOrgUnitCoding(belongCode); + tousseDefinitionBelongDepart.setTousseDefinitionId(td.getId()); + tousseDefinitionBelongDepart.setTousseType(td.getTousseType()); + tousseDefinitionBelongDepartList.add(tousseDefinitionBelongDepart); + } + } + int size = tousseDefinitionBelongDepartList.size(); + String insertSql1 = String.format("insert into TousseDefinitionBelongDepart ( %s tousseDefinitionId, orgUnitCoding, tousseType) " + + " values (%s ?,?,?)", + idColumnName, idColumnValue); + + long insertTime = System.currentTimeMillis(); + System.out.println("开始插入TousseDefinitionBelongDepart表记录"); + jdbcTemplate.batchUpdate(insertSql1, new BatchPreparedStatementSetter() { + + @Override + public void setValues(PreparedStatement ps, int i) throws SQLException { + TousseDefinitionBelongDepart tousseDefinitionBelongDepart = tousseDefinitionBelongDepartList.get(i); + ps.setLong(1, tousseDefinitionBelongDepart.getTousseDefinitionId()); + ps.setString(2, tousseDefinitionBelongDepart.getOrgUnitCoding()); + ps.setString(3, tousseDefinitionBelongDepart.getTousseType()); + } + + @Override + public int getBatchSize() { + return size; + } + + }); + System.out.println("完成插入TousseDefinitionBelongDepart表记录" + ", 执行时间 = " + ((System.currentTimeMillis()-insertTime) / 1000)); + } + + //保存修改记录 + for (TousseDefinition tousseDefinition : needModifys) { + DataModifyRecord record = new DataModifyRecord(); + record.setModifyDateTime(modifyDateTime); + record.setModifyDetail("修改所属科室"); + record.setModifyField(""); + record.setModifyRecordModel(DataModifyRecord.MODEL_TOUSSEDEFINITION); + record.setModifyType(DataModifyRecord.MODIFY_TYPE_BATCH); + record.setModifyUserID(modifyUserID); + record.setNewValue(belongOrgUnitCodes); + String oldValue = oldTousseDefinitionIDOrgUnitCodesMap.get(tousseDefinition.getId()); + record.setOldValue(oldValue); + record.setObjectID(tousseDefinition.getId()); + dataModifyRecordList.add(record); + } + } + } + } + + //保存改动记录 + if(CollectionUtils.isNotEmpty(dataModifyRecordList)){ + String insertIntoModifyRecordSql = + String.format("insert into %s (%s modifyDateTime, modifyDetail, modifyRecordModel, modifyType, modifyUserID, newValue, oldValue, objectID) " + + "values (%s ?,?,?,?,?,?,?,?)", DataModifyRecord.class.getSimpleName(), idColumnName, idColumnValue); + setSessionAttribute(session, "保存器械包定义改动记录"); + long insertTime1 = System.currentTimeMillis(); + System.out.println("开始插入改动记录 ,记录数量:" + dataModifyRecordList.size()); + jdbcTemplate.batchUpdate(insertIntoModifyRecordSql, + new BatchPreparedStatementSetter() { + + @Override + public void setValues(PreparedStatement ps, int i) throws SQLException { + DataModifyRecord record = dataModifyRecordList.get(i); + ps.setTimestamp(1, new Timestamp(record.getModifyDateTime().getTime())); + ps.setString(2, record.getModifyDetail()); + ps.setString(3, record.getModifyRecordModel()); + ps.setString(4, record.getModifyType()); + ps.setLong(5, record.getModifyUserID()); + ps.setString(6, record.getNewValue()); + ps.setString(7, record.getOldValue()); + ps.setLong(8, record.getObjectID()); + } + + @Override + public int getBatchSize() { + return dataModifyRecordList.size(); + } + + }); + System.out.println("完成插入改动记录 "+ ", 执行时间 = " + (System.currentTimeMillis()-insertTime1) / 1000); + } + + Long endTime = System.currentTimeMillis(); + System.out.println("执行时间:" + (endTime - startTime) /1000 + "秒!!"); + setSessionAttribute(session, "修改成功!"); } - @Override + private void setSessionAttribute(HttpSession session, String process) { + session.setAttribute("batchModifyProcess", process); + } + + /** + * 根据已保存数量和待插入数量,判断是否删除所有记录后再插入新记录 + * @param dbNum + * @param insertNum + * @return + */ + private boolean deleteAllRecordBeforeInsert(int dbNum, int insertNum) { + String dbNumStr = String.valueOf(dbNum); + String insertNumStr = String.valueOf(insertNum); + if(dbNumStr.length() < insertNumStr.length() || dbNumStr.length() > insertNumStr.length()){ + //已保存记录数量远小于或者大于待插入记录数量 + return true; + }else if(StringUtils.equals(dbNumStr.substring(0, 1), insertNumStr.substring(0, 1))){ + //数值最高位相等,已保存记录数量约等于待插入记录数量,例如75000和73000 + return false; + } + return false; + } + + private void addDataModifyRecord(List dataModifyRecordList, TousseDefinition tousseDefinition, + String oldValue, String newValue, Date modifyDateTime, Long modifyUserID, + String modifyDetail, String modifyField) { + DataModifyRecord record = new DataModifyRecord(); + record.setModifyDateTime(modifyDateTime); + record.setModifyDetail(modifyDetail); + record.setModifyField(modifyField); + record.setModifyUserID(modifyUserID); + record.setModifyRecordModel(DataModifyRecord.MODEL_TOUSSEDEFINITION); + record.setModifyType(DataModifyRecord.MODIFY_TYPE_BATCH); + record.setNewValue(newValue); + record.setObjectID(tousseDefinition.getId()); + record.setOldValue(oldValue); + dataModifyRecordList.add(record); + } + + /** + * 根据ID查询包定义,只查部分字段 + * @param tousseDefinitionIds + * @return + */ + private List getTousseDefinitionCollection(List tousseDefinitionIds) { + List result = new ArrayList(); + if(CollectionUtils.isEmpty(tousseDefinitionIds)){ + return result; + } + String sql = String.format("select po.id, po.name, po.tousseType, po.price, po.borrowPrice, po.packageType," + + "po.packageSize, po.isDisable, po.taskGroup, po.barcodePaperType," + + "po.sterilingMethod, po.tousseGroupID, po.tousseGroupName, " + + "po.isRecycling, po.isPacking, po.isReview, po.isConvertApplyGoods " + + "from %s po where %s ", + TousseDefinition.class.getSimpleName(), + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("po.id", tousseDefinitionIds)); + List> resultMapList = jdbcTemplate.queryForList(sql); + if(CollectionUtils.isNotEmpty(resultMapList)){ + for (Map map : resultMapList) { + Long id = ((Number)map.get("id")).longValue(); + String name = (String) map.get("name"); + String tousseType = (String) map.get("tousseType"); + Double price = map.get("price") == null ? null : ((Number)map.get("price")).doubleValue(); + Double borrowPrice = map.get("borrowPrice") == null ? null : ((Number)map.get("borrowPrice")).doubleValue(); + Long tousseGroupID = map.get("tousseGroupID") == null ? null : ((Number)map.get("tousseGroupID")).longValue(); + TousseDefinition td = new TousseDefinition(); + td.setId(id); + td.setName(name); + td.setTousseType(tousseType); + td.setPrice(price); + td.setBorrowPrice(borrowPrice); + td.setPackageType((String) map.get("packageType")); + td.setPackageSize((String) map.get("packageSize")); + td.setIsDisable((String) map.get("isDisable")); + td.setTaskGroup((String) map.get("taskGroup")); + td.setBarcodePaperType((String) map.get("barcodePaperType")); + td.setSterilingMethod((String) map.get("sterilingMethod")); + td.setTousseGroupID(tousseGroupID); + td.setTousseGroupName((String) map.get("tousseGroupName")); + td.setIsRecycling((String) map.get("isRecycling")); + td.setIsPacking((String) map.get("isPacking")); + td.setIsReview((String) map.get("isReview")); + td.setIsConvertApplyGoods((String) map.get("isConvertApplyGoods")); + result.add(td); + } + } + return result; + } + + /** + * 查询器械包定义上次批量修改时,修改记录的所属科室 + * @param tousseDefinitionIds + * @return + */ + private Map getTousseBelongOrgUnitCodes(List tousseDefinitionIds) { + Map result = new HashMap(); + if(CollectionUtils.isEmpty(tousseDefinitionIds)){ + return result; + } + + String sql = String.format("select po.objectid, po.newvalue from Datamodifyrecord po where po.id in (select max(r.id) from %s td join %s r on td.id = r.objectid where r.modifyDetail = '修改所属科室' and %s group by td.id) ", + TousseDefinition.class.getSimpleName(), + DataModifyRecord.class.getSimpleName(), + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("td.id", tousseDefinitionIds)); + + long deleteTime = System.currentTimeMillis(); + System.out.println("开始查询器械包定义所属科室:" + sql); + List> resultMapList = jdbcTemplate.queryForList(sql); + System.out.println("完成查询器械包定义所属科室,执行时间 = " + ((System.currentTimeMillis()-deleteTime) / 1000)); + + if(CollectionUtils.isNotEmpty(resultMapList)){ + for (Map map : resultMapList) { + Number tousseDefinitionId = (Number)map.get("objectid"); + String orgUnitCoding = (String) map.get("newvalue"); + result.put(tousseDefinitionId.longValue(), orgUnitCoding); + } + } + return result; + } + + + @Override public void saveTousseDefinitionCellModify(String tousseDefinitionID,String fieldName,String cellModifyValue){ try { if(!DatabaseUtil.isPoIdValid(tousseDefinitionID)){ Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/controller/TousseDefinitionController.java =================================================================== diff -u -r25765 -r34000 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/controller/TousseDefinitionController.java (.../TousseDefinitionController.java) (revision 25765) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/controller/TousseDefinitionController.java (.../TousseDefinitionController.java) (revision 34000) @@ -10,6 +10,9 @@ import java.util.HashMap; import java.util.List; import java.util.Map; + +import javax.servlet.http.HttpSession; + import net.sf.json.JSONArray; import net.sf.json.JSONObject; @@ -374,11 +377,11 @@ * @return */ @RequestMapping(value = "/saveTousseDefinitionBatchModify",method = RequestMethod.POST) - public String saveTousseDefinitionBatchModify(@RequestBody ModifyTousseDefinitionDto modifyTousseDefinitionDto){ + public String saveTousseDefinitionBatchModify(@RequestBody ModifyTousseDefinitionDto modifyTousseDefinitionDto, HttpSession session){ JSONObject result = new JSONObject(); try { //批量修改器械包定义属性 - tousseDefinitionManager.batchModifyTousseDefinition(modifyTousseDefinitionDto); + tousseDefinitionManager.batchModifyTousseDefinition(modifyTousseDefinitionDto, session); } catch (Exception e) { JSONUtil.addSuccess(result, false); JSONUtil.addMessage(result, e.getMessage()); @@ -390,6 +393,23 @@ } /** + * 器械包定义批量修改属性的进度条 + * @param session + * @return + */ + @RequestMapping(value = "/flushProgress") + public String flushProgress(HttpSession session){ + JSONObject result = new JSONObject(); + JSONUtil.addSuccess(result, false); + String process = (String) session.getAttribute("batchModifyProcess"); + result.put("process", process); + if(StringUtils.equals(process, "修改成功!") || StringUtils.isBlank(process)){ + JSONUtil.addSuccess(result, true); + } + return result.toString(); + } + + /** * 修改器械包定义单个属性 * 暂时只支持String、基础数据类型的属性 */ Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/dto/ModifyTousseDefinitionDto.java =================================================================== diff -u -r27304 -r34000 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/dto/ModifyTousseDefinitionDto.java (.../ModifyTousseDefinitionDto.java) (revision 27304) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/dto/ModifyTousseDefinitionDto.java (.../ModifyTousseDefinitionDto.java) (revision 34000) @@ -2,8 +2,6 @@ import java.util.List; -import org.apache.commons.lang.StringUtils; - /** * 器械包定义批量修改属性Dto * @author YanWeiNing 2019-02-21 @@ -76,6 +74,11 @@ */ private String isConvertApplyGoods; + /** + * 所属科室编码GDSZYY-177(器械包定义的批量修改增加所属科室的修改) + */ + private String belongOrgUnitCodes; + public List getTousseDefinitionIds() { return tousseDefinitionIds; } @@ -195,4 +198,13 @@ public void setIsConvertApplyGoods(String isConvertApplyGoods) { this.isConvertApplyGoods = isConvertApplyGoods; } + + public String getBelongOrgUnitCodes() { + return belongOrgUnitCodes; + } + + public void setBelongOrgUnitCodes(String belongOrgUnitCodes) { + this.belongOrgUnitCodes = belongOrgUnitCodes; + } + }