Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/DisposableGoodsSummary.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/DisposableGoodsSummary.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/DisposableGoodsSummary.java (revision 35835) @@ -0,0 +1,66 @@ +package com.forgon.disinfectsystem.entity.assestmanagement; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Index; +import javax.persistence.Table; + +import org.hibernate.annotations.Cache; +import org.hibernate.annotations.CacheConcurrencyStrategy; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; + +/** + * 【打印一次性物品汇总单设置】(GDSZYY-216【打印一次性物品汇总单设置】的物品配置新增可视化版本) + */ +@Entity +@DynamicInsert(false) +@DynamicUpdate(true) +@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) +@Table(indexes = {@Index(columnList = "disposableGoodsID", name = "dgsmy_dgs_id")}) +public class DisposableGoodsSummary { + + /** + * ID + */ + private Long id; + + /** + * 一次性物品ID + */ + private Long disposableGoodsID; + + /** + * 顺序号,用于科室申领批量打印发货及打印一次性物品到纸质单据上时按此顺序号从小大到排序 + */ + private Integer sequence = 0; + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getDisposableGoodsID() { + return disposableGoodsID; + } + + public void setDisposableGoodsID(Long disposableGoodsID) { + this.disposableGoodsID = disposableGoodsID; + } + + public Integer getSequence() { + return sequence; + } + + public void setSequence(Integer sequence) { + this.sequence = sequence; + } + +} Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DisposableGoodsSummaryManager.java =================================================================== diff -u --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DisposableGoodsSummaryManager.java (revision 0) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DisposableGoodsSummaryManager.java (revision 35835) @@ -0,0 +1,47 @@ +package com.forgon.disinfectsystem.diposablegoods.service; + +import java.util.List; + +import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsSummary; +import com.forgon.disinfectsystem.vo.DisposableGoodsSummaryVo; +import com.forgon.entity.PageEntity; +import com.forgon.tools.hibernate.BasePoManager; + +/** + * 【一次性物品汇总打印设置】的manager(GDSZYY-216 【打印一次性物品汇总单设置】的物品配置新增可视化版本) + */ +public interface DisposableGoodsSummaryManager extends BasePoManager{ + + /** + * 批量保存【一次性物品汇总打印设置】 + * @param disposableGoodsIds + */ + public void saveDisposableGoodsSummary(String disposableGoodsIds); + + /** + * 批量删除【一次性物品汇总打印设置】 + * @param disposableGoodsSummaryIds + */ + public void batchDeleteDisposableGoodsSummary(String disposableGoodsSummaryIds); + + /** + * 加载一次性物品列表 + * @param disposableGoodsName + * @return + */ + public List loadDisposableGoodsSummaryList(String disposableGoodsName, PageEntity pageEntity); + + /** + * 排序 + * @param id + * @param orderType up或者down + */ + public void sortDisposableGoodsSummary(Long id, String orderType); + + /** + * 查询最大顺序号 + * @return + */ + public Integer getMaxSequence(); + +} Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java =================================================================== diff -u -r35773 -r35835 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java (.../RecyclingApplicationManagerImpl.java) (revision 35773) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java (.../RecyclingApplicationManagerImpl.java) (revision 35835) @@ -68,6 +68,7 @@ import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoods; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsBatchStock; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsStock; +import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsSummary; import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoodsInstance; import com.forgon.disinfectsystem.entity.basedatamanager.foreigntoussedefinition.ForeignTousseDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.materialinstance.MaterialInstance; @@ -10136,8 +10137,8 @@ @SuppressWarnings("unchecked") @Override - public JSONArray printDisposableGoodsInvoicePlanSummary(String inventorySerialNumbers, String printRecordIds, String startTime, String endTime) { - JSONArray jsonArray = new JSONArray(); + public JSONArray printDisposableGoodsInvoicePlanSummary(String printRecordIds, String startTime, String endTime) { + JSONArray jsonArray = new JSONArray(); if(StringUtils.isBlank(printRecordIds) && (StringUtils.isBlank(startTime) || StringUtils.isBlank(endTime))){ return jsonArray; } @@ -10151,20 +10152,13 @@ return getDisposableGoodsInvoicePlanSummary(printConfigInvoicePlanMap); } - List disposableGoodsList = null; - if(StringUtils.isNotBlank(inventorySerialNumbers)){ - String[] inventorySerialNumberArr = inventorySerialNumbers.split(";"); - if(dbConnection.isSqlServer()){ - String sql = String.format(" from %s po where (1=1) %s order by charindex(','+convert(varchar,po.inventorySerialNumber)+',','%s,') ", - DisposableGoods.class.getSimpleName(), SqlUtils.get_InSql("po.inventorySerialNumber", inventorySerialNumberArr), - inventorySerialNumbers.replaceAll(";", ",")); - disposableGoodsList = objectDao.findByHql(sql); - }else if(dbConnection.isOracle()){ - String sql = String.format(" from %s po where (1=1) %s order by instr('%s', po.inventorySerialNumber) ", - DisposableGoods.class.getSimpleName(), SqlUtils.get_InSql("po.inventorySerialNumber", inventorySerialNumberArr), - inventorySerialNumbers.replaceAll(";", "")); - disposableGoodsList = objectDao.findByHql(sql); - } + //查询已经设置了【一次性物品汇总打印设置】的一次性物品 + String hql = String.format("select po from %s po, %s dgs where dgs.disposableGoodsID = po.id order by dgs.sequence ", + DisposableGoods.class.getSimpleName(), + DisposableGoodsSummary.class.getSimpleName()); + List disposableGoodsList = objectDao.findByHql(hql); + if(CollectionUtils.isEmpty(disposableGoodsList)){ + throw new SystemException("请先配置【一次性物品汇总打印设置】"); } //if(!CssdUtils.isProject("gdszyy")){ Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManager.java =================================================================== diff -u -r35606 -r35835 --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManager.java (.../DiposableGoodsManager.java) (revision 35606) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManager.java (.../DiposableGoodsManager.java) (revision 35835) @@ -280,6 +280,14 @@ * @return */ public List getDisposableGoodsByKeyword(String keyword); + + /** + * 根据关键字对DisposableGoods进行模糊查询(注意要根据用户配置的检索习惯进行检索) + * @param keyword + * @param searchDisposableGoodsSummary 值为false时:不查询已经添加到【一次性物品汇总打印设置】中的一次性物品;值为true时,不做是否添加到【一次性物品汇总打印设置】中的过滤 + * @return + */ + public List getDisposableGoodsByKeyword(String keyword, boolean searchDisposableGoodsSummary); /** * 获取一次性物品定义的价格(以最后入库并且有库存大于0的那一个批次为准,如果没有就以一次性物品定义的参考价为准). Index: ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/basic/service/MaintainManagerImpl.java =================================================================== diff -u -r35751 -r35835 --- ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/basic/service/MaintainManagerImpl.java (.../MaintainManagerImpl.java) (revision 35751) +++ ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/basic/service/MaintainManagerImpl.java (.../MaintainManagerImpl.java) (revision 35835) @@ -5,7 +5,6 @@ import java.io.FileInputStream; import java.io.InputStream; import java.io.InputStreamReader; -import java.lang.reflect.InvocationTargetException; import java.math.BigDecimal; import java.sql.Connection; import java.sql.PreparedStatement; @@ -22,10 +21,12 @@ import java.util.Map; import java.util.Set; +import javax.script.ScriptEngine; +import javax.script.ScriptEngineManager; + import net.sf.json.JSONObject; import org.apache.commons.beanutils.BeanUtils; -import org.apache.commons.collections.MapUtils; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.time.DateUtils; @@ -53,12 +54,14 @@ import com.forgon.disinfectsystem.basedatamanager.supplier.service.SupplierManager; import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager; import com.forgon.disinfectsystem.basedatamanager.toussedefinition.service.TousseDefinitionUtils; +import com.forgon.disinfectsystem.common.CssdUtils; import com.forgon.disinfectsystem.entity.assestmanagement.DiposableGoodsInstance; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoods; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsBatch; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsBatchStock; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsIdentification; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsStock; +import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsSummary; import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveDisposablegoods; import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoods; import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoodsBill; @@ -215,15 +218,16 @@ import com.forgon.tools.GB2Alpha; import com.forgon.tools.GB2WB; import com.forgon.tools.MathTools; +import com.forgon.tools.Path; import com.forgon.tools.StrutsParamUtils; import com.forgon.tools.crypto.coder.CoderEncryption; -import com.forgon.tools.crypto.rsa.RSAEncrypt; import com.forgon.tools.date.DateTools; import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.db.InitDbConnection; import com.forgon.tools.hibernate.ObjectDao; import com.forgon.tools.util.ConfigUtils; import com.forgon.tools.util.FileUtils; +import com.forgon.tools.util.SqlUtils; /** * @author Terry Kwan @@ -1590,11 +1594,166 @@ case "5.0.8_5.0.9": UpdateData_5_0_8_5_0_9(updateDataContext); break; + case "5.0.10_5.0.11": + UpdateData_5_0_10_5_0_11(updateDataContext); + break; } return false; } /** + * 根据printConfig.js文件中的“inventorySerialNumber”查找一次性物品,并自动转换为“一次性物品汇总打印设置”GDSZYY-216 + * @param updateDataContext + */ + private void UpdateData_5_0_10_5_0_11(UpdateDataContext updateDataContext) { + int count = objectDao.countObject(DisposableGoodsSummary.class.getSimpleName()); + if(count == 0){ + insertDisposableGoodsSummaryByPrintConfig(); + } + + DataUpdater dataUpdater = updateDataContext.getDataUpdater(); + String msg = null; + msg = String.format("已执行方法(%s.%s)!", + MaintainManagerImpl.class.getName(), + "UpdateData_5_0_10_5_0_11()"); + dataUpdater.logInfo(msg); + } + + /** + * 通过printConfig.js文件中的“inventorySerialNumber”进行配置的待打印一次性物品,需要自动转换添加到“一次性物品汇总打印设置”中 + */ + private void insertDisposableGoodsSummaryByPrintConfig() { + + try { + //获取printConfig.js的文件路径 + String rootPath = Path.getWebAppRoot() + "/disinfectsystem/config/"; + String configFilePath = CssdUtils.getProjectName() + + "/print/printConfig.js"; + String printConfigFilePath = rootPath + configFilePath; + //读取printConfig.js的内容 + String printConfigContext = readFile(printConfigFilePath); + + if(StringUtils.isNotBlank(printConfigContext)){ + //加载printConfig.js文件,并获取printConfig.inventorySerialNumber + List inventorySerialNumberList = getInventorySerialNumberList(printConfigContext); + //生成【一次性物品汇总单设置】 + insertDisposableGoodsSummaryByInventorySerialNumber(inventorySerialNumberList); + } + } catch (Exception e) { + e.printStackTrace(); + } + + } + + /** + * 根据文件路径读取文件内容 + * @param printConfigFilePath + * @return + */ + private String readFile(String printConfigFilePath) { + BufferedReader reader = null; + String laststr = ""; + try { + //读取printConfig.js文件 + FileInputStream fileInputStream = new FileInputStream(printConfigFilePath); + InputStreamReader inputStreamReader = new InputStreamReader( + fileInputStream, "UTF-8"); + reader = new BufferedReader(inputStreamReader); + String tempString = null; + while ((tempString = reader.readLine()) != null) { + laststr += tempString + "\r\n"; + } + reader.close(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (reader != null) { + try { + reader.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + return laststr; + } + + /** + * 加载js文件,并返回一次性物品物质编码 + * @param laststr + * @return + * @throws Exception + */ + private List getInventorySerialNumberList(String laststr) throws Exception { + + List inventorySerialNumberList = new ArrayList(); + if(StringUtils.isBlank(laststr)){ + return inventorySerialNumberList; + } + // 创建脚本引擎,执行JS代码 + ScriptEngineManager manager = new ScriptEngineManager(); + ScriptEngine engine = manager.getEngineByName("javascript"); + engine.eval(laststr); + //获取printConfig.inventorySerialNumber.length + engine.eval( + "var inventorySerialNumberLength = '0'; " + + "if(typeof printConfig !== 'undefined' && typeof printConfig.inventorySerialNumber !== 'undefined') {" + + " inventorySerialNumberLength = printConfig.inventorySerialNumber.length.toString();" + + "}" + ); + + String lengthStr = (String) engine.eval("inventorySerialNumberLength"); + if(!DatabaseUtil.isPoIdValid(lengthStr)){ + return inventorySerialNumberList; + } + Integer length = Integer.valueOf(lengthStr); + //获取printConfig.inventorySerialNumber + if(length > 0){ + for(int i=0; i inventorySerialNumberList) { + if(CollectionUtils.isEmpty(inventorySerialNumberList)){ + return; + } + String hql = String.format("select po from %s po where %s", + DisposableGoods.class.getSimpleName(), + SqlUtils.getStringFieldInLargeCollectionsPredicate("po.inventorySerialNumber", inventorySerialNumberList)); + List disposableGoodsList = objectDao.findByHql(hql); + if(CollectionUtils.isNotEmpty(disposableGoodsList)){ + Map disposableGoodsMap = new HashMap(); + for (DisposableGoods disposableGoods : disposableGoodsList) { + disposableGoodsMap.put(disposableGoods.getInventorySerialNumber(), disposableGoods); + } + Integer maxSequece = 0; + for (String inventorySerialNumber : inventorySerialNumberList) { + DisposableGoods disposableGoods = disposableGoodsMap.get(inventorySerialNumber); + if(disposableGoods == null){ + continue; + } + DisposableGoodsSummary disposableGoodsSummary = new DisposableGoodsSummary(); + disposableGoodsSummary.setDisposableGoodsID(disposableGoods.getId()); + disposableGoodsSummary.setSequence(maxSequece++); + objectDao.save(disposableGoodsSummary); + } + } + } + + /** * “特殊感染类型设置”功能改进:特殊感染类型设置数据由httpOption表迁移到SpecialInfection表,并添加条码、颜色等属性GDSRMYY-550 * @param updateDataContext */ Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManagerImpl.java =================================================================== diff -u -r35606 -r35835 --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManagerImpl.java (.../DiposableGoodsManagerImpl.java) (revision 35606) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManagerImpl.java (.../DiposableGoodsManagerImpl.java) (revision 35835) @@ -61,6 +61,7 @@ import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsBatchStock; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsIdentification; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsStock; +import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsSummary; import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveDisposablegoods; import com.forgon.disinfectsystem.entity.assestmanagement.GodownEntryDiposableGoodsItem; import com.forgon.disinfectsystem.entity.basedatamanager.departmentapplicationtemplate.DiposableGoodsTemplateItem; @@ -3178,7 +3179,16 @@ @Override public List getDisposableGoodsByKeyword(String keyword) { + return getDisposableGoodsByKeyword(keyword, true); + } + + @Override + public List getDisposableGoodsByKeyword(String keyword, boolean searchDisposableGoodsSummary) { String hql = "where isDisable='"+ com.forgon.Constants.STR_NO +"' "; + if(!searchDisposableGoodsSummary){ + //不查询在【一次性物品汇总打印设置】中的一次性物品GDSZYY-216 + hql += String.format(" and po.id not in (select disposableGoodsID from %s )", DisposableGoodsSummary.class.getSimpleName()); + } if (StringUtils.isNotBlank(keyword)) { keyword = keyword.trim(); Matcher matcher = Pattern.compile("[\\u4E00-\\u9FA5]+").matcher(keyword); @@ -3191,6 +3201,7 @@ keyword = keyword.toUpperCase(); hql += Util.getSearchSQLByUserSetting(searchMode, keyword); } + hql += " order by case when po.name like '%" + keyword +"%' then 3 when po.spelling like '%" Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DisposableGoodsSummaryManagerImpl.java =================================================================== diff -u --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DisposableGoodsSummaryManagerImpl.java (revision 0) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DisposableGoodsSummaryManagerImpl.java (revision 35835) @@ -0,0 +1,281 @@ +package com.forgon.disinfectsystem.diposablegoods.service; + +import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang.StringUtils; + +import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoods; +import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsSummary; +import com.forgon.disinfectsystem.vo.DisposableGoodsSummaryVo; +import com.forgon.entity.PageEntity; +import com.forgon.exception.SystemException; +import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.db.InitDbConnection; +import com.forgon.tools.hibernate.BasePoManagerImpl; +import com.forgon.tools.util.SqlUtils; + +public class DisposableGoodsSummaryManagerImpl extends BasePoManagerImpl implements DisposableGoodsSummaryManager { + + private DiposableGoodsManager diposableGoodsManager; + + private InitDbConnection dbConnection; + + public void setDbConnection(InitDbConnection dbConnection) { + this.dbConnection = dbConnection; + } + + public void setDiposableGoodsManager(DiposableGoodsManager diposableGoodsManager) { + this.diposableGoodsManager = diposableGoodsManager; + } + + @SuppressWarnings("unchecked") + @Override + public void saveDisposableGoodsSummary(String disposableGoodsIds) { + + if(StringUtils.isBlank(disposableGoodsIds)){ + throw new SystemException("一次性物品不能为空!"); + } + + List disposableGoodsList = diposableGoodsManager.getCollection(disposableGoodsIds, ";"); + if(CollectionUtils.isEmpty(disposableGoodsList)){ + throw new SystemException("不存在id为:" + disposableGoodsIds + "一次性物品!"); + } + + //已经存在的一次性物品设置 + Map disposableGoodsSummaryMap = new HashMap(); + String disposableGoodsSummarySql = String.format(" from %s po where 1=1 %s " + , DisposableGoodsSummary.class.getSimpleName() + , SqlUtils.getWhereSqlByfilterFieldAndLongValueAndSeparator("disposableGoodsID", disposableGoodsIds, ";")); + List dbDisposableGoodsSummaryList = objectDao.findByHql(disposableGoodsSummarySql); + if(CollectionUtils.isNotEmpty(dbDisposableGoodsSummaryList)){ + for (DisposableGoodsSummary disposableGoodsSummary : dbDisposableGoodsSummaryList) { + disposableGoodsSummaryMap.put(disposableGoodsSummary.getDisposableGoodsID(), disposableGoodsSummary); + } + } + + //顺序 + Integer maxSequence = getMaxSequence(); + + + //保存一次性物品设置 + if(CollectionUtils.isNotEmpty(disposableGoodsList)){ + List disposableGoodsSummaryList = new ArrayList(); + for (DisposableGoods disposableGoods : disposableGoodsList) { + if(disposableGoodsSummaryMap.get(disposableGoods.getId()) != null){ + throw new SystemException("一次性物品【" + disposableGoods.getShowName() + "】已经存在!"); + } + DisposableGoodsSummary disposableGoodsSummary = new DisposableGoodsSummary(); + disposableGoodsSummary.setDisposableGoodsID(disposableGoods.getId()); + disposableGoodsSummary.setSequence(maxSequence++); + disposableGoodsSummaryList.add(disposableGoodsSummary); + } + objectDao.batchSaveOrUpdate(disposableGoodsSummaryList); + } + + } + + /** + * 查询最大顺序号 + * @return + */ + @Override + public Integer getMaxSequence() { + Integer maxSequence = 0; + String maxSequenceSql = String.format("select max(po.sequence) maxSequence from %s po", DisposableGoodsSummary.class.getSimpleName()); + ResultSet rs = null; + try { + rs = objectDao.executeSql(maxSequenceSql); + while(rs.next()){ + maxSequence = rs.getInt("maxSequence"); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + if(maxSequence == null){ + maxSequence = 0; + } + return maxSequence; + } + + @Override + public void batchDeleteDisposableGoodsSummary(String disposableGoodsSummaryIds) { + if(StringUtils.isBlank(disposableGoodsSummaryIds)){ + throw new SystemException("id不能为空!"); + } + List disposableGoodsSummaryList = this.getCollection(disposableGoodsSummaryIds, ";"); + if(CollectionUtils.isEmpty(disposableGoodsSummaryList)){ + throw new SystemException("不存在id为:" + disposableGoodsSummaryIds + "【一次性物品汇总打印设置】!"); + } + objectDao.deleteAll(disposableGoodsSummaryList); + } + + @Override + public List loadDisposableGoodsSummaryList(String disposableGoodsName, PageEntity pageEntity) { + List disposableGoodsSummaryVoList = new ArrayList(); + String fieldSql = " select dgs.id, dgs.sequence, dg.id disposableGoodsId, dg.name, dg.specification "; + String sql = String.format(" from " + + "%s dgs " + + "join %s dg on dgs.disposableGoodsID = dg.id " + , DisposableGoodsSummary.class.getSimpleName() + , DisposableGoods.class.getSimpleName()); + if(StringUtils.isNotBlank(disposableGoodsName)){ + sql += " and dg.name like '%" + disposableGoodsName + "%'"; + } + int start = pageEntity.getStart(); + int pageSize = pageEntity.getLimit(); + if(start >= 0 && pageSize > 0){ + //需要分页 + String countSql = "select count(*) " + sql; + int count = objectDao.countBySql(countSql); + pageEntity.setCount(count); + sql = fieldSql + sql; + String orderSql = " order by sequence "; + if(dbConnection.isSqlServer()){ + sql = getSqlServerQuerySqlByPage(sql, start, pageSize, "id", orderSql); + }else if(dbConnection.isOracle()){ + if(StringUtils.isNotBlank(orderSql)){ + sql += orderSql; + } + sql = SqlUtils.getOracleQuerySqlByPage(sql, start, pageSize); + } + }else{ + //查询全部 + sql = fieldSql + sql; + } + + ResultSet rs = null; + try { + rs = objectDao.executeSql(sql); + while(rs.next()){ + Long id = rs.getLong("id"); + Long disposableGoodsId = rs.getLong("disposableGoodsId"); + String name = rs.getString("name"); + String specification = rs.getString("specification"); + int sequence = rs.getInt("sequence"); + DisposableGoodsSummaryVo vo = new DisposableGoodsSummaryVo(); + vo.setId(id); + vo.setSequence(sequence); + vo.setDisposableGoodsId(disposableGoodsId); + vo.setName(name); + vo.setSpecification(specification); + disposableGoodsSummaryVoList.add(vo); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + + return disposableGoodsSummaryVoList; + } + + /** + * 根据sql语句拼接分页查询语句 + * @param sql 原查询语句(可包含查询条件、排序等) + * @param start 开始记录,即从第多少开始 + * @param limit 查询偏移量,即查询多少个 + * @param pageColumnName + * @return + */ + public String getSqlServerQuerySqlByPage(String querySql, int start, int limit, String pageColumnName, String orderSql){ + StringBuffer querySqlByPage = new StringBuffer(); + if(start == 0){ + querySqlByPage.append("select top "+ limit +" * from ("+ querySql +") t"); + }else{ + querySqlByPage.append("select top "+ limit +" * from ("+ querySql +") t "); + querySqlByPage.append("where "+ pageColumnName +" not in (select top "+ (start) +" "+ pageColumnName +" from ("+ querySql +") t0 " + orderSql + " )"); + } + querySqlByPage.append(orderSql); + return querySqlByPage.toString(); + } + + /** + * 根据sql语句拼接分页查询语句 + * @param sql 原查询语句(可包含查询条件、排序等) + * @param start 开始记录,即从第多少开始 + * @param limit 查询偏移量,即查询多少个 + * @return + */ + public String getOracleQuerySqlByPage(String querySql , int start , int limit, String orderSql){ + StringBuffer querySqlByPage = new StringBuffer(); + querySqlByPage.append("select v1.* from ("); + querySqlByPage.append(" select rownum rn, v.* from "); + querySqlByPage.append(" ("+ querySql +") v where rownum <= " + (start + limit)); + querySqlByPage.append(") v1 where rn > ").append(start); + return querySqlByPage.toString(); + } + + @Override + public void sortDisposableGoodsSummary(Long id, String orderType) { + if(!DatabaseUtil.isPoIdValid(id)){ + throw new SystemException("id不能为空!"); + } + if(!StringUtils.equals(orderType, "up") + && !StringUtils.equals(orderType, "down")){ + throw new SystemException("orderType必须为up或者down!"); + } + DisposableGoodsSummary disposableGoodsSummary = this.get(id); + if(disposableGoodsSummary == null){ + throw new SystemException("不存在id为:" + id + "【一次性物品汇总打印设置】!"); + } + //顺序 + Integer sequence = disposableGoodsSummary.getSequence(); + if(sequence == null){ + DisposableGoods diposableGoods = diposableGoodsManager.get(disposableGoodsSummary.getDisposableGoodsID()); + if(diposableGoods == null){ + throw new SystemException("非法数据,请删除后重新添加!"); + } + throw new SystemException(diposableGoods.getShowName() + "汇总打印设置没有顺序号,请删除后重新添加!"); + } + DisposableGoodsSummary nextDisposableGoodsSummary = getNextDisposableGoodsSummary(disposableGoodsSummary, orderType); + if(nextDisposableGoodsSummary == null){ + return; + } + Integer nextSequence = nextDisposableGoodsSummary.getSequence(); + if(nextSequence == null){ + DisposableGoods diposableGoods = diposableGoodsManager.get(nextDisposableGoodsSummary.getDisposableGoodsID()); + if(diposableGoods == null){ + throw new SystemException("非法数据,请删除后重新添加!"); + } + throw new SystemException(diposableGoods.getShowName() + "汇总打印设置没有顺序号,请删除后重新添加!"); + } + disposableGoodsSummary.setSequence(nextSequence); + nextDisposableGoodsSummary.setSequence(sequence); + this.save(disposableGoodsSummary); + this.save(nextDisposableGoodsSummary); + } + + private DisposableGoodsSummary getNextDisposableGoodsSummary(DisposableGoodsSummary disposableGoodsSummary, String orderType) { + if(disposableGoodsSummary == null || !DatabaseUtil.isPoIdValid(disposableGoodsSummary.getId())){ + return null; + } + if (!(orderType.equalsIgnoreCase("up") || orderType + .equalsIgnoreCase("down"))) { + return null; + } + String sql = "where 1=1 "; + String orderField = " sequence DESC"; + if (orderType.equalsIgnoreCase("up")) + sql += " and (po.sequence < " + + disposableGoodsSummary.getSequence() + ")"; + else { + sql += " and (po.sequence > " + + disposableGoodsSummary.getSequence() + ")"; + orderField = " sequence asc"; + } + List list = objectDao.findBySql(DisposableGoodsSummary.class.getSimpleName(), sql, 0, 1, orderField); + + if (list == null || list.size() == 0) { + return null; + } + return list.get(0); + } + +} Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/action/RecyclingApplicationAction.java =================================================================== diff -u -r34565 -r35835 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/action/RecyclingApplicationAction.java (.../RecyclingApplicationAction.java) (revision 34565) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/action/RecyclingApplicationAction.java (.../RecyclingApplicationAction.java) (revision 35835) @@ -1826,11 +1826,10 @@ */ public void printDisposableGoodsInvoicePlanSummary(){ try { - String inventorySerialNumbers = StrutsParamUtils.getPraramValue("inventorySerialNumber", null); String startDate = StrutsParamUtils.getPraramValue("startDate", ""); String endDate = StrutsParamUtils.getPraramValue("endDate", ""); String printRecordIds = StrutsParamUtils.getPraramValue("printRecordIds", null); - JSONArray result = recyclingApplicationManager.printDisposableGoodsInvoicePlanSummary(inventorySerialNumbers, printRecordIds, startDate, endDate); + JSONArray result = recyclingApplicationManager.printDisposableGoodsInvoicePlanSummary(printRecordIds, startDate, endDate); StrutsResponseUtils.output(true, result); } catch (Exception e) { e.printStackTrace(); Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/action/DiposableGoodsAction.java =================================================================== diff -u -r35610 -r35835 --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/action/DiposableGoodsAction.java (.../DiposableGoodsAction.java) (revision 35610) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/action/DiposableGoodsAction.java (.../DiposableGoodsAction.java) (revision 35835) @@ -1607,8 +1607,13 @@ String spell =StrutsParamUtils.getPraramValue("spell", ""); //是否只查一次性物品 boolean onlySearchDisposableGoods = StrutsParamUtils.getBoolPraramValue("onlySearchDisposableGoods", false); + //是否查询已经添加到【一次性物品汇总打印设置】中的一次性物品GDSZYY-216 + String searchDisposableGoodsSummaryStr = StrutsParamUtils.getPraramValue("searchDisposableGoodsSummary", "true"); + if(!StringUtils.equals(searchDisposableGoodsSummaryStr, "true") && !StringUtils.equals(searchDisposableGoodsSummaryStr, "false")){ + searchDisposableGoodsSummaryStr = "true"; + } List disposableGoodsList = diposableGoodsManager - .getDisposableGoodsByKeyword(spell); + .getDisposableGoodsByKeyword(spell, Boolean.valueOf(searchDisposableGoodsSummaryStr)); if (CollectionUtils.isNotEmpty(disposableGoodsList)) { JSONArray jSONArray = new JSONArray(); for (DisposableGoods disposableGoods : disposableGoodsList) { @@ -1618,6 +1623,8 @@ JSONObject jSONObject = new JSONObject(); jSONObject.put("id", disposableGoods.getId()); jSONObject.put("name", CssdUtils.getDiposableGoodsName(disposableGoods)); + jSONObject.put("disposableGoodsName", disposableGoods.getName()); + jSONObject.put("specification", disposableGoods.getSpecification()); jSONArray.add(jSONObject); } JSONObject jSONObject = new JSONObject(); Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/action/DisposableGoodsSummaryAction.java =================================================================== diff -u --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/action/DisposableGoodsSummaryAction.java (revision 0) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/action/DisposableGoodsSummaryAction.java (revision 35835) @@ -0,0 +1,111 @@ +package com.forgon.disinfectsystem.diposablegoods.action; + +import java.util.List; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; + +import org.apache.commons.collections4.CollectionUtils; +import org.apache.struts2.convention.annotation.Action; +import org.apache.struts2.convention.annotation.Namespace; +import org.apache.struts2.convention.annotation.ParentPackage; + +import com.forgon.disinfectsystem.diposablegoods.service.DisposableGoodsSummaryManager; +import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsSummary; +import com.forgon.disinfectsystem.vo.DisposableGoodsSummaryVo; +import com.forgon.entity.PageEntity; +import com.forgon.tools.StrutsParamUtils; +import com.forgon.tools.StrutsResponseUtils; +import com.forgon.tools.json.JSONUtil; +import com.forgon.tools.util.PageUtil; +import com.opensymphony.xwork2.ModelDriven; +import com.opensymphony.xwork2.Preparable; + +@ParentPackage(value = "default") +@Namespace(value = "/disinfectSystem") +@Action(value = "diposableGoodsSummaryAction") +public class DisposableGoodsSummaryAction implements ModelDriven, Preparable{ + + private DisposableGoodsSummary disposableGoodsSummary; + + private DisposableGoodsSummaryManager disposableGoodsSummaryManager; + + public void setDisposableGoodsSummaryManager(DisposableGoodsSummaryManager disposableGoodsSummaryManager) { + this.disposableGoodsSummaryManager = disposableGoodsSummaryManager; + } + + /** + * 保存【一次性物品汇总打印设置】 + */ + public void saveDisposableGoodsSummary(){ + JSONObject result = JSONUtil.buildJsonObject(true, "保存成功!"); + try { + String disposableGoodsIds = StrutsParamUtils.getPraramValue("disposableGoodsIds", null); + disposableGoodsSummaryManager.saveDisposableGoodsSummary(disposableGoodsIds); + } catch (Exception e) { + result = JSONUtil.buildJsonObject(false, "保存失败:" + e.getMessage()); + } + StrutsResponseUtils.output(result); + } + + /** + * 批量删除【一次性物品汇总打印设置】 + */ + public void batchDeleteDisposableGoodsSummary(){ + JSONObject result = JSONUtil.buildJsonObject(true, "删除成功!"); + try { + String ids = StrutsParamUtils.getPraramValue("ids", null); + disposableGoodsSummaryManager.batchDeleteDisposableGoodsSummary(ids); + } catch (Exception e) { + result = JSONUtil.buildJsonObject(false, "删除失败:" + e.getMessage()); + } + StrutsResponseUtils.output(result); + } + + /** + * 加载【一次性物品汇总打印设置】列表 + */ + public void loadDisposableGoodsSummaryList(){ + JSONObject result = JSONUtil.buildJsonObject(true); + try { + String disposableGoodsName = StrutsParamUtils.getPraramValue("disposableGoodsName", null); + PageEntity pageEntity = PageUtil.getPagePara(); + List disposableGoodsSummaryVoList = disposableGoodsSummaryManager.loadDisposableGoodsSummaryList(disposableGoodsName, pageEntity); + if(CollectionUtils.isNotEmpty(disposableGoodsSummaryVoList)){ + JSONArray data = JSONArray.fromObject(disposableGoodsSummaryVoList); + result = JSONUtil.buildJsonObject(true, data); + JSONUtil.addProperty(result, "totalCount", pageEntity.getCount()); + } + } catch (Exception e) { + result = JSONUtil.buildJsonObject(false, "删除失败:" + e.getMessage()); + } + StrutsResponseUtils.output(result); + } + + /** + * 排序 + */ + public void sortDisposableGoodsSummary(){ + JSONObject result = JSONUtil.buildJsonObject(true); + //up/down + String orderType = StrutsParamUtils.getPraramValue("orderType", null); + try { + Long id = StrutsParamUtils.getPraramLongValue("id", null); + disposableGoodsSummaryManager.sortDisposableGoodsSummary(id, orderType); + } catch (Exception e) { + result = JSONUtil.buildJsonObject(false, "操作失败:" + e.getMessage()); + } + StrutsResponseUtils.output(result); + } + + @Override + public void prepare() throws Exception { + disposableGoodsSummary = new DisposableGoodsSummary(); + } + + @Override + public DisposableGoodsSummary getModel() { + return disposableGoodsSummary; + } + +} Index: ssts-web/src/main/webapp/WEB-INF/spring/applicationContext-disinfectsystem-service.xml =================================================================== diff -u -r35668 -r35835 --- ssts-web/src/main/webapp/WEB-INF/spring/applicationContext-disinfectsystem-service.xml (.../applicationContext-disinfectsystem-service.xml) (revision 35668) +++ ssts-web/src/main/webapp/WEB-INF/spring/applicationContext-disinfectsystem-service.xml (.../applicationContext-disinfectsystem-service.xml) (revision 35835) @@ -2900,4 +2900,16 @@ class="com.forgon.java_websocket.service.PushRecordManagerImpl"> + + + + + + + + + + \ No newline at end of file Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/vo/DisposableGoodsSummaryVo.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/vo/DisposableGoodsSummaryVo.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/vo/DisposableGoodsSummaryVo.java (revision 35835) @@ -0,0 +1,77 @@ +package com.forgon.disinfectsystem.vo; +/** + * 【打印一次性物品汇总单设置】的vo类(GDSZYY-216) + */ +public class DisposableGoodsSummaryVo { + + private Long id; + + private Long disposableGoodsId; + + private String name; + + private String specification; + + private String showName; + + private String inventorySerialNumber; + + private Integer sequence; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getDisposableGoodsId() { + return disposableGoodsId; + } + + public void setDisposableGoodsId(Long disposableGoodsId) { + this.disposableGoodsId = disposableGoodsId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getSpecification() { + return specification; + } + + public void setSpecification(String specification) { + this.specification = specification; + } + + public String getShowName() { + return showName; + } + + public void setShowName(String showName) { + this.showName = showName; + } + + public String getInventorySerialNumber() { + return inventorySerialNumber; + } + + public void setInventorySerialNumber(String inventorySerialNumber) { + this.inventorySerialNumber = inventorySerialNumber; + } + + public Integer getSequence() { + return sequence; + } + + public void setSequence(Integer sequence) { + this.sequence = sequence; + } + +} Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManager.java =================================================================== diff -u -r34831 -r35835 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManager.java (.../RecyclingApplicationManager.java) (revision 34831) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManager.java (.../RecyclingApplicationManager.java) (revision 35835) @@ -560,13 +560,12 @@ /** * 打印一次性物品汇总单(GDSZYY-14) - * @param inventorySerialNumbers 一次性物品定义的物资编码 * @param printRecordIds 批量打印发货计划记录id * @param startTime 打印的开始时间 * @param endTime 打印的结束时间 * @return */ - public JSONArray printDisposableGoodsInvoicePlanSummary(String inventorySerialNumbers, String printRecordIds, String startTime, String endTime); + public JSONArray printDisposableGoodsInvoicePlanSummary(String printRecordIds, String startTime, String endTime); /** * 一个科室只能填写一张未打印并且未发货的一次性物品申请单(GDSZYY-36) Index: forgon-tools/src/main/java/com/forgon/Constants.java =================================================================== diff -u -r35772 -r35835 --- forgon-tools/src/main/java/com/forgon/Constants.java (.../Constants.java) (revision 35772) +++ forgon-tools/src/main/java/com/forgon/Constants.java (.../Constants.java) (revision 35835) @@ -28,7 +28,7 @@ "4.9.45","4.9.46","4.9.47","4.9.48","4.9.49","4.9.50","4.9.51","4.9.52","4.9.53","4.9.54","4.9.55","4.9.56","4.9.57","4.9.58","4.9.59","4.9.60","4.9.61","4.9.62", "4.9.63","4.9.64","4.9.65","4.9.66","4.9.67","4.9.68","4.9.69","4.9.70","4.9.71","4.9.72","4.9.73","4.9.74","4.9.75","4.9.76","4.9.77","4.9.78","4.9.79","4.9.80","4.9.81","4.9.82","4.9.83","4.9.84","4.9.85", "4.9.86","4.9.87","4.9.88","4.9.89","4.9.90","4.9.91","4.9.92","4.9.93","4.9.94","4.9.95","4.9.96","4.9.97","4.9.98","4.9.99","5.0.0","5.0.1","5.0.2","5.0.3","5.0.4","5.0.5","5.0.6","5.0.7", - "5.0.8","5.0.9","5.0.10"}; + "5.0.8","5.0.9","5.0.10","5.0.11"}; // 版本列表(4.0版本升级4.1版需要分两步:先从4.0升到4.1.0、然后从4.1.0升级4.1最新版本) /*public final static String[] SOFTWARE_VERSION_ARRAY = new String[] {