Index: ssts-web/src/main/webapp/WEB-INF/spring/applicationContext-disinfectsystem-service.xml =================================================================== diff -u -r33110 -r33302 --- ssts-web/src/main/webapp/WEB-INF/spring/applicationContext-disinfectsystem-service.xml (.../applicationContext-disinfectsystem-service.xml) (revision 33110) +++ ssts-web/src/main/webapp/WEB-INF/spring/applicationContext-disinfectsystem-service.xml (.../applicationContext-disinfectsystem-service.xml) (revision 33302) @@ -2756,4 +2756,15 @@ class="com.forgon.disinfectsystem.tousse.instrumentrepair.service.InstrumentRepairManagerImpl"> + + + + + + + + + + \ No newline at end of file Index: ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/importbasedata/service/ImportBasedataManagerImpl.java =================================================================== diff -u -r32631 -r33302 --- ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/importbasedata/service/ImportBasedataManagerImpl.java (.../ImportBasedataManagerImpl.java) (revision 32631) +++ ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/importbasedata/service/ImportBasedataManagerImpl.java (.../ImportBasedataManagerImpl.java) (revision 33302) @@ -48,6 +48,7 @@ import com.forgon.disinfectsystem.basedatamanager.toussedefinition.service.TousseDefinitionUtils; import com.forgon.disinfectsystem.basedatamanager.warehouse.service.WareHouseManager; import com.forgon.disinfectsystem.common.CssdUtils; +import com.forgon.disinfectsystem.datamodifyrecord.service.DataModifyRecordManager; import com.forgon.disinfectsystem.diposablegoods.service.DiposableGoodsManager; import com.forgon.disinfectsystem.diposablegoods.service.GodownEntryManager; import com.forgon.disinfectsystem.entity.assestmanagement.DiposableGoodsInstance; @@ -75,11 +76,10 @@ import com.forgon.disinfectsystem.entity.basedatamanager.taskGroup.TaskGroup; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.ComboTousseComposite; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.ComboTousseOrgUint; -import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.InstrumentSetType; -import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.InstrumentSetType_TD; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinitionMaterial; import com.forgon.disinfectsystem.entity.basedatamanager.warehouse.WareHouse; +import com.forgon.disinfectsystem.entity.datamodifyrecord.DataModifyRecord; import com.forgon.disinfectsystem.entity.materialmanager.MaterialEntry; import com.forgon.disinfectsystem.entity.materialmanager.MaterialEntryItem; import com.forgon.disinfectsystem.exception.ImportDataException; @@ -169,7 +169,13 @@ // private ImportBasedataManager importBasedataManager; private InstrumentSetTypeManager instrumentSetTypeManager; + + private DataModifyRecordManager dataModifyRecordManager; + public void setDataModifyRecordManager(DataModifyRecordManager dataModifyRecordManager) { + this.dataModifyRecordManager = dataModifyRecordManager; + } + public void setInstrumentSetTypeManager( InstrumentSetTypeManager instrumentSetTypeManager) { this.instrumentSetTypeManager = instrumentSetTypeManager; @@ -3418,6 +3424,10 @@ .getTousseDefinitionByName(tousseDefinition .getName()); if (persistenceTousseDefinition != null) { + //保存器械包定义属性的修改记录 + dataModifyRecordManager.saveObjectModifyRecord(persistenceTousseDefinition, tousseDefinition,DataModifyRecord.MODIFY_TYPE_IMPORT, null, nameToIndexMap.keySet()); + //保存包定义材料的修改记录 + dataModifyRecordManager.saveTousseMaterialModifyRecord(persistenceTousseDefinition, materialInstanceList, diposableGoodsInstanceList); deleteMaterialInstanceByTousseDefinition(persistenceTousseDefinition); persistenceTousseDefinition.calculateMaterialSplitAmount(); tousseDefinition = setPersistenceTousseDefinitionPropertyValueWithOtherTousseDefinition( @@ -3443,6 +3453,8 @@ } if(isNewTousse){ tousseDefinitionManager.addCssdHandleToussesConfig(tousseDefinition); + //保存新建包定义的记录 + dataModifyRecordManager.saveNewDataRecord(tousseDefinition, DataModifyRecord.MODIFY_TYPE_IMPORT); }else{ //如果优先处理科室发生修改且供应室处理器械包配置未配置该包的处理科室,则新增对应供应室处理器械包配置 CssdHandleTousses cssdHandleTousses = @@ -3936,6 +3948,10 @@ TousseDefinition persistenceTousseDefinition = tousseDefinitionManager .getTousseDefinitionByName(tousseDefinition.getName()); if (persistenceTousseDefinition != null) { + //保存器械包定义属性的修改记录 + dataModifyRecordManager.saveObjectModifyRecord(persistenceTousseDefinition, tousseDefinition,DataModifyRecord.MODIFY_TYPE_IMPORT, null, nameToIndexMap.keySet()); + //保存包定义材料的修改记录 + dataModifyRecordManager.saveTousseMaterialModifyRecord(persistenceTousseDefinition, materialInstanceList, diposableGoodsInstanceList); deleteMaterialInstanceByTousseDefinition(persistenceTousseDefinition); tousseDefinition = setPersistenceTousseDefinitionPropertyValueWithOtherTousseDefinition( persistenceTousseDefinition, tousseDefinition); @@ -3955,6 +3971,8 @@ } if(isNewTousse){ tousseDefinitionManager.addCssdHandleToussesConfig(tousseDefinition); + //保存新建包定义的记录 + dataModifyRecordManager.saveNewDataRecord(tousseDefinition, DataModifyRecord.MODIFY_TYPE_IMPORT); }else{ //如果优先处理科室发生修改且供应室处理器械包配置未配置该包的处理科室,则新增对应供应室处理器械包配置 CssdHandleTousses cssdHandleTousses = Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/TousseDefinition.java =================================================================== diff -u -r32382 -r33302 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/TousseDefinition.java (.../TousseDefinition.java) (revision 32382) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/TousseDefinition.java (.../TousseDefinition.java) (revision 33302) @@ -2421,9 +2421,8 @@ InstrumentSetType_TD typeTd = new InstrumentSetType_TD(); typeTd.setInstrumentSetTypeId(instrumentSetType.getId()); typeTd.setTousseDefinitionId(this.id); - typeTDList.add(typeTd); + objectDao.saveOrUpdate(typeTd); } - objectDao.batchSaveOrUpdate(typeTDList); } } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/datamodifyrecord/service/DataModifyRecordManager.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/datamodifyrecord/service/DataModifyRecordManager.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/datamodifyrecord/service/DataModifyRecordManager.java (revision 33302) @@ -0,0 +1,98 @@ +package com.forgon.disinfectsystem.datamodifyrecord.service; + +import java.util.Collection; +import java.util.Date; +import java.util.List; +import net.sf.json.JSONArray; +import com.forgon.disinfectsystem.entity.assestmanagement.DiposableGoodsInstance; +import com.forgon.disinfectsystem.entity.basedatamanager.materialinstance.MaterialInstance; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; +import com.forgon.disinfectsystem.entity.datamodifyrecord.DataModifyRecord; +import com.forgon.disinfectsystem.vo.DataModifyRecordVO; +import com.forgon.tools.hibernate.BasePoManager; + +/** + * 数据改动记录的接口ZSWY-164 + * @author ZhouPeiMian + * @since 2022-02-25 + */ +public interface DataModifyRecordManager extends BasePoManager{ + + /** + * 保存新建对象时的日志记录 + * @param newObject + * @param modifyType + */ + public void saveNewDataRecord(Object newObject, String modifyType); + + /** + * 比较对象,并保存对象的修改记录 + * @param oldObject 修改前对象 + * @param newObject 修改后对象 + * @param modifyType 修改类型:手工、导入 + */ + public void saveObjectModifyRecord(Object oldObject, Object newObject, String modifyType); + + /** + * 保存包定义材料修改日志 + * @param td 包定义 + * @param jsonArray 材料参数 + */ + public void saveTousseMaterialModifyRecord(TousseDefinition td, JSONArray jsonArray); + + /** + * 加载某个对象的修改记录 + * @param objectID 对象的ID + * @param modifyRecordModel 对象所属模块:例如器械包定义 + * @return + */ + public List loadDataModifyRecord(String objectID, String modifyRecordModel); + + /** + * 加载某个对象的修改记录VO + * @param objectID 对象的ID + * @param modifyRecordModel 对象所属模块:例如器械包定义 + * @return + */ + public List loadDataModifyRecordVO(String objectID, String modifyRecordModel); + + /** + * 保存数据的修改记录 + * @param objectID 被修改对象的ID + * @param modifyDetail 修改内容的说明 + * @param newValue 修改后的内容 + * @param oldValue 修改前的内容 + * @param modifyDate 修改日期 + * @param model 修改对象所属功能模块 + * @param modifyType 修改方式 + * @param userId 修改人的用户ID + */ + public void saveDataModifyRecord(Long objectID, + String modifyDetail, String newValue, String oldValue, Date modifyDate, + String modelToussedefinition, String modifyTypeManual, Long userId); + + /** + * 保存包定义材料修改日志 + * @param persistenceTousseDefinition + * @param materialInstanceList + * @param diposableGoodsInstanceList + */ + public void saveTousseMaterialModifyRecord(TousseDefinition persistenceTousseDefinition, + List materialInstanceList, + List diposableGoodsInstanceList); + + /** + * 比较对象,并保存对象的修改记录,忽略部分字段不需要比较 + * @param oldObject 修改前对象 + * @param newObject 修改后对象 + * @param modifyType 修改类型:手工、导入 + * @param ignoreCompareField 不需要比较的字段集合 + * @param needCompareFields 需要比较的字段集合 + */ + public void saveObjectModifyRecord( + Object oldObject, + Object newObject, String modifyTypeImport, + Collection ignoreCompareFields, + Collection needCompareFields); + +} Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java =================================================================== diff -u -r32533 -r33302 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java (.../TousseDefinitionManagerImpl.java) (revision 32533) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java (.../TousseDefinitionManagerImpl.java) (revision 33302) @@ -55,6 +55,7 @@ import com.forgon.disinfectsystem.basedatamanager.supplier.service.SupplierManager; import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager; import com.forgon.disinfectsystem.common.CssdUtils; +import com.forgon.disinfectsystem.datamodifyrecord.service.DataModifyRecordManager; import com.forgon.disinfectsystem.diposablegoods.service.DiposableGoodsManager; import com.forgon.disinfectsystem.entity.assestmanagement.DiposableGoodsInstance; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoods; @@ -72,6 +73,7 @@ import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; import com.forgon.disinfectsystem.entity.basedatamanager.videomanager.VideoFile; import com.forgon.disinfectsystem.entity.becleanitem.ClassifiedItem; +import com.forgon.disinfectsystem.entity.datamodifyrecord.DataModifyRecord; import com.forgon.disinfectsystem.entity.idcarddefinition.IDCardDefinition; import com.forgon.disinfectsystem.entity.idcardinstance.IDCardInstance; import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; @@ -164,7 +166,13 @@ private DepartmentStockManager departmentStockManager; private SqlFunctionsAdapter sqlFunctionsAdapter; + + private DataModifyRecordManager dataModifyRecordManager; + public void setDataModifyRecordManager(DataModifyRecordManager dataModifyRecordManager) { + this.dataModifyRecordManager = dataModifyRecordManager; + } + public void setMaterialInstanceManager( MaterialInstanceManager materialInstanceManager) { this.materialInstanceManager = materialInstanceManager; @@ -496,6 +504,10 @@ materialInstanceStr = materialInstanceStr.replace("\\\"", "\""); } JSONArray jsonArray = JSONArray.fromObject(materialInstanceStr); + + //保存材料修改日志ZSWY-164 + dataModifyRecordManager.saveTousseMaterialModifyRecord(td, jsonArray); + if(updateMaterialDisposableMode == TousseDefinition.UPDATE_MATERIAL_DISPOSABLE_MODE_ONLY_MATERIAL){ int materialSize = jsonArray.size(); if(materialSize > 0){ @@ -3892,6 +3904,7 @@ if(origineTdRiskLevel.intValue() != tousseDefinitionRiskLevel.intValue()){ modifyContent.append("字段:风险级别,原值:").append(origineTd.getRiskLevel()).append(",新值:").append(tousseDefinition.getRiskLevel()).append("。"); } + dataModifyRecordManager.saveObjectModifyRecord(origineTd, tousseDefinition, DataModifyRecord.MODIFY_TYPE_MANUAL); return modifyContent.toString(); } @@ -4176,6 +4189,9 @@ if(tdParameterDto != null){ tousseDefinition.saveInstrumentSetTypes(objectDao, tdParameterDto.getInstrumentSetTypeIds()); } + if(newTousse){ + dataModifyRecordManager.saveNewDataRecord(tousseDefinition, DataModifyRecord.MODIFY_TYPE_MANUAL); + } } //上传视频后删除本地的临时文件 videoFileManager.deleteTempFile(); Index: ssts-idcard/src/main/java/com/forgon/disinfectsystem/idcardinstance/service/IDCardInstanceManagerImpl.java =================================================================== diff -u -r18652 -r33302 --- ssts-idcard/src/main/java/com/forgon/disinfectsystem/idcardinstance/service/IDCardInstanceManagerImpl.java (.../IDCardInstanceManagerImpl.java) (revision 18652) +++ ssts-idcard/src/main/java/com/forgon/disinfectsystem/idcardinstance/service/IDCardInstanceManagerImpl.java (.../IDCardInstanceManagerImpl.java) (revision 33302) @@ -20,10 +20,13 @@ import org.hibernate.Query; import org.hibernate.Session; +import com.forgon.directory.acegi.tools.AcegiHelper; import com.forgon.directory.model.BarcodeDevice; import com.forgon.disinfectsystem.barcode.service.BarcodeManager; +import com.forgon.disinfectsystem.datamodifyrecord.service.DataModifyRecordManager; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; +import com.forgon.disinfectsystem.entity.datamodifyrecord.DataModifyRecord; import com.forgon.disinfectsystem.entity.idcarddefinition.IDCardDefinition; import com.forgon.disinfectsystem.entity.idcardinstance.IDCardInstance; import com.forgon.disinfectsystem.entity.materialerrordamage.MaterialErrorDamageDetail; @@ -44,7 +47,13 @@ private IDCardDefinitionManager idCardDefinitionManager; private SerialNumManager serialNumManager; + + private DataModifyRecordManager dataModifyRecordManager; + public void setDataModifyRecordManager(DataModifyRecordManager dataModifyRecordManager) { + this.dataModifyRecordManager = dataModifyRecordManager; + } + public void setBarcodeManager(BarcodeManager barcodeManager) { this.barcodeManager = barcodeManager; } @@ -82,6 +91,15 @@ objectDao.update(idCardDefinition); } + if(DatabaseUtil.isPoIdValid(tousseDefinition.getId())){ + String modifyDetail = "添加标识牌"; + String newValue = "条码:" + idCardInstance.getBarcode(); + dataModifyRecordManager.saveDataModifyRecord(tousseDefinition.getId(), + modifyDetail, newValue, null, new Date(), + DataModifyRecord.MODEL_TOUSSEDEFINITION, DataModifyRecord.MODIFY_TYPE_MANUAL, + AcegiHelper.getLoginUser().getUserId()); + } + return idCardInstance; } Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/videomanager/action/VideoFileAction.java =================================================================== diff -u -r27125 -r33302 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/videomanager/action/VideoFileAction.java (.../VideoFileAction.java) (revision 27125) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/videomanager/action/VideoFileAction.java (.../VideoFileAction.java) (revision 33302) @@ -3,6 +3,7 @@ import java.io.File; import java.io.IOException; import java.util.ArrayList; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -16,14 +17,18 @@ import org.apache.struts2.convention.annotation.ParentPackage; import org.apache.struts2.convention.annotation.Result; +import com.forgon.directory.acegi.tools.AcegiHelper; import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager; +import com.forgon.disinfectsystem.datamodifyrecord.service.DataModifyRecordManager; import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.videomanager.VideoFile; +import com.forgon.disinfectsystem.entity.datamodifyrecord.DataModifyRecord; import com.forgon.disinfectsystem.tousse.materialdefinition.service.MaterialDefinitionManager; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseDefinitionManager; import com.forgon.disinfectsystem.tousse.videomanager.service.VideoFileManager; import com.forgon.tools.StrutsParamUtils; +import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.hibernate.ObjectDao; import com.opensymphony.xwork2.Preparable; @@ -53,7 +58,12 @@ private SupplyRoomConfigManager supplyRoomConfigManager; - public void setSupplyRoomConfigManager( + private DataModifyRecordManager dataModifyRecordManager; + + public void setDataModifyRecordManager(DataModifyRecordManager dataModifyRecordManager) { + this.dataModifyRecordManager = dataModifyRecordManager; + } + public void setSupplyRoomConfigManager( SupplyRoomConfigManager supplyRoomConfigManager) { this.supplyRoomConfigManager = supplyRoomConfigManager; } @@ -235,6 +245,17 @@ uuidName += video.getUuid_videoName()+";"; } objectDao.saveOrUpdate(video); + + if(DatabaseUtil.isPoIdValid(tousse.getId())){ + String modifyDetail = "上传" + videoType; + String newValue = "原始文件名:" + video.getVideoName() + + ";存放在磁盘路径下的文件名:" + video.getUuid_videoName(); + + dataModifyRecordManager.saveDataModifyRecord(tousse.getId(), + modifyDetail, newValue, null, new Date(), + DataModifyRecord.MODEL_TOUSSEDEFINITION, DataModifyRecord.MODIFY_TYPE_MANUAL, + AcegiHelper.getLoginUser().getUserId()); + } } String uuid_vedioNames = tousse.getUuid_vedioNames(); if(StringUtils.isBlank(uuid_vedioNames)){ Index: ssts-idcard/src/main/java/com/forgon/disinfectsystem/idcarddefinition/service/IDCardDefinitionManagerImpl.java =================================================================== diff -u -r33228 -r33302 --- ssts-idcard/src/main/java/com/forgon/disinfectsystem/idcarddefinition/service/IDCardDefinitionManagerImpl.java (.../IDCardDefinitionManagerImpl.java) (revision 33228) +++ ssts-idcard/src/main/java/com/forgon/disinfectsystem/idcarddefinition/service/IDCardDefinitionManagerImpl.java (.../IDCardDefinitionManagerImpl.java) (revision 33302) @@ -32,6 +32,7 @@ import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager; import com.forgon.disinfectsystem.basedatamanager.toussedefinition.service.TousseInstanceUtils; import com.forgon.disinfectsystem.common.Constants; +import com.forgon.disinfectsystem.datamodifyrecord.service.DataModifyRecordManager; import com.forgon.disinfectsystem.entity.assestmanagement.DiposableGoodsInstance; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoods; import com.forgon.disinfectsystem.entity.basedatamanager.container.Container; @@ -42,6 +43,7 @@ import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; +import com.forgon.disinfectsystem.entity.datamodifyrecord.DataModifyRecord; import com.forgon.disinfectsystem.entity.idcarddefinition.IDCardDefinition; import com.forgon.disinfectsystem.entity.idcardinstance.IDCardInstance; import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; @@ -90,6 +92,12 @@ private TousseDefinitionBelongDepartManager tousseDefinitionBelongDepartManager; + private DataModifyRecordManager dataModifyRecordManager; + + public void setDataModifyRecordManager(DataModifyRecordManager dataModifyRecordManager) { + this.dataModifyRecordManager = dataModifyRecordManager; + } + public void setTousseDefinitionBelongDepartManager( TousseDefinitionBelongDepartManager tousseDefinitionBelongDepartManager) { this.tousseDefinitionBelongDepartManager = tousseDefinitionBelongDepartManager; @@ -976,12 +984,26 @@ if (curIDCardDefinition == null) { throw new RuntimeException("标识牌已被删除!"); } + String oldDeletedStatus = curIDCardDefinition.getStatus(); // 是否废弃 curIDCardDefinition.setDeleted(JSONUtil.optInteger(idCardDefinition, "deleted", 0)); curIDCardDefinition.setIdNumber(JSONUtil.optString(idCardDefinition, "idNumber", null)); // 描述 curIDCardDefinition.setDescription(JSONUtil.optString(idCardDefinition, "description", "")); objectDao.update(curIDCardDefinition); + if(curIDCardDefinition.getDeleted() != null + && curIDCardDefinition.getDeleted().intValue() == IDCardDefinition.INT_STATUS_DISCARDED + && DatabaseUtil.isPoIdValid(curIDCardDefinition.getTousseDefinitionID())){ + //废弃标识牌时保存修改记录 + String modifyDetail = "废弃标识牌"; + String newValue = "条码:" + curIDCardDefinition.getCurIdCardInstanceBarcode() + ",状态:已废弃"; + String oldValue = "条码:" + curIDCardDefinition.getCurIdCardInstanceBarcode() + ",状态:" + oldDeletedStatus; + dataModifyRecordManager.saveDataModifyRecord(curIDCardDefinition.getTousseDefinitionID(), + modifyDetail, newValue, oldValue, + new Date(), DataModifyRecord.MODEL_TOUSSEDEFINITION, + DataModifyRecord.MODIFY_TYPE_MANUAL, + AcegiHelper.getLoginUser().getUserId()); + } } @Override public void newAndSaveContainer(IDCardDefinition idCardDefinition) { Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/vo/DataModifyRecordVO.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/vo/DataModifyRecordVO.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/vo/DataModifyRecordVO.java (revision 33302) @@ -0,0 +1,153 @@ +package com.forgon.disinfectsystem.vo; + +import java.util.Date; + +/** + * 数据修改记录的VO类 + * @author ZhouPeiMian + * @since 2022-03-01 + * + */ +public class DataModifyRecordVO { + + private Long id; + + /** + * 修改人ID + */ + private Long modifyUserID; + + /** + * 修改人姓名 + */ + private String modifyUserName; + + /** + * 修改时间 + */ + private Date modifyDateTime; + + /** + * 修改内容说明 + */ + private String modifyDetail; + + /** + * 修改的字段名称 + */ + private String modifyField; + + /** + * 被修改的数据所属功能模块 + */ + private String modifyRecordModel; + + /** + * 被修改对象的ID + */ + private Long objectID; + + /** + * 修改方式:手工、导入 + */ + private String modifyType; + + /** + * 原值 + */ + private String oldValue; + + /** + * 新值 + */ + private String newValue; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getModifyUserID() { + return modifyUserID; + } + + public void setModifyUserID(Long modifyUserID) { + this.modifyUserID = modifyUserID; + } + + public String getModifyUserName() { + return modifyUserName; + } + + public void setModifyUserName(String modifyUserName) { + this.modifyUserName = modifyUserName; + } + + public Date getModifyDateTime() { + return modifyDateTime; + } + + public void setModifyDateTime(Date modifyDateTime) { + this.modifyDateTime = modifyDateTime; + } + + public String getModifyDetail() { + return modifyDetail; + } + + public void setModifyDetail(String modifyDetail) { + this.modifyDetail = modifyDetail; + } + + public String getModifyField() { + return modifyField; + } + + public void setModifyField(String modifyField) { + this.modifyField = modifyField; + } + + public String getModifyRecordModel() { + return modifyRecordModel; + } + + public void setModifyRecordModel(String modifyRecordModel) { + this.modifyRecordModel = modifyRecordModel; + } + + public Long getObjectID() { + return objectID; + } + + public void setObjectID(Long objectID) { + this.objectID = objectID; + } + + public String getModifyType() { + return modifyType; + } + + public void setModifyType(String modifyType) { + this.modifyType = modifyType; + } + + public String getOldValue() { + return oldValue; + } + + public void setOldValue(String oldValue) { + this.oldValue = oldValue; + } + + public String getNewValue() { + return newValue; + } + + public void setNewValue(String newValue) { + this.newValue = newValue; + } + +} Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/datamodifyrecord/DataModifyRecord.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/datamodifyrecord/DataModifyRecord.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/datamodifyrecord/DataModifyRecord.java (revision 33302) @@ -0,0 +1,170 @@ +package com.forgon.disinfectsystem.entity.datamodifyrecord; + +import java.util.Date; + +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; + +/** + * 数据的改动记录ZSWY-164 + * @author ZhouPeiMian + * @since 2022-02-24 + */ +@Entity +@DynamicInsert(false) +@DynamicUpdate(true) +@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) +public class DataModifyRecord { + + private Long id; + + /** + * 修改人ID + */ + private Long modifyUserID; + + /** + * 修改时间 + */ + private Date modifyDateTime; + + /** + * 修改内容说明 + */ + private String modifyDetail; + + /** + * 修改的字段名称 + */ + private String modifyField; + + /** + * 被修改的数据所属功能模块 + */ + private String modifyRecordModel; + + /** + * 被修改对象的ID + */ + private Long objectID; + + /** + * 修改方式:手工、导入 + */ + private String modifyType; + + /** + * 原值 + */ + private String oldValue; + + /** + * 新值 + */ + private String newValue; + + /** + * 修改方式:手工 + */ + public static final String MODIFY_TYPE_MANUAL = "手工"; + + /** + * 修改方式:导入 + */ + public static final String MODIFY_TYPE_IMPORT = "导入"; + + /** + * 功能模块 + */ + public static final String MODEL_TOUSSEDEFINITION = "器械包定义"; + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getModifyUserID() { + return modifyUserID; + } + + public void setModifyUserID(Long modifyUserID) { + this.modifyUserID = modifyUserID; + } + + public Date getModifyDateTime() { + return modifyDateTime; + } + + public void setModifyDateTime(Date modifyDateTime) { + this.modifyDateTime = modifyDateTime; + } + + public String getModifyDetail() { + return modifyDetail; + } + + public void setModifyDetail(String modifyDetail) { + this.modifyDetail = modifyDetail; + } + + public String getModifyField() { + return modifyField; + } + + public void setModifyField(String modifyField) { + this.modifyField = modifyField; + } + + public String getModifyRecordModel() { + return modifyRecordModel; + } + + public void setModifyRecordModel(String modifyRecordModel) { + this.modifyRecordModel = modifyRecordModel; + } + + public String getModifyType() { + return modifyType; + } + + public void setModifyType(String modifyType) { + this.modifyType = modifyType; + } + + public String getOldValue() { + return oldValue; + } + + public void setOldValue(String oldValue) { + this.oldValue = oldValue; + } + + public String getNewValue() { + return newValue; + } + + public void setNewValue(String newValue) { + this.newValue = newValue; + } + + public Long getObjectID() { + return objectID; + } + + public void setObjectID(Long objectID) { + this.objectID = objectID; + } + +} Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/datamodifyrecord/action/DataModifyRecordAction.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/datamodifyrecord/action/DataModifyRecordAction.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/datamodifyrecord/action/DataModifyRecordAction.java (revision 33302) @@ -0,0 +1,86 @@ +package com.forgon.disinfectsystem.datamodifyrecord.action; + +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.apache.commons.lang3.StringUtils; +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.datamodifyrecord.service.DataModifyRecordManager; +import com.forgon.disinfectsystem.entity.datamodifyrecord.DataModifyRecord; +import com.forgon.disinfectsystem.vo.DataModifyRecordVO; +import com.forgon.tools.StrutsParamUtils; +import com.forgon.tools.StrutsResponseUtils; +import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.json.DateJsonValueProcessor; +import com.forgon.tools.json.JSONUtil; +import com.opensymphony.xwork2.ModelDriven; +import com.opensymphony.xwork2.Preparable; + +/** + * 数据的改动记录的接口ZSWY-164 + * @author ZhouPeiMian + * @since 2022-02-25 + */ +@ParentPackage(value = "default") +@Namespace(value = "/disinfectSystem") +@Action(value = "dataModifyRecordAction") +public class DataModifyRecordAction implements ModelDriven, Preparable { + + private DataModifyRecord dataModifyRecord; + + private DataModifyRecordManager dataModifyRecordManager; + + public void setDataModifyRecordManager(DataModifyRecordManager dataModifyRecordManager) { + this.dataModifyRecordManager = dataModifyRecordManager; + } + + public void loadDataModifyRecord(){ + String objectID = StrutsParamUtils.getPraramValue("objectID", ""); + String modifyRecordModel = StrutsParamUtils.getPraramValue("modifyRecordModel", ""); + JSONObject result = new JSONObject(); + JSONArray data = new JSONArray(); + JSONUtil.addSuccess(result, true); + try { + List dataModifyRecordVOList = dataModifyRecordManager.loadDataModifyRecordVO(objectID, modifyRecordModel); + if(CollectionUtils.isNotEmpty(dataModifyRecordVOList)){ + JsonConfig config = new JsonConfig(); + config.registerJsonValueProcessor(Date.class, new DateJsonValueProcessor("yyyy-MM-dd HH:mm")); + data = JSONArray.fromObject(dataModifyRecordVOList, config); + } + JSONUtil.addProperty(result, "data", data); + } catch (Exception e) { + JSONUtil.addSuccess(result, false); + JSONUtil.addMessage(result, "查询失败:" + e.getMessage()); + } + StrutsResponseUtils.output(result); + } + + @Override + public void prepare() throws Exception { + iniInfo(); + } + + @Override + public DataModifyRecord getModel() { + return dataModifyRecord; + } + + public void iniInfo() { + String id = StrutsParamUtils.getPraramValue("id", ""); + if (StringUtils.isNotBlank(id) && DatabaseUtil.isPoIdValid(id)) { + dataModifyRecord = dataModifyRecordManager.get(id); + } + if(dataModifyRecord == null){ + dataModifyRecord = new DataModifyRecord(); + } + } + +} Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/imagefilemanager/service/ImageFileManagerImpl.java =================================================================== diff -u -r32858 -r33302 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/imagefilemanager/service/ImageFileManagerImpl.java (.../ImageFileManagerImpl.java) (revision 32858) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/imagefilemanager/service/ImageFileManagerImpl.java (.../ImageFileManagerImpl.java) (revision 33302) @@ -18,6 +18,7 @@ import java.sql.ResultSet; import java.util.ArrayList; import java.util.Arrays; +import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -40,6 +41,7 @@ import com.forgon.directory.acegi.tools.AcegiHelper; import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager; import com.forgon.disinfectsystem.common.geom.SizeAndPosition; +import com.forgon.disinfectsystem.datamodifyrecord.service.DataModifyRecordManager; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoods; import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoodsBill; import com.forgon.disinfectsystem.entity.basedatamanager.imagefilemanager.ImageFile; @@ -51,8 +53,8 @@ import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; import com.forgon.disinfectsystem.entity.basedatamanager.videomanager.VideoFile; +import com.forgon.disinfectsystem.entity.datamodifyrecord.DataModifyRecord; import com.forgon.disinfectsystem.entity.expensivegoods.AuthorizationCertification; -import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; import com.forgon.disinfectsystem.entity.qualitymonitoringmanager.qualitymonitoring.QualityMonitoringInstance; import com.forgon.disinfectsystem.entity.recyclingrecord.RecyclingItem; import com.forgon.disinfectsystem.entity.recyclingrecord.RecyclingRecord; @@ -83,7 +85,13 @@ private SupplyRoomConfigManager supplyRoomConfigManager; private LogManager appLogManager; + + private DataModifyRecordManager dataModifyRecordManager; + public void setDataModifyRecordManager(DataModifyRecordManager dataModifyRecordManager) { + this.dataModifyRecordManager = dataModifyRecordManager; + } + public void setSupplyRoomConfigManager( SupplyRoomConfigManager supplyRoomConfigManager) { this.supplyRoomConfigManager = supplyRoomConfigManager; @@ -126,6 +134,23 @@ description.put("UUIDImageName", imageFileObj.getUUIDImageName()); appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_BASEDATA, "删除图片", description); + + String imageType = imageFileObj.getImageType(); + if(DatabaseUtil.isPoIdValid(imageFileObj.getObjectId())){ + if(ImageFile.IMAGE_TYPE_TOUSSE.equals(imageType) + || ImageFile.IMAGE_TYPE_TOUSSEPACKING.equals(imageType) + || ImageFile.IMAGE_TYPE_SPECIFICATION.equals(imageType) + || ImageFile.IMAGE_TYPE_TOUSSE_WASHGUIDE.equals(imageType)){ + //删除包图片时,记录改动记录ZSWY-164 + String modifyDetail = "删除" + imageType; + String oldValue = "原始文件名:" + imageFileObj.getImageName() + + ";存放在磁盘路径下的文件名:" + imageFileObj.getUUIDImageName(); + dataModifyRecordManager.saveDataModifyRecord(Long.valueOf(imageFileObj.getObjectId()), modifyDetail, + null, oldValue, new Date(), + DataModifyRecord.MODEL_TOUSSEDEFINITION, DataModifyRecord.MODIFY_TYPE_MANUAL, + AcegiHelper.getLoginUser().getUserId()); + } + } } } @@ -471,6 +496,23 @@ } else { saveImageToLocal(imageFile, saveImageDirectory); } + if(DatabaseUtil.isPoIdValid(imageFile.getObjectId())){ + String imageType = imageFile.getImageType(); + if(ImageFile.IMAGE_TYPE_TOUSSE.equals(imageType) + || ImageFile.IMAGE_TYPE_TOUSSEPACKING.equals(imageType) + || ImageFile.IMAGE_TYPE_SPECIFICATION.equals(imageType) + || ImageFile.IMAGE_TYPE_TOUSSE_WASHGUIDE.equals(imageType)){ + + //删除包图片时,记录改动记录ZSWY-164 + String modifyDetail = "上传" + imageType; + String newValue = "原始文件名:" + imageFile.getImageName() + + ";存放在磁盘路径下的文件名:" + imageFile.getUUIDImageName(); + dataModifyRecordManager.saveDataModifyRecord(Long.valueOf(imageFile.getObjectId()), modifyDetail, + newValue, null, new Date(), + DataModifyRecord.MODEL_TOUSSEDEFINITION, DataModifyRecord.MODIFY_TYPE_MANUAL, + AcegiHelper.getLoginUser().getUserId()); + } + } } public BufferedImage abbreviatedZoom_old(byte[] imageData) { Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/datamodifyrecord/service/DataModifyRecordManagerImpl.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/datamodifyrecord/service/DataModifyRecordManagerImpl.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/datamodifyrecord/service/DataModifyRecordManagerImpl.java (revision 33302) @@ -0,0 +1,728 @@ +package com.forgon.disinfectsystem.datamodifyrecord.service; + +import java.beans.Introspector; +import java.beans.PropertyDescriptor; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; + +import org.apache.commons.beanutils.BeanUtils; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.collections.MapUtils; +import org.apache.commons.lang.StringUtils; + +import com.forgon.directory.acegi.tools.AcegiHelper; +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.basedatamanager.materialdefinition.MaterialDefinition; +import com.forgon.disinfectsystem.entity.basedatamanager.materialinstance.MaterialInstance; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; +import com.forgon.disinfectsystem.entity.datamodifyrecord.DataModifyRecord; +import com.forgon.disinfectsystem.vo.DataModifyRecordVO; +import com.forgon.exception.SystemException; +import com.forgon.security.model.User; +import com.forgon.security.service.UserManager; +import com.forgon.tools.date.DateTools; +import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.hibernate.BasePoManagerImpl; + +public class DataModifyRecordManagerImpl extends BasePoManagerImpl implements DataModifyRecordManager { + + private UserManager userManager; + + public void setUserManager(UserManager userManager) { + this.userManager = userManager; + } + + @Override + public void saveObjectModifyRecord(Object oldObject, Object newObject, String modifyType) { + this.saveObjectModifyRecord(oldObject, newObject, modifyType, null, null); + } + + @Override + public void saveObjectModifyRecord(Object oldObject, Object newObject, String modifyType, + Collection ignoreCompareField, + Collection needCompareFields) { + if(oldObject == null || newObject == null){ + return; + } + if(StringUtils.isBlank(modifyType)){ + throw new SystemException("修改类型不能为空"); + } + if(oldObject.getClass() != newObject.getClass()){ + throw new SystemException("对象类型不一致!"); + } + //获取修改的字段名称,以及字段的值 + Map> resultMap = compareFields(oldObject, newObject); + //所属种类 + if(oldObject instanceof TousseDefinition){ + if(resultMap == null){ + resultMap = new HashMap>(); + } + TousseDefinition oldTD = (TousseDefinition) oldObject; + TousseDefinition newTD = (TousseDefinition) newObject; + String oldInstrumentSetTypes = oldTD.getInstrumentSetTypes(objectDao); + String newInstrumentSetTypes = newTD.getInstrumentSetTypes(objectDao); + if(!StringUtils.equals(oldInstrumentSetTypes, newInstrumentSetTypes)){ + Map valueMap = new HashMap(); + valueMap.put(StringUtils.defaultString(oldInstrumentSetTypes), StringUtils.defaultString(newInstrumentSetTypes)); + resultMap.put("instrumentSetType", valueMap); + } + } + if(MapUtils.isEmpty(resultMap)){ + return; + } + //构造DataModifyRecord对象 + List dataModifyRecordList = getDataModifyRecordList(oldObject, resultMap, modifyType); + if(CollectionUtils.isNotEmpty(dataModifyRecordList)){ + for (DataModifyRecord dataModifyRecord : dataModifyRecordList) { + if(CollectionUtils.isNotEmpty(ignoreCompareField) + && ignoreCompareField.contains(dataModifyRecord.getModifyDetail())){ + //包含不需要比较的字段 + continue; + } + + if(CollectionUtils.isNotEmpty(needCompareFields) + && !needCompareFields.contains(dataModifyRecord.getModifyDetail())){ + //包含不需要比较的字段 + continue; + } + + this.objectDao.saveOrUpdate(dataModifyRecord); + } + } + } + + /** + * 构造DataModifyRecord + * @param oldObject + * @param resultMap + * @param modifyType + * @return + */ + private List getDataModifyRecordList(Object oldObject, Map> resultMap, String modifyType) { + List dataModifyRecordList = new ArrayList(); + if(MapUtils.isEmpty(resultMap)){ + return null; + } + Date modifyDate = new Date(); + Long modifyUserId = AcegiHelper.getLoginUser().getUserId(); + for (String key : resultMap.keySet()) { + Map valueMap = resultMap.get(key); + if(MapUtils.isEmpty(valueMap)){ + continue; + } + DataModifyRecord dataModifyRecord = new DataModifyRecord(); + dataModifyRecord.setModifyDateTime(modifyDate); + dataModifyRecord.setModifyType(modifyType); + dataModifyRecord.setModifyDetail(key); + dataModifyRecord.setModifyField(key); + dataModifyRecord.setModifyUserID(modifyUserId); + dataModifyRecord.setNewValue(valueMap.get("newValue")); + dataModifyRecord.setOldValue(valueMap.get("oldValue")); + dataModifyRecordList.add(dataModifyRecord); + } + + return setModifyDetail(dataModifyRecordList, oldObject, modifyType); + } + + /** + * 增加修改字段的中文说明 + * @param dataModifyRecordList + * @param oldObject + */ + private List setModifyDetail(List dataModifyRecordList, Object oldObject, String modifyType) { + List newDataModifyRecordList = new ArrayList(); + if(CollectionUtils.isEmpty(dataModifyRecordList) || oldObject== null){ + return newDataModifyRecordList; + } + Long objectID = null; + String modifyRecordModel = ""; + if(oldObject instanceof TousseDefinition){ + TousseDefinition td = (TousseDefinition) oldObject; + objectID = td.getId(); + modifyRecordModel = DataModifyRecord.MODEL_TOUSSEDEFINITION; + } + if(objectID == null){ + return newDataModifyRecordList; + } + //修改字段的中文名称 + Map chineseFiledNameMap = getChineseFiledNameMap(oldObject, modifyType); + for (DataModifyRecord dataModifyRecord : dataModifyRecordList) { + dataModifyRecord.setModifyRecordModel(modifyRecordModel); + dataModifyRecord.setObjectID(objectID); + String chineseFieldName = chineseFiledNameMap.get(dataModifyRecord.getModifyField()); + if(chineseFieldName != null){ + dataModifyRecord.setModifyDetail(chineseFieldName); + newDataModifyRecordList.add(dataModifyRecord); + } + } + return newDataModifyRecordList; + } + + private Map getChineseFiledNameMap(Object oldObject, String modifyType) { + Map chineseFiledNameMap = new HashMap(); + if(oldObject == null){ + return chineseFiledNameMap; + } + if(oldObject instanceof TousseDefinition){ + chineseFiledNameMap.put("name", "器械包名称"); + chineseFiledNameMap.put("tousseType", "器械包类型"); + chineseFiledNameMap.put("assetsBelongCode", "资产归属"); + chineseFiledNameMap.put("autoOutStockForPacking", "装配时是否扣减库存"); + chineseFiledNameMap.put("borrowPrice", "借出价格"); + chineseFiledNameMap.put("barcodePaperType", "标签纸类型"); + chineseFiledNameMap.put("cleanMethod", "清洗程序"); + chineseFiledNameMap.put("expressRecycling", "快速回收"); + chineseFiledNameMap.put("externalCode", "外部编码"); + chineseFiledNameMap.put("handlerDepartCode", "处理科室编码"); + + chineseFiledNameMap.put("handlerDepartName", "处理科室"); + chineseFiledNameMap.put("haveDisposableMaterial", "有一次性物品材料"); + chineseFiledNameMap.put("idCardPaperType", "标识牌的标签类型"); + chineseFiledNameMap.put("includeImplantStr", "是否包含植入物"); + chineseFiledNameMap.put("intoBasketMaxAmount", "整包清洗的包 入筐最大数量"); + chineseFiledNameMap.put("isBigPackage", "是否超大超重物品"); + chineseFiledNameMap.put("isCleanedEntirely", "是否整包清洗"); + chineseFiledNameMap.put("isConvertApplyGoods", "是否转换申请物品"); + chineseFiledNameMap.put("isCustomPacking", "自定义装配"); + chineseFiledNameMap.put("isDisable", "是否停用"); + chineseFiledNameMap.put("isDisableIDCard", "是否禁用标识牌"); + + chineseFiledNameMap.put("isForeignTousse", "是否为:外来器械包当普通器械包"); + chineseFiledNameMap.put("hidePackingTask", "是否隐藏装配任务"); + chineseFiledNameMap.put("isPacking", "是否装配"); + chineseFiledNameMap.put("isPecPack", "是否特殊器械包"); + chineseFiledNameMap.put("isPrint", "是否打印标签"); + chineseFiledNameMap.put("isPrintMaterialForPacking", "装配时是否打印材料"); + chineseFiledNameMap.put("isPrintOnDirectPacking", "是否自定义装配打印"); + + chineseFiledNameMap.put("isPrintOrg", "是否打印科室"); + chineseFiledNameMap.put("printOrgSource", "打印科室来源"); + chineseFiledNameMap.put("isRecycling", "是否回收"); + chineseFiledNameMap.put("isReview", "是否审核"); + chineseFiledNameMap.put("isSterile", "是否灭菌"); + chineseFiledNameMap.put("isInvoice", "是否发货"); + + chineseFiledNameMap.put("isTraceable", "是否追溯"); + chineseFiledNameMap.put("isUploadImage", "是否已上传图片"); + chineseFiledNameMap.put("isUploadVideo", "是否已上传视频"); + chineseFiledNameMap.put("limitInvoiceDepart", "是否限制发货科室"); + chineseFiledNameMap.put("materialsMD5", "materialsMD5"); + chineseFiledNameMap.put("moreBoxPacked", "是否多层盒装"); + + chineseFiledNameMap.put("maintainIntervalCount", "保养间隔次数"); + chineseFiledNameMap.put("maintainIntervalTime", "保养间隔时间"); + chineseFiledNameMap.put("packageCode", "物资编码"); + chineseFiledNameMap.put("packageSize", "器械包大小"); + chineseFiledNameMap.put("packageType", "默认包装类型"); + chineseFiledNameMap.put("packingAmountPerVirtualBasket", "默认每虚拟篮筐装配该器械包的数量"); + + chineseFiledNameMap.put("price", "价格"); + chineseFiledNameMap.put("proxyDisinfectionPrice", "代理灭菌费"); + chineseFiledNameMap.put("discountPrice", "折扣价"); + chineseFiledNameMap.put("printAmount", "打印份数"); + chineseFiledNameMap.put("sterilingMethod", "灭菌程序"); + chineseFiledNameMap.put("supplierName", "供应商"); + + chineseFiledNameMap.put("scanAmount", "每次扫描数量"); + chineseFiledNameMap.put("taskGroup", "任务组"); + chineseFiledNameMap.put("tousseGroupName", "器械包分组"); + chineseFiledNameMap.put("tousseAmount", "包数量"); + chineseFiledNameMap.put("tousseGroupID", "器械包分组的id"); + chineseFiledNameMap.put("unit", "计量单位"); + + chineseFiledNameMap.put("uuid_vedioNames", "配包教学视频名称"); + chineseFiledNameMap.put("workLoadStatisticalMethod", "工作量统计方式"); + chineseFiledNameMap.put("noGenerateTousse", "不生成包实例"); + chineseFiledNameMap.put("hideRecycling", "隐藏回收项"); + chineseFiledNameMap.put("note", "配包注意事项"); + chineseFiledNameMap.put("warningType", "过期告警提示"); + + chineseFiledNameMap.put("isCommonTousse", "是否通用包"); + chineseFiledNameMap.put("sterilizationMethod", "灭菌方法"); + chineseFiledNameMap.put("sterilizationTemp", "灭菌温度(°C)"); + chineseFiledNameMap.put("sterilizationTime", "灭菌时间(分钟)"); + chineseFiledNameMap.put("dryTime", "干燥时间(分钟)"); + chineseFiledNameMap.put("explain", "清洗消毒特别要求和说明"); + + chineseFiledNameMap.put("registUseRecordAfterSigned", "签收后录入使用记录"); + chineseFiledNameMap.put("riskLevel", "风险级别"); + chineseFiledNameMap.put("statisticsReviewWorkload", "审核是否算工作量"); + chineseFiledNameMap.put("isApplyEntireTousse", "是否整包申请"); + chineseFiledNameMap.put("integral", "积分系数"); + chineseFiledNameMap.put("instrumentSetType", "所属种类"); + + } + return chineseFiledNameMap; + } + + /** + * 比较对象,并获取属性值不相等的对象的属性名称和属性值(不比较集合属性) + * @param oldObject + * @param newObject + * @return + */ + private Map> compareFields(Object oldObject, Object newObject) { + Map> map = new HashMap>(); + if(oldObject == null || newObject == null){ + throw new SystemException("对象不能为空!"); + } + if(oldObject.getClass() != newObject.getClass()){ + throw new SystemException("对象类型不一致!"); + } + + try { + Class clazz = oldObject.getClass(); + //获取object的所有属性 + PropertyDescriptor[] pds = Introspector.getBeanInfo(clazz,Object.class).getPropertyDescriptors(); + + if(pds == null || pds.length == 0){ + return map; + } + + for (PropertyDescriptor pd : pds) { + //遍历获取属性名 + String name = pd.getName(); + + //获取属性的get方法 + Method readMethod = pd.getReadMethod(); + + // 在oldObject上调用get方法等同于获得oldObject的属性值 + Object originalOldValue = readMethod.invoke(oldObject); + // 在newObject上调用get方法等同于获得newObject的属性值 + Object originalNewValue = readMethod.invoke(newObject); + //用于比较的属性值 + Object oldValue = originalOldValue; + Object newValue = originalNewValue; + + if(oldValue == null && newValue == null){ + continue; + } + + if(Collection.class.isAssignableFrom(pd.getPropertyType())){ + continue; + } + + if(Map.class.isAssignableFrom(pd.getPropertyType())){ + continue; + } + + if(oldValue instanceof Date){ + oldValue = DateTools.getFormatDateStr((Date)oldValue, DateTools.COMMON_DATE_HMS); + } + + if(newValue instanceof Date){ + newValue = DateTools.getFormatDateStr((Date)newValue, DateTools.COMMON_DATE_HMS); + } + + //数值型数据,null默认作为0处理 + if(Number.class.isAssignableFrom(pd.getPropertyType())){ + if(oldValue == null){ + oldValue = 0; + } + if(newValue == null){ + newValue = 0; + } + } + + //String数据,null默认作为""处理 + if(String.class.isAssignableFrom(pd.getPropertyType())){ + if(oldValue == null){ + oldValue = ""; + } + if(newValue == null){ + newValue = ""; + } + } + + if(oldValue == null && newValue != null){ + Map valueMap = new HashMap(); + valueMap.put("oldValue", String.valueOf(originalOldValue)); + valueMap.put("newValue", String.valueOf(originalNewValue)); + + map.put(name, valueMap); + continue; + } + + // 比较这两个值是否相等,不等就可以放入map了 + if (!String.valueOf(oldValue).equals(String.valueOf(newValue))) { + Map valueMap = new HashMap(); + valueMap.put("oldValue", String.valueOf(originalOldValue)); + valueMap.put("newValue", String.valueOf(originalNewValue)); + + map.put(name, valueMap); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + + + return map; + } + + @Override + public void saveTousseMaterialModifyRecord(TousseDefinition td, JSONArray jsonArray) { + if(td == null || td.getId() == null || jsonArray == null || jsonArray.size() == 0){ + return; + } + //需要保存的材料明细 + List newMaterialInstanceList = bulidMaterialInstance(jsonArray); + List newDiposableGoodsInstanceList = bulidDiposableGoodsInstance(jsonArray); + this.saveTousseMaterialModifyRecord(td, newMaterialInstanceList, newDiposableGoodsInstanceList); + } + + private Map buildDiposableGoodsInstanceMap(List diposableGoodsInstanceList) { + Map diposableGoodsInstanceMap = new HashMap(); + if(CollectionUtils.isEmpty(diposableGoodsInstanceList)){ + return diposableGoodsInstanceMap; + } + for (DiposableGoodsInstance diposableGoodsInstance : diposableGoodsInstanceList) { + DisposableGoods dg = diposableGoodsInstance.getDiposableGoods(); + if(dg != null){ + String key = dg.getName(); + if (StringUtils.isNotBlank(dg.getSpecification())) { + key += "[" + dg.getSpecification() + "]"; + } + diposableGoodsInstanceMap.put(key, diposableGoodsInstance); + } + } + return diposableGoodsInstanceMap; + } + + private Map buildMaterialInstanceMap(List materialInstanceList) { + Map materialInstanceMap = new HashMap(); + if(CollectionUtils.isEmpty(materialInstanceList)){ + return materialInstanceMap; + } + for (MaterialInstance materialInstance : materialInstanceList) { + MaterialDefinition md = materialInstance.getMaterialDefinition(); + if(md == null){ + continue; + } + String key = md.getName(); + if(StringUtils.isNotBlank(materialInstance.getSpecification())){ + key += "[" + materialInstance.getSpecification() + "]"; + } + materialInstanceMap.put(key, materialInstance); + } + return materialInstanceMap; + } + + private List bulidDiposableGoodsInstance(JSONArray jsonArray) { + List diposableGoodsInstanceList = new ArrayList(); + for (int i = 0; i < jsonArray.size(); i++) { + JSONObject obj = jsonArray.getJSONObject(i); + String name = obj.optString("name"); + JSONObject materialobj = CssdUtils.getGoodsNameAndSp(name); + String specification = materialobj.optString("specification"); + String type = obj.optString("tousseType"); + String count = obj.optString("count"); + if ("一次性物品".equals(type)) { + DiposableGoodsInstance diposableGoodsInstance = new DiposableGoodsInstance(); + DisposableGoods dg = new DisposableGoods(); + dg.setName(name); + dg.setSpecification(specification); + diposableGoodsInstance.setAmount(Integer.valueOf(count)); + diposableGoodsInstance.setDiposableGoods(dg); + diposableGoodsInstanceList.add(diposableGoodsInstance); + } + } + return diposableGoodsInstanceList; + } + + private List bulidMaterialInstance(JSONArray jsonArray) { + List materialInstanceList = new ArrayList(); + for (int i = 0; i < jsonArray.size(); i++) { + JSONObject obj = jsonArray.getJSONObject(i); + String name = obj.optString("name"); + JSONObject materialobj = CssdUtils.getGoodsNameAndSp(name); + String materialName = materialobj.optString("materialName"); + String specification = materialobj.optString("specification"); + String type = obj.optString("tousseType"); + String count = obj.optString("count"); + if ("器械".equals(type) || MaterialDefinition.TYPE_NAME.equals(type)) { + MaterialInstance materialInstance = new MaterialInstance(); + MaterialDefinition md = new MaterialDefinition(); + md.setName(materialName); + md.setSpecification(specification); + materialInstance.setMaterialDefinition(md); + materialInstance.setCount(Integer.valueOf(count)); + materialInstanceList.add(materialInstance); + } + } + return materialInstanceList; + } + + @Override + public void saveNewDataRecord(Object newObject, String modifyType) { + + if(newObject == null || StringUtils.isBlank(modifyType)){ + return; + } + + DataModifyRecord dataModifyRecord = new DataModifyRecord(); + dataModifyRecord.setModifyDateTime(new Date()); + if(newObject instanceof TousseDefinition){ + TousseDefinition tousseDefinition = (TousseDefinition) newObject; + dataModifyRecord.setModifyDetail("新建包定义:" + tousseDefinition.getName()); + dataModifyRecord.setModifyRecordModel(DataModifyRecord.MODEL_TOUSSEDEFINITION); + dataModifyRecord.setObjectID(tousseDefinition.getId()); + } + dataModifyRecord.setModifyType(modifyType); + dataModifyRecord.setModifyUserID(AcegiHelper.getLoginUser().getUserId()); + this.save(dataModifyRecord); + } + + @SuppressWarnings("unchecked") + @Override + public List loadDataModifyRecord(String objectID, String modifyRecordModel) { + if(!DatabaseUtil.isPoIdValid(objectID)){ + throw new SystemException("objectID参数无效!"); + } + if(StringUtils.isBlank(modifyRecordModel)){ + throw new SystemException("modifyRecordModel参数无效!"); + } + String hql = String.format("select po from %s po where po.modifyRecordModel = '%s' and po.objectID = %s", + DataModifyRecord.class.getSimpleName(), + modifyRecordModel, + objectID); + List dataModifyRecordList = objectDao.findByHql(hql); + return dataModifyRecordList; + } + + @Override + public List loadDataModifyRecordVO(String objectID, String modifyRecordModel) { + List dataModifyRecordList = this.loadDataModifyRecord(objectID, modifyRecordModel); + if(CollectionUtils.isEmpty(dataModifyRecordList)){ + return null; + } + List dataModifyRecordVOList = new ArrayList(); + Set modifyUserIDSet = new HashSet(); + for (DataModifyRecord dataModifyRecord : dataModifyRecordList) { + DataModifyRecordVO vo = new DataModifyRecordVO(); + try { + BeanUtils.copyProperties(vo, dataModifyRecord); + } catch (Exception e) { + e.printStackTrace(); + } + modifyUserIDSet.add(dataModifyRecord.getModifyUserID()); + dataModifyRecordVOList.add(vo); + } + List modifyUserList = userManager.getCollection(modifyUserIDSet); + if(CollectionUtils.isNotEmpty(modifyUserList)){ + Map userMap = new HashMap(); + for (User user : modifyUserList) { + userMap.put(user.getId(), user); + } + for (DataModifyRecordVO vo : dataModifyRecordVOList) { + User user = userMap.get(vo.getModifyUserID()); + if(user != null){ + vo.setModifyUserName(user.getFullName()); + } + } + } + return dataModifyRecordVOList; + } + + + @Override + public void saveDataModifyRecord(Long objectID, String modifyDetail, + String newValue, String oldValue, Date modifyDate, + String model, String modifyType, Long userId) { + DataModifyRecord dataModifyRecord = new DataModifyRecord(); + dataModifyRecord.setModifyDateTime(modifyDate); + dataModifyRecord.setModifyDetail(modifyDetail); + dataModifyRecord.setModifyRecordModel(model); + dataModifyRecord.setModifyType(modifyType); + dataModifyRecord.setModifyUserID(userId); + dataModifyRecord.setNewValue(newValue); + dataModifyRecord.setOldValue(oldValue); + dataModifyRecord.setObjectID(objectID); + this.save(dataModifyRecord); + } + + @Override + public void saveTousseMaterialModifyRecord( + TousseDefinition td, + List newMaterialInstanceList, + List newDiposableGoodsInstanceList) { + if(td == null || td.getId() == null){ + return; + } + if(CollectionUtils.isEmpty(newDiposableGoodsInstanceList) + && CollectionUtils.isEmpty(newMaterialInstanceList)){ + return; + } + List dataModifyRecordList = new ArrayList(); + //名称[规格]作为key + Map newMaterialInstanceMap = buildMaterialInstanceMap(newMaterialInstanceList); + Map oldMaterialInstanceMap = new HashMap(); + Map newDiposableGoodsInstanceMap = buildDiposableGoodsInstanceMap(newDiposableGoodsInstanceList); + Map oldDiposableGoodsInstanceMap = new HashMap(); + List oldMaterialInstances = td.getMaterialInstances(); + List oldDiposableGoodsInstances = td.getDiposableGoodsItems(); + Long modifyUserID = AcegiHelper.getLoginUser().getUserId(); + //统计删除或者修改的器械材料 + if(CollectionUtils.isNotEmpty(oldMaterialInstances)){ + for (MaterialInstance materialInstance : oldMaterialInstances) { + MaterialDefinition md = materialInstance.getMaterialDefinition(); + if(md == null){ + continue; + } + String key = md.getNameSpecification(); + oldMaterialInstanceMap.put(key, materialInstance); + MaterialInstance newMaterialInstance = newMaterialInstanceMap.get(key); + if(newMaterialInstance == null){ + //删除材料 + DataModifyRecord dataModifyRecord = new DataModifyRecord(); + dataModifyRecord.setModifyDateTime(new Date()); + dataModifyRecord.setModifyDetail("删除材料"); + dataModifyRecord.setModifyRecordModel(DataModifyRecord.MODEL_TOUSSEDEFINITION); + dataModifyRecord.setModifyType(DataModifyRecord.MODIFY_TYPE_MANUAL); + dataModifyRecord.setOldValue(key + "X" + materialInstance.getCount()); + dataModifyRecord.setObjectID(td.getId()); + dataModifyRecord.setModifyUserID(modifyUserID); + dataModifyRecordList.add(dataModifyRecord); + continue; + } + int count = materialInstance.getCount(); + Integer newCount = newMaterialInstance.getCount(); + newCount = newCount == null ? 0 : newCount; + if(count != newCount){ + //修改材料数量 + DataModifyRecord dataModifyRecord = new DataModifyRecord(); + dataModifyRecord.setModifyDateTime(new Date()); + dataModifyRecord.setModifyDetail("修改材料数量"); + dataModifyRecord.setModifyRecordModel(DataModifyRecord.MODEL_TOUSSEDEFINITION); + dataModifyRecord.setModifyType(DataModifyRecord.MODIFY_TYPE_MANUAL); + dataModifyRecord.setOldValue(key + "X" + count); + dataModifyRecord.setNewValue(key + "X" + newCount); + dataModifyRecord.setObjectID(td.getId()); + dataModifyRecord.setModifyUserID(modifyUserID); + dataModifyRecordList.add(dataModifyRecord); + continue; + } + } + } + if(CollectionUtils.isNotEmpty(newMaterialInstanceList)){ + for (MaterialInstance materialInstance : newMaterialInstanceList) { + MaterialDefinition md = materialInstance.getMaterialDefinition(); + if(md == null){ + continue; + } + String key = md.getName(); + if(StringUtils.isNotBlank(md.getSpecification())){ + key += "[" + md.getSpecification() + "]"; + } + if(oldMaterialInstanceMap.containsKey(key)){ + continue; + } + //新增材料 + DataModifyRecord dataModifyRecord = new DataModifyRecord(); + dataModifyRecord.setModifyDateTime(new Date()); + dataModifyRecord.setModifyDetail("新增材料"); + dataModifyRecord.setModifyRecordModel(DataModifyRecord.MODEL_TOUSSEDEFINITION); + dataModifyRecord.setModifyType(DataModifyRecord.MODIFY_TYPE_MANUAL); + dataModifyRecord.setNewValue(key + "X" + materialInstance.getCount()); + dataModifyRecord.setObjectID(td.getId()); + dataModifyRecord.setModifyUserID(modifyUserID); + dataModifyRecordList.add(dataModifyRecord); + } + } + + //统计一次性物品材料修改和删除记录 + if(CollectionUtils.isNotEmpty(oldDiposableGoodsInstances)){ + for (DiposableGoodsInstance diposableGoodsInstance : oldDiposableGoodsInstances) { + DisposableGoods dg = diposableGoodsInstance.getDiposableGoods(); + if(dg == null){ + continue; + } + String key = dg.getName(); + if(StringUtils.isNotBlank(dg.getSpecification())){ + key += "[" + dg.getSpecification() + "]"; + } + oldDiposableGoodsInstanceMap.put(key, diposableGoodsInstance); + DiposableGoodsInstance newDiposableGoodsInstance = newDiposableGoodsInstanceMap.get(key); + if(newDiposableGoodsInstance == null){ + //删除材料 + DataModifyRecord dataModifyRecord = new DataModifyRecord(); + dataModifyRecord.setModifyDateTime(new Date()); + dataModifyRecord.setModifyDetail("删除材料"); + dataModifyRecord.setModifyRecordModel(DataModifyRecord.MODEL_TOUSSEDEFINITION); + dataModifyRecord.setModifyType(DataModifyRecord.MODIFY_TYPE_MANUAL); + dataModifyRecord.setOldValue(key + "X" + diposableGoodsInstance.getAmount()); + dataModifyRecord.setObjectID(td.getId()); + dataModifyRecord.setModifyUserID(modifyUserID); + dataModifyRecordList.add(dataModifyRecord); + continue; + } + Integer newAmount = newDiposableGoodsInstance.getAmount(); + newAmount = newAmount == null ? 0 : newAmount; + Integer oldAmount = diposableGoodsInstance.getAmount(); + oldAmount = oldAmount == null ? 0 : oldAmount; + if(newAmount != oldAmount){ + //修改材料数量 + DataModifyRecord dataModifyRecord = new DataModifyRecord(); + dataModifyRecord.setModifyDateTime(new Date()); + dataModifyRecord.setModifyDetail("修改材料数量"); + dataModifyRecord.setModifyRecordModel(DataModifyRecord.MODEL_TOUSSEDEFINITION); + dataModifyRecord.setModifyType(DataModifyRecord.MODIFY_TYPE_MANUAL); + dataModifyRecord.setOldValue(key + "X" + oldAmount); + dataModifyRecord.setNewValue(key + "X" + newAmount); + dataModifyRecord.setObjectID(td.getId()); + dataModifyRecord.setModifyUserID(modifyUserID); + dataModifyRecordList.add(dataModifyRecord); + continue; + } + } + } + + if(CollectionUtils.isNotEmpty(newDiposableGoodsInstanceList)){ + for (DiposableGoodsInstance diposableGoodsInstance : oldDiposableGoodsInstances) { + DisposableGoods dg = diposableGoodsInstance.getDiposableGoods(); + if(dg == null){ + continue; + } + String key = dg.getName(); + if(StringUtils.isNotBlank(dg.getSpecification())){ + key += "[" + dg.getSpecification() + "]"; + } + if(oldDiposableGoodsInstanceMap.containsKey(key)){ + continue; + } + //新增材料 + DataModifyRecord dataModifyRecord = new DataModifyRecord(); + dataModifyRecord.setModifyDateTime(new Date()); + dataModifyRecord.setModifyDetail("新增材料"); + dataModifyRecord.setModifyRecordModel(DataModifyRecord.MODEL_TOUSSEDEFINITION); + dataModifyRecord.setModifyType(DataModifyRecord.MODIFY_TYPE_MANUAL); + dataModifyRecord.setNewValue(key + "X" + diposableGoodsInstance.getAmount()); + dataModifyRecord.setObjectID(td.getId()); + dataModifyRecord.setModifyUserID(modifyUserID); + dataModifyRecordList.add(dataModifyRecord); + } + } + + + //保存修改记录 + if(CollectionUtils.isNotEmpty(dataModifyRecordList)){ + for (DataModifyRecord dataModifyRecord : dataModifyRecordList) { + objectDao.saveOrUpdate(dataModifyRecord); + } + } + } + +} Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/videomanager/service/VideoFileManagerImpl.java =================================================================== diff -u -r32119 -r33302 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/videomanager/service/VideoFileManagerImpl.java (.../VideoFileManagerImpl.java) (revision 32119) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/videomanager/service/VideoFileManagerImpl.java (.../VideoFileManagerImpl.java) (revision 33302) @@ -3,14 +3,12 @@ import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; -import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URLEncoder; import java.sql.ResultSet; import java.util.Arrays; -import java.util.Collection; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -27,18 +25,18 @@ import org.apache.commons.collections.CollectionUtils; import org.apache.commons.io.FileUtils; -import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.StringUtils; import org.hibernate.Query; import org.hibernate.Session; +import com.forgon.directory.acegi.tools.AcegiHelper; import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager; +import com.forgon.disinfectsystem.datamodifyrecord.service.DataModifyRecordManager; import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; -import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.videomanager.VideoFile; +import com.forgon.disinfectsystem.entity.datamodifyrecord.DataModifyRecord; import com.forgon.disinfectsystem.entity.recyclingrecord.RecyclingItem; import com.forgon.disinfectsystem.exception.DataCheckException; -import com.forgon.exception.SystemException; import com.forgon.tools.StrutsResponseUtils; import com.forgon.tools.date.DateTools; import com.forgon.tools.db.DatabaseUtil; @@ -52,6 +50,12 @@ private SupplyRoomConfigManager supplyRoomConfigManager; + private DataModifyRecordManager dataModifyRecordManager; + + public void setDataModifyRecordManager( + DataModifyRecordManager dataModifyRecordManager) { + this.dataModifyRecordManager = dataModifyRecordManager; + } public void setSupplyRoomConfigManager( SupplyRoomConfigManager supplyRoomConfigManager) { this.supplyRoomConfigManager = supplyRoomConfigManager; @@ -87,6 +91,23 @@ } @Override public String deleteVideo(String objectId, String uuidName, String realPath) { + + List videoList = objectDao.findByProperty(VideoFile.class.getSimpleName(), "uuid_videoName", uuidName); + if(CollectionUtils.isNotEmpty(videoList)){ + VideoFile videoFile = videoList.get(0); + String videoType = videoFile.getVideoType(); + if(StringUtils.equals(videoType, VideoFile.VIDEO_TYPE_TOUSSE) + && DatabaseUtil.isPoIdValid(videoFile.getTousseDefinition_id())){ + String modifyDetail = "删除" + videoType; + String oldValue = "原始文件名:" + videoFile.getVideoName() + + ";存放在磁盘路径下的文件名:" + videoFile.getUuid_videoName(); + dataModifyRecordManager.saveDataModifyRecord(videoFile.getTousseDefinition_id(), + modifyDetail, null, oldValue, new Date(), + DataModifyRecord.MODEL_TOUSSEDEFINITION, DataModifyRecord.MODIFY_TYPE_MANUAL, + AcegiHelper.getLoginUser().getUserId()); + } + } + boolean flag = objectDao.executeHQL("delete from VideoFile po where po.uuid_videoName =?", uuidName); return flag?deleteLocalFile(uuidName,realPath):null; }