Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/vo/SteriConsumeMaterialUseRecordVo.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/vo/SteriConsumeMaterialUseRecordVo.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/vo/SteriConsumeMaterialUseRecordVo.java (revision 34643) @@ -0,0 +1,136 @@ +package com.forgon.disinfectsystem.vo; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * 灭菌耗材使用记录Vo(GYEY-768) + */ +public class SteriConsumeMaterialUseRecordVo { + + private Long id; + /** + * 灭菌记录ID + */ + private Long sterilizationRecordId; + /** + * 记录创建时间 + */ + private Date createDateTime; + /** + * 备注 + */ + private String remark; + + /** + * 灭菌开始时间 + */ + private Date sterilizationStartDate; + + /** + * 灭菌员 + */ + private String sterilizationUser; + + /** + * 灭菌炉名称 + */ + private String sterilizerName; + + /** + * 灭菌目的 + */ + private String sterilizationPurpose; + + /** + * 灭菌程序 + */ + private String sterilizationType; + + /** + * 灭菌耗材使用明细 + */ + private List details = new ArrayList(); + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getSterilizationRecordId() { + return sterilizationRecordId; + } + + public void setSterilizationRecordId(Long sterilizationRecordId) { + this.sterilizationRecordId = sterilizationRecordId; + } + + public Date getCreateDateTime() { + return createDateTime; + } + + public void setCreateDateTime(Date createDateTime) { + this.createDateTime = createDateTime; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public Date getSterilizationStartDate() { + return sterilizationStartDate; + } + + public void setSterilizationStartDate(Date sterilizationStartDate) { + this.sterilizationStartDate = sterilizationStartDate; + } + + public String getSterilizationUser() { + return sterilizationUser; + } + + public void setSterilizationUser(String sterilizationUser) { + this.sterilizationUser = sterilizationUser; + } + + public String getSterilizerName() { + return sterilizerName; + } + + public void setSterilizerName(String sterilizerName) { + this.sterilizerName = sterilizerName; + } + + public String getSterilizationPurpose() { + return sterilizationPurpose; + } + + public void setSterilizationPurpose(String sterilizationPurpose) { + this.sterilizationPurpose = sterilizationPurpose; + } + + public String getSterilizationType() { + return sterilizationType; + } + + public void setSterilizationType(String sterilizationType) { + this.sterilizationType = sterilizationType; + } + + public List getDetails() { + return details; + } + + public void setDetails(List details) { + this.details = details; + } + +} Index: ssts-web/src/main/webapp/WEB-INF/spring/applicationContext-disinfectsystem-service.xml =================================================================== diff -u -r34597 -r34643 --- ssts-web/src/main/webapp/WEB-INF/spring/applicationContext-disinfectsystem-service.xml (.../applicationContext-disinfectsystem-service.xml) (revision 34597) +++ ssts-web/src/main/webapp/WEB-INF/spring/applicationContext-disinfectsystem-service.xml (.../applicationContext-disinfectsystem-service.xml) (revision 34643) @@ -2838,4 +2838,15 @@ class="com.forgon.disinfectsystem.maintain.tousse.service.IDCardInstanceBindInstrumentManagerImpl"> + + + + + + + + + + \ No newline at end of file Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManagerImpl.java =================================================================== diff -u -r34042 -r34643 --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManagerImpl.java (.../DiposableGoodsManagerImpl.java) (revision 34042) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManagerImpl.java (.../DiposableGoodsManagerImpl.java) (revision 34643) @@ -66,6 +66,7 @@ import com.forgon.disinfectsystem.entity.basedatamanager.materialdefinition.MaterialDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.materialinstance.MaterialInstance; import com.forgon.disinfectsystem.entity.basedatamanager.reportoption.GoodsOption; +import com.forgon.disinfectsystem.entity.basedatamanager.sterilizationpurposedisposablegoods.SteriliPurposeDisposableGoods; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; import com.forgon.disinfectsystem.entity.basedatamanager.warehouse.WareHouse; @@ -86,6 +87,7 @@ import com.forgon.disinfectsystem.inventorymanagement.dao.InventoryDao; import com.forgon.disinfectsystem.inventorymanagement.model.Inventory; import com.forgon.disinfectsystem.vo.PriceAmount; +import com.forgon.exception.SystemException; import com.forgon.log.service.LogManager; import com.forgon.security.tools.Util; import com.forgon.serialnumber.model.SerialNum; @@ -277,6 +279,7 @@ curDisposableGoods.setIsDisable(disposableGoods.getIsDisable()); curDisposableGoods.setFullCaseApplicationAmount(disposableGoods.getFullCaseApplicationAmount()); curDisposableGoods.setWhetherToCharge(disposableGoods.getWhetherToCharge()); + curDisposableGoods.setIsConsumptiveMaterial(disposableGoods.getIsConsumptiveMaterial()); curDisposableGoods.setConsumptiveMaterialType(disposableGoods.getConsumptiveMaterialType()); curDisposableGoods.setConsumptiveMaterialUse(disposableGoods.getConsumptiveMaterialUse()); curDisposableGoods.setConsumptiveMaterialVolume(disposableGoods.getConsumptiveMaterialVolume()); @@ -328,6 +331,28 @@ if(curDisposableGoods == null){ throw new RuntimeException("物品已被删除!"); } + + //物品XXXX已经被引用,不能设置“是否设备耗材”为否”(GYEY-768) + if(StringUtils.equals(curDisposableGoods.getIsConsumptiveMaterial(), Constants.STR_YES) + && StringUtils.equals(disposableGoods.getIsConsumptiveMaterial(), Constants.STR_NO)){ + String countSql = String.format("select count(*) from %s where disposableGoodsId = %s", + SteriliPurposeDisposableGoods.class.getSimpleName(), + curDisposableGoods.getId()); + if(objectDao.countBySql(countSql) > 0){ + throw new SystemException("物品" + curDisposableGoods.getName() + "已经被引用,不能设置“是否设备耗材”为“否”"); + } + } + //物品已经被引用,不能被设置为清洗耗材;(GYEY-768) + if(StringUtils.equals(curDisposableGoods.getConsumptiveMaterialUse(), DisposableGoods.CONSUMPTIVE_MATERIAL_USE_STERILIZER) + && StringUtils.equals(disposableGoods.getIsConsumptiveMaterial(), DisposableGoods.CONSUMPTIVE_MATERIAL_USE_RINSER)){ + String countSql = String.format("select count(*) from %s where disposableGoodsId = %s", + SteriliPurposeDisposableGoods.class.getSimpleName(), + curDisposableGoods.getId()); + if(objectDao.countBySql(countSql) > 0){ + throw new SystemException("物品" + curDisposableGoods.getName() + "已经被引用,不能被设置为清洗耗材"); + } + } + updateDisposableGoodsProperties(curDisposableGoods, disposableGoods); save(curDisposableGoods); // 更新DisposableGoodsStock的属性 Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/sterilizationpurposedisposablegoods/service/SterilizationPurposeDisposableGoodsManagerImpl.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/sterilizationpurposedisposablegoods/service/SterilizationPurposeDisposableGoodsManagerImpl.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/sterilizationpurposedisposablegoods/service/SterilizationPurposeDisposableGoodsManagerImpl.java (revision 34643) @@ -0,0 +1,134 @@ +package com.forgon.disinfectsystem.basedatamanager.sterilizationpurposedisposablegoods.service; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import org.apache.commons.collections.MapUtils; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang.StringUtils; + +import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoods; +import com.forgon.disinfectsystem.entity.basedatamanager.sterilizationpurposedisposablegoods.SteriliPurposeDisposableGoods; +import com.forgon.disinfectsystem.vo.SterilizationPurposeDisposableGoodsVo; +import com.forgon.exception.SystemException; +import com.forgon.systemsetting.model.HttpOption; +import com.forgon.systemsetting.service.HttpOptionManager; +import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.hibernate.BasePoManagerImpl; + +public class SterilizationPurposeDisposableGoodsManagerImpl extends BasePoManagerImpl implements + SterilizationPurposeDisposableGoodsManager { + + private HttpOptionManager httpOptionManager; + + public void setHttpOptionManager(HttpOptionManager httpOptionManager) { + this.httpOptionManager = httpOptionManager; + } + + @SuppressWarnings("unchecked") + @Override + public void saveSterilizationPurposeDisposableGoods( + Long sterilizationPurposeId, String disposableGoodsIds) { + if(!DatabaseUtil.isPoIdValid(sterilizationPurposeId)){ + throw new SystemException("灭菌目的ID无效!"); + } + HttpOption httpOption = httpOptionManager.get(sterilizationPurposeId); + if(httpOption == null || !StringUtils.equals(httpOption.getOptionListId(), HttpOption.SYSTEMSETTING_STERILIZATIONPURPOSE)){ + throw new SystemException("灭菌目的不存在或者已被删除!"); + } + //删除灭菌目的关联的一次性物品灭菌耗材 + String deleteSql = String.format("delete from %s where sterilizationPurposeId = %s", + SteriliPurposeDisposableGoods.class.getSimpleName(), + sterilizationPurposeId); + objectDao.excuteSQL(deleteSql); + //关联一次性物品灭菌耗材,如果耗材ID为空,则只删除灭菌目的绑定的耗材 + if(StringUtils.isNotBlank(disposableGoodsIds)){ + String[] disposableGoodsIdArr = disposableGoodsIds.split(";"); + List disposableGoodsIdList = new ArrayList(); + for (String disposableGoodsIdStr : disposableGoodsIdArr) { + if(DatabaseUtil.isPoIdValid(disposableGoodsIdStr)){ + disposableGoodsIdList.add(Long.valueOf(disposableGoodsIdStr)); + } + } + if(CollectionUtils.isEmpty(disposableGoodsIdList)){ + throw new SystemException("一次性物品耗材ID无效!"); + } + List disposableGoodsList = objectDao.findByIds(DisposableGoods.class.getSimpleName(), disposableGoodsIdList); + if(CollectionUtils.isEmpty(disposableGoodsList)){ + throw new SystemException("一次性物品耗材定义不存在或者已经被删除!"); + } + for (DisposableGoods disposableGoods : disposableGoodsList) { + SteriliPurposeDisposableGoods steriliPurposeDisposableGoods = new SteriliPurposeDisposableGoods(); + steriliPurposeDisposableGoods.setDisposableGoodsId(disposableGoods.getId()); + steriliPurposeDisposableGoods.setSterilizationPurposeId(sterilizationPurposeId); + objectDao.save(steriliPurposeDisposableGoods); + } + } + } + + @Override + public List loadSterilizationPurposeDisposableGoods( + Long sterilizationPurposeId) { + String sql = String.format("select ho.id sterilizationPurposeId, ho.optionText sterilizationPurposeName, dg.id disposableGoodsId, dg.name disposableGoodsName " + + "from %s ho " + + "left join %s spdg on ho.id = spdg.sterilizationPurposeId " + + "left join %s dg on dg.id = spdg.disposableGoodsId " + + "where ho.optionListId = '%s' ", + HttpOption.class.getSimpleName(), + SteriliPurposeDisposableGoods.class.getSimpleName(), + DisposableGoods.class.getSimpleName(), + HttpOption.SYSTEMSETTING_STERILIZATIONPURPOSE); + if(DatabaseUtil.isPoIdValid(sterilizationPurposeId)){ + sql += "and ho.id = " + sterilizationPurposeId; + } + sql += " order by ho.sequence "; + + ResultSet rs = null; + List result = new ArrayList(); + try { + Map sterilizationPurposeDisposableGoodsVoMap = new LinkedHashMap(); + rs = objectDao.executeSql(sql); + while(rs.next()){ + Long sterilizationPurposeIdRs = rs.getLong("sterilizationPurposeId"); + String sterilizationPurposeName = rs.getString("sterilizationPurposeName"); + Long disposableGoodsIdLong = rs.getLong("disposableGoodsId"); + String disposableGoodsName = rs.getString("disposableGoodsName"); + String disposableGoodsId = DatabaseUtil.isPoIdValid(disposableGoodsIdLong) ? disposableGoodsIdLong + "" : ""; + SterilizationPurposeDisposableGoodsVo vo = sterilizationPurposeDisposableGoodsVoMap.get(sterilizationPurposeIdRs); + if(vo == null){ + vo = new SterilizationPurposeDisposableGoodsVo(); + vo.setSterilizationPurposeId(sterilizationPurposeIdRs); + vo.setSterilizationPurposeName(sterilizationPurposeName); + vo.setDisposableGoodsIds(disposableGoodsId); + vo.setDisposableGoodsNames(disposableGoodsName); + sterilizationPurposeDisposableGoodsVoMap.put(sterilizationPurposeIdRs, vo); + continue; + } + if(StringUtils.isBlank(vo.getDisposableGoodsIds())){ + vo.setDisposableGoodsIds(disposableGoodsId); + vo.setDisposableGoodsNames(disposableGoodsName); + }else{ + vo.setDisposableGoodsIds(vo.getDisposableGoodsIds() + ";" + disposableGoodsId); + vo.setDisposableGoodsNames(vo.getDisposableGoodsNames() + "," + disposableGoodsName); + } + sterilizationPurposeDisposableGoodsVoMap.put(sterilizationPurposeIdRs, vo); + } + if(MapUtils.isNotEmpty(sterilizationPurposeDisposableGoodsVoMap)){ + for (Long id : sterilizationPurposeDisposableGoodsVoMap.keySet()) { + result.add(sterilizationPurposeDisposableGoodsVoMap.get(id)); + } + } + } catch (SQLException e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + + return result; + } + +} Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/SteriConsumeMaterialUseDetail.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/SteriConsumeMaterialUseDetail.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/SteriConsumeMaterialUseDetail.java (revision 34643) @@ -0,0 +1,90 @@ +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; + +/** + * 灭菌耗材消耗明细(GYEY-768) + */ +@Entity +@DynamicInsert(false) +@DynamicUpdate(true) +@Table(indexes={@Index(columnList="disposableGoodsId",name="scmud_dgid_index"), + @Index(columnList="disposableGoodsBatchId",name="scmud_dgbid_index"), + @Index(columnList="useRecord_id",name="scmud_urid_index")}) +@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) +public class SteriConsumeMaterialUseDetail { + + private Long id; + + /** + * 一次性物品定义ID + */ + private Long disposableGoodsId; + /** + * 一次性物品批次id + */ + private Long disposableGoodsBatchId; + + /** + * 消耗数量 + */ + private Long useAmount; + + /** + * 库存剩余 + */ + private Long stockAmount; + + @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 Long getDisposableGoodsBatchId() { + return disposableGoodsBatchId; + } + + public void setDisposableGoodsBatchId(Long disposableGoodsBatchId) { + this.disposableGoodsBatchId = disposableGoodsBatchId; + } + + public Long getUseAmount() { + return useAmount; + } + + public void setUseAmount(Long useAmount) { + this.useAmount = useAmount; + } + + public Long getStockAmount() { + return stockAmount; + } + + public void setStockAmount(Long stockAmount) { + this.stockAmount = stockAmount; + } + +} Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/sterilizationpurposedisposablegoods/controller/SterilizationPurposeDisposableGoodsController.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/sterilizationpurposedisposablegoods/controller/SterilizationPurposeDisposableGoodsController.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/sterilizationpurposedisposablegoods/controller/SterilizationPurposeDisposableGoodsController.java (revision 34643) @@ -0,0 +1,67 @@ +package com.forgon.disinfectsystem.basedatamanager.sterilizationpurposedisposablegoods.controller; + +import java.util.Date; +import java.util.List; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import net.sf.json.JsonConfig; + +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.forgon.disinfectsystem.basedatamanager.sterilizationpurposedisposablegoods.service.SterilizationPurposeDisposableGoodsManager; +import com.forgon.disinfectsystem.vo.SterilizationPurposeDisposableGoodsVo; +import com.forgon.tools.json.DateJsonValueProcessor; +import com.forgon.tools.json.JSONUtil; + +@RestController +@RequestMapping(value="/disinfectSystem/baseData/sterilizationPurposeDisposableGoodsController", produces = "application/json;charset=UTF-8") +public class SterilizationPurposeDisposableGoodsController { + + @Autowired + private SterilizationPurposeDisposableGoodsManager sterilizationPurposeDisposableGoodsManager; + + /** + * 灭菌目的关联一次性物品耗材 + * @param sterilizationPurposeId 灭菌目的ID + * @param disposableGoodsIds 一次性物品定义ID,多个id用;分割,例如:1011;1012;1013 + * @return + */ + @RequestMapping("/saveSterilizationPurposeDisposableGoods") + public String saveSterilizationPurposeDisposableGoods(Long sterilizationPurposeId, String disposableGoodsIds){ + JSONObject result = JSONUtil.buildJsonObject(true, "保存成功"); + try { + sterilizationPurposeDisposableGoodsManager.saveSterilizationPurposeDisposableGoods(sterilizationPurposeId, disposableGoodsIds); + } catch (Exception e) { + result = JSONUtil.buildJsonObject(false, "保存失败:" + e.getMessage()); + } + return result.toString(); + } + + /** + * 加载“灭菌目的”及其关联一次性物品名称(耗材名称) + * @param sterilizationPurposeId + * @return + */ + @RequestMapping("/loadSterilizationPurposeDisposableGoods") + public String loadSterilizationPurposeDisposableGoods(Long sterilizationPurposeId){ + JSONObject result = JSONUtil.buildJsonObject(true); + try { + List voList = sterilizationPurposeDisposableGoodsManager.loadSterilizationPurposeDisposableGoods(sterilizationPurposeId); + JSONArray data = new JSONArray(); + if(CollectionUtils.isNotEmpty(voList)){ + JsonConfig config = new JsonConfig(); + config.registerJsonValueProcessor(Date.class, new DateJsonValueProcessor("yyyy-MM-dd")); + data = JSONArray.fromObject(voList, config); + } + result.put("data", data); + } catch (Exception e) { + result = JSONUtil.buildJsonObject(false, "加载失败:" + e.getMessage()); + } + return result.toString(); + } + +} Index: ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/consumptivematerial/controller/SteriConsumeMaterialUseRecordController.java =================================================================== diff -u --- ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/consumptivematerial/controller/SteriConsumeMaterialUseRecordController.java (revision 0) +++ ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/device/consumptivematerial/controller/SteriConsumeMaterialUseRecordController.java (revision 34643) @@ -0,0 +1,270 @@ +package com.forgon.disinfectsystem.maintain.device.consumptivematerial.controller; + +import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.Date; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import net.sf.json.JsonConfig; + +import org.apache.commons.collections.MapUtils; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.forgon.databaseadapter.service.DateQueryAdapter; +import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoods; +import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsBatch; +import com.forgon.disinfectsystem.entity.assestmanagement.SteriConsumeMaterialUseDetail; +import com.forgon.disinfectsystem.entity.assestmanagement.SteriConsumeMaterialUseRecord; +import com.forgon.disinfectsystem.entity.basedatamanager.sterilizer.Sterilizer; +import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationRecord; +import com.forgon.disinfectsystem.vo.SteriConsumeMaterialUseRecordDetailVo; +import com.forgon.disinfectsystem.vo.SteriConsumeMaterialUseRecordVo; +import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.db.InitDbConnection; +import com.forgon.tools.hibernate.ObjectDao; +import com.forgon.tools.json.DateJsonValueProcessor; +import com.forgon.tools.json.JSONUtil; +import com.forgon.tools.util.SqlUtils; + +@RestController +@RequestMapping(value="/disinfectSystem/baseData/steriConsumeMaterialUseRecordController", produces = "application/json;charset=UTF-8") +public class SteriConsumeMaterialUseRecordController { + + @Autowired + private DateQueryAdapter dateQueryAdapter; + + @Autowired + private ObjectDao objectDao; + + @Autowired + private InitDbConnection dbConnection; + + /** + * 加载灭菌耗材使用记录 + * @param beginDateTime 灭菌开始时间查询范围 + * @param endDateTime 灭菌开始时间查询范围 + * @param disposableGoodsId 一次性物品耗材ID + * @param sterilizationUser 灭菌员 + * @param sterilizationType 灭菌程序 + * @param sterilizationPurpose 灭菌目的 + * @param pageNow 当前页码 + * @param pageSize 一页显示的记录数 + * @return + */ + @RequestMapping("/loadSteriConsumeMaterialUseRecord") + public String loadSteriConsumeMaterialUseRecord(String beginDateTime, String endDateTime, + Long disposableGoodsId, String sterilizationUser, String sterilizationType, + Long sterilizerId, String sterilizationPurpose, + Integer pageNow, Integer pageSize){ + JSONObject result = JSONUtil.buildJsonObject(true); + try { + if(pageNow == null || pageNow <= 0){ + pageNow = 1; + } + if(pageSize == null || pageSize <= 0){ + pageSize = 20; + } + + String fromSql = String.format(" from %s po where 1=1 ", SteriConsumeMaterialUseRecord.class.getSimpleName()); + //灭菌记录相关查询条件 + String sterilizationRecordSql = ""; + if(DatabaseUtil.isPoIdValid(sterilizerId)){ + sterilizationRecordSql += " and sr.sterilizer_id = " + sterilizerId; + } + if(StringUtils.isNotBlank(beginDateTime) && StringUtils.isNotBlank(endDateTime)){ + sterilizationRecordSql += " and " + dateQueryAdapter.dateAreaSql("sr.startDate", beginDateTime, endDateTime, true); + fromSql += " and " + dateQueryAdapter.dateAreaSql("po.sterilizationStartDate", beginDateTime, endDateTime, true); + } + if(StringUtils.isNotBlank(sterilizationUser)){ + sterilizationRecordSql += " and sr.sterilizationUser like '%" + sterilizationUser + "%' "; + fromSql += " and po.sterilizationUser like '%" + sterilizationUser + "%' "; + } + if(StringUtils.isNotBlank(sterilizationType)){ + sterilizationRecordSql += " and sr.sterilizationType like '%" + sterilizationType + "%' "; + fromSql += " and po.sterilizationType like '%" + sterilizationType + "%' "; + } + if(StringUtils.isNotBlank(sterilizationPurpose)){ + sterilizationRecordSql += " and sr.sterilizationPurpose like '%" + sterilizationPurpose + "%' "; + fromSql += " and po.sterilizationPurpose like '%" + sterilizationPurpose + "%' "; + } + if(StringUtils.isNotBlank(sterilizationRecordSql)){ + sterilizationRecordSql = String.format("select sr.id from %s sr where 1=1 %s ", + SterilizationRecord.class.getSimpleName(), + sterilizationRecordSql); + } + + //一次性物品耗材过滤条件 + String disposableGoodsSql = ""; + if(DatabaseUtil.isPoIdValid(disposableGoodsId)){ + disposableGoodsSql += String.format("select urd.useRecord_id from %s urd where urd.disposableGoodsId = %s", + SteriConsumeMaterialUseDetail.class.getSimpleName(), + disposableGoodsId); + } + + if(StringUtils.isNotBlank(sterilizationRecordSql)){ + fromSql += String.format(" and po.sterilizationRecordId in (%s)", sterilizationRecordSql); + } + if(StringUtils.isNotBlank(disposableGoodsSql)){ + fromSql += String.format(" and po.id in (%s)", disposableGoodsSql); + } + + String countSql = String.format("select count(*) %s ", fromSql); + + int rowCount = objectDao.countBySql(countSql); + int pageCount = rowCount % pageSize == 0 ? rowCount / pageSize : rowCount / pageSize + 1; + JSONArray data = new JSONArray(); + + if(rowCount > 0){ + String pageColumnName = "id"; + String orderSql = " order by createDateTime desc "; + int start = (pageNow-1) * pageSize; + int limit = pageSize; + + String querySql = String.format("select po.id %s", fromSql); + if(dbConnection.isSqlServer()){ + querySql = getSqlServerIDQuerySqlByPage(querySql, start, limit, pageColumnName, orderSql); + }else if(dbConnection.isOracle()){ + querySql += orderSql; + querySql = getOracleIDQuerySqlByPage(querySql, start, limit); + + } + + String sql = String.format("select ur.id useRecordId, ur.sterilizationRecordId " + + ",ur.sterilizationStartDate, sr.startDate " + + ",ur.sterilizationUser sterilizationUserUr, sr.sterilizationUser sterilizationUserSr " + + ",ur.sterilizerName sterilizerNameUr, st.name sterilizerNameSr " + + ",ur.sterilizationType sterilizationTypeUr, sr.sterilizationType sterilizationTypeSr " + + ",ur.sterilizationPurpose sterilizationPurposeUr, sr.sterilizationPurpose sterilizationPurposeSr " + + ",ur.createDateTime, ur.remark " + + ",urd.id urdID, urd.disposableGoodsId, urd.disposableGoodsBatchId " + + ",dg.name disposableGoodsName, dgb.batchNumber, urd.useAmount, urd.stockAmount " + + "from %s ur " + + "join %s urd on urd.useRecord_id = ur.id " + + "left join %s dg on dg.id = urd.disposableGoodsId " + + "left join %s dgb on dgb.id = urd.disposableGoodsBatchId " + + "left join %s sr on sr.id = ur.sterilizationRecordId " + + "left join %s st on st.id = sr.sterilizer_id " + + "where ur.id in (%s) %s", + SteriConsumeMaterialUseRecord.class.getSimpleName(), + SteriConsumeMaterialUseDetail.class.getSimpleName(), + DisposableGoods.class.getSimpleName(), + DisposableGoodsBatch.class.getSimpleName(), + SterilizationRecord.class.getSimpleName(), + Sterilizer.class.getSimpleName(), + querySql, + orderSql); + + ResultSet rs = null; + try { + Map map = new LinkedHashMap(); + rs = objectDao.executeSql(sql); + while(rs.next()){ + Long useRecordId = rs.getLong("useRecordId"); + SteriConsumeMaterialUseRecordVo vo = map.get(useRecordId); + if(vo == null){ + vo = new SteriConsumeMaterialUseRecordVo(); + vo.setId(useRecordId); + vo.setSterilizationStartDate(rs.getTimestamp("sterilizationStartDate")); + vo.setSterilizationStartDate(rs.getTimestamp("startDate")); + vo.setSterilizationUser(rs.getString("sterilizationUserSr")); + if(StringUtils.isBlank(vo.getSterilizationUser())){ + vo.setSterilizationUser(rs.getString("sterilizationUserUr")); + } + vo.setSterilizerName(rs.getString("sterilizerNameSr")); + if(StringUtils.isBlank(vo.getSterilizerName())){ + vo.setSterilizerName(rs.getString("sterilizerNameUr")); + } + vo.setSterilizationType(rs.getString("sterilizationTypeSr")); + if(StringUtils.isBlank(vo.getSterilizationType())){ + vo.setSterilizationType(rs.getString("sterilizationTypeUr")); + } + vo.setSterilizationPurpose(rs.getString("sterilizationPurposeSr")); + if(StringUtils.isBlank(vo.getSterilizationPurpose())){ + vo.setSterilizationPurpose(rs.getString("sterilizationPurposeUr")); + } + vo.setCreateDateTime(rs.getTimestamp("createDateTime")); + vo.setRemark(rs.getString("remark")); + vo.setSterilizationRecordId(rs.getLong("sterilizationRecordId")); + } + SteriConsumeMaterialUseRecordDetailVo detail = new SteriConsumeMaterialUseRecordDetailVo(); + detail.setDisposableGoodsBatchId(rs.getLong("disposableGoodsBatchId")); + detail.setDisposableGoodsBatchNumber(rs.getString("batchNumber")); + detail.setDisposableGoodsId(rs.getLong("disposableGoodsId")); + detail.setDisposableGoodsName(rs.getString("disposableGoodsName")); + detail.setId(rs.getLong("urdID")); + detail.setStockAmount(rs.getLong("stockAmount")); + detail.setUseAmount(rs.getLong("useAmount")); + vo.getDetails().add(detail); + map.put(useRecordId, vo); + } + if(MapUtils.isNotEmpty(map)){ + List voList = new ArrayList(); + for (Long id : map.keySet()) { + voList.add(map.get(id)); + } + JsonConfig config = new JsonConfig(); + config.registerJsonValueProcessor(Date.class, new DateJsonValueProcessor("yyyy-MM-dd HH:mm")); + data = JSONArray.fromObject(voList, config); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + } + + result.put("rowCount", rowCount); + result.put("pageCount", pageCount); + result.put("data", data); + result.put("success", true); + + } catch (Exception e) { + result = JSONUtil.buildJsonObject(false, "加载失败:" + e.getMessage()); + } + return result.toString(); + } + + /** + * 根据sql语句拼接分页查询语句 + * @param sql 原查询语句(可包含查询条件、排序等) + * @param start 开始记录,即从第多少开始 + * @param limit 查询偏移量,即查询多少个 + * @param pageColumnName + * @return + */ + private String getSqlServerIDQuerySqlByPage(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 "+ (start + 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 + */ + private String getOracleIDQuerySqlByPage(String querySql , int start , int limit){ + StringBuffer querySqlByPage = new StringBuffer(); + querySqlByPage.append("select v1.id 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(); + } + +} Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/SteriConsumeMaterialUseRecord.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/SteriConsumeMaterialUseRecord.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/SteriConsumeMaterialUseRecord.java (revision 34643) @@ -0,0 +1,159 @@ +package com.forgon.disinfectsystem.entity.assestmanagement; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Index; +import javax.persistence.JoinColumn; +import javax.persistence.OneToMany; +import javax.persistence.Table; + +import org.hibernate.annotations.Cache; +import org.hibernate.annotations.CacheConcurrencyStrategy; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; + +/** + * 灭菌耗材消耗记录(GYEY-768) + */ +@Entity +@DynamicInsert(false) +@DynamicUpdate(true) +@Table(indexes={@Index(columnList="sterilizationRecordId",name="scmur_srid_index")}) +@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) +public class SteriConsumeMaterialUseRecord { + + private Long id; + /** + * 灭菌记录ID + */ + private Long sterilizationRecordId; + /** + * 记录创建时间 + */ + private Date createDateTime; + /** + * 备注 + */ + private String remark; + + /** + * 灭菌开始时间 + */ + private Date sterilizationStartDate; + + /** + * 灭菌员 + */ + private String sterilizationUser; + + /** + * 灭菌炉名称 + */ + private String sterilizerName; + + /** + * 灭菌目的 + */ + private String sterilizationPurpose; + + /** + * 灭菌程序 + */ + private String sterilizationType; + + /** + * 耗材使用明细 + */ + private List details = new ArrayList(); + + @Id + @GeneratedValue(strategy=GenerationType.AUTO) + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getSterilizationRecordId() { + return sterilizationRecordId; + } + + public void setSterilizationRecordId(Long sterilizationRecordId) { + this.sterilizationRecordId = sterilizationRecordId; + } + + public Date getCreateDateTime() { + return createDateTime; + } + + public void setCreateDateTime(Date createDateTime) { + this.createDateTime = createDateTime; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public Date getSterilizationStartDate() { + return sterilizationStartDate; + } + + public void setSterilizationStartDate(Date sterilizationStartDate) { + this.sterilizationStartDate = sterilizationStartDate; + } + + public String getSterilizationUser() { + return sterilizationUser; + } + + public void setSterilizationUser(String sterilizationUser) { + this.sterilizationUser = sterilizationUser; + } + + public String getSterilizerName() { + return sterilizerName; + } + + public void setSterilizerName(String sterilizerName) { + this.sterilizerName = sterilizerName; + } + + public String getSterilizationPurpose() { + return sterilizationPurpose; + } + + public void setSterilizationPurpose(String sterilizationPurpose) { + this.sterilizationPurpose = sterilizationPurpose; + } + + public String getSterilizationType() { + return sterilizationType; + } + + public void setSterilizationType(String sterilizationType) { + this.sterilizationType = sterilizationType; + } + + @OneToMany + @JoinColumn(name = "useRecord_id") + public List getDetails() { + return details; + } + + public void setDetails(List details) { + this.details = details; + } + +} Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/sterilizationpurposedisposablegoods/SteriliPurposeDisposableGoods.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/sterilizationpurposedisposablegoods/SteriliPurposeDisposableGoods.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/sterilizationpurposedisposablegoods/SteriliPurposeDisposableGoods.java (revision 34643) @@ -0,0 +1,60 @@ +package com.forgon.disinfectsystem.entity.basedatamanager.sterilizationpurposedisposablegoods; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + +import org.hibernate.annotations.Cache; +import org.hibernate.annotations.CacheConcurrencyStrategy; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; + +/** + * 灭菌目的关联耗材管理(GYEY-768) + */ +@Entity +@DynamicInsert(false) +@DynamicUpdate(true) +@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) +public class SteriliPurposeDisposableGoods { + + private Long id; + + /** + * 灭菌目的ID + */ + private Long sterilizationPurposeId; + + /** + * 一次性物品定义ID + */ + private Long disposableGoodsId; + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getSterilizationPurposeId() { + return sterilizationPurposeId; + } + + public void setSterilizationPurposeId(Long sterilizationPurposeId) { + this.sterilizationPurposeId = sterilizationPurposeId; + } + + public Long getDisposableGoodsId() { + return disposableGoodsId; + } + + public void setDisposableGoodsId(Long disposableGoodsId) { + this.disposableGoodsId = disposableGoodsId; + } + +} Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/vo/SteriConsumeMaterialUseRecordDetailVo.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/vo/SteriConsumeMaterialUseRecordDetailVo.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/vo/SteriConsumeMaterialUseRecordDetailVo.java (revision 34643) @@ -0,0 +1,96 @@ +package com.forgon.disinfectsystem.vo; +/** + * 灭菌耗材使用明细(GYEY-768) + */ +public class SteriConsumeMaterialUseRecordDetailVo { + + private Long id; + + /** + * 一次性物品定义ID + */ + + private Long disposableGoodsId; + + /** + * 一次性物品定义名称 + */ + private String disposableGoodsName; + + /** + * 一次性物品批次id + */ + private Long disposableGoodsBatchId; + + /** + * 一次性物品批次 + */ + private String disposableGoodsBatchNumber; + + /** + * 消耗数量 + */ + private Long useAmount; + + /** + * 库存剩余 + */ + private Long stockAmount; + + 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 getDisposableGoodsName() { + return disposableGoodsName; + } + + public void setDisposableGoodsName(String disposableGoodsName) { + this.disposableGoodsName = disposableGoodsName; + } + + public Long getDisposableGoodsBatchId() { + return disposableGoodsBatchId; + } + + public void setDisposableGoodsBatchId(Long disposableGoodsBatchId) { + this.disposableGoodsBatchId = disposableGoodsBatchId; + } + + public String getDisposableGoodsBatchNumber() { + return disposableGoodsBatchNumber; + } + + public void setDisposableGoodsBatchNumber(String disposableGoodsBatchNumber) { + this.disposableGoodsBatchNumber = disposableGoodsBatchNumber; + } + + public Long getUseAmount() { + return useAmount; + } + + public void setUseAmount(Long useAmount) { + this.useAmount = useAmount; + } + + public Long getStockAmount() { + return stockAmount; + } + + public void setStockAmount(Long stockAmount) { + this.stockAmount = stockAmount; + } + +} Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/action/DiposableGoodsAction.java =================================================================== diff -u -r34039 -r34643 --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/action/DiposableGoodsAction.java (.../DiposableGoodsAction.java) (revision 34039) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/action/DiposableGoodsAction.java (.../DiposableGoodsAction.java) (revision 34643) @@ -2000,4 +2000,34 @@ } StrutsResponseUtils.output(result); } + + /** + * 加载灭菌耗材一次性物品(GYEY-768) + */ + public void loadSterilizerComsumptiveMaterialUseDisposableGoods(){ + JSONArray data = new JSONArray(); + JSONObject result = JSONUtil.buildJsonObject(true, data); + try { + String sql = String.format("select po from %s po where (po.isDisable is null or po.isDisable = '%s') and po.isConsumptiveMaterial = '%s' and po.consumptiveMaterialUse = '%s' ", + DisposableGoods.class.getSimpleName(), + Constants.STR_NO, + Constants.STR_YES, + DisposableGoods.CONSUMPTIVE_MATERIAL_USE_STERILIZER); + List disposableGoodsList = objectDao.findByHql(sql); + if(CollectionUtils.isNotEmpty(disposableGoodsList)){ + for (DisposableGoods disposableGoods : disposableGoodsList) { + JSONObject json = new JSONObject(); + json.put("id", disposableGoods.getId()); + json.put("name", disposableGoods.getName()); + data.add(json); + } + result = JSONUtil.buildJsonObject(true, data); + } + + } catch (Exception e) { + result = JSONUtil.buildJsonObject(false, "加载失败:" + e.getMessage()); + } + StrutsResponseUtils.output(result); + } + } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/vo/SterilizationPurposeDisposableGoodsVo.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/vo/SterilizationPurposeDisposableGoodsVo.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/vo/SterilizationPurposeDisposableGoodsVo.java (revision 34643) @@ -0,0 +1,60 @@ +package com.forgon.disinfectsystem.vo; + +/** + * 灭菌目的及关联的一次性物品VoGYEY-768 + */ +public class SterilizationPurposeDisposableGoodsVo { + + /** + * 灭菌目的ID + */ + private Long sterilizationPurposeId; + + /** + * 灭菌目的名称 + */ + private String sterilizationPurposeName; + + /** + * 灭菌目的关联的一次性物品定义ID(多个ID用;分割,例如:1;2;3) + */ + private String disposableGoodsIds; + + /** + * 灭菌目的关联的一次性物品定义名称(多个名称用,分割,例如:耗材A,耗材B,耗材C) + */ + private String disposableGoodsNames; + + public Long getSterilizationPurposeId() { + return sterilizationPurposeId; + } + + public void setSterilizationPurposeId(Long sterilizationPurposeId) { + this.sterilizationPurposeId = sterilizationPurposeId; + } + + public String getSterilizationPurposeName() { + return sterilizationPurposeName; + } + + public void setSterilizationPurposeName(String sterilizationPurposeName) { + this.sterilizationPurposeName = sterilizationPurposeName; + } + + public String getDisposableGoodsIds() { + return disposableGoodsIds; + } + + public void setDisposableGoodsIds(String disposableGoodsIds) { + this.disposableGoodsIds = disposableGoodsIds; + } + + public String getDisposableGoodsNames() { + return disposableGoodsNames; + } + + public void setDisposableGoodsNames(String disposableGoodsNames) { + this.disposableGoodsNames = disposableGoodsNames; + } + +} Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/sterilizationpurposedisposablegoods/service/SterilizationPurposeDisposableGoodsManager.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/sterilizationpurposedisposablegoods/service/SterilizationPurposeDisposableGoodsManager.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/sterilizationpurposedisposablegoods/service/SterilizationPurposeDisposableGoodsManager.java (revision 34643) @@ -0,0 +1,31 @@ +package com.forgon.disinfectsystem.basedatamanager.sterilizationpurposedisposablegoods.service; + +import java.util.List; + +import com.forgon.disinfectsystem.entity.basedatamanager.sterilizationpurposedisposablegoods.SteriliPurposeDisposableGoods; +import com.forgon.disinfectsystem.vo.SterilizationPurposeDisposableGoodsVo; +import com.forgon.tools.hibernate.BasePoManager; + +/** + * 灭菌目的关联一次性物品耗材的manager(GYEY-768) + */ +public interface SterilizationPurposeDisposableGoodsManager extends BasePoManager { + + /** + * 灭菌目的关联一次性物品耗材 + * @param sterilizationPurposeId 灭菌目的ID + * @param disposableGoodsIds 一次性物品定义ID,多个id用;分割,例如:1011;1012;1013 + * @return + */ + public void saveSterilizationPurposeDisposableGoods(Long sterilizationPurposeId, + String disposableGoodsIds); + + /** + * 灭菌目的关联耗材列表 + * @param sterilizationPurposeId 灭菌目的ID + * @return + */ + public List loadSterilizationPurposeDisposableGoods( + Long sterilizationPurposeId); + +}