Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/servlet/UploadServlet.java =================================================================== diff -u -r24276 -r35539 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/servlet/UploadServlet.java (.../UploadServlet.java) (revision 24276) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/servlet/UploadServlet.java (.../UploadServlet.java) (revision 35539) @@ -37,6 +37,7 @@ import com.forgon.tools.StrutsResponseUtils; import com.forgon.tools.db.DatabaseUtil; +@Deprecated public class UploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; Index: ssts-web/src/main/webapp/mobileClient/clientForAndroid.json =================================================================== diff -u -r35434 -r35539 --- ssts-web/src/main/webapp/mobileClient/clientForAndroid.json (.../clientForAndroid.json) (revision 35434) +++ ssts-web/src/main/webapp/mobileClient/clientForAndroid.json (.../clientForAndroid.json) (revision 35539) @@ -1,7 +1,7 @@ { "success":"true", - "version":"4.7.32-beta", - "urlSuffix":"/mobileClient/SterileSupplySystem_Android_V4.7.32_beta_20230316_v4_1_release.apk", - "urlSuffix-nologo":"/mobileClient/SterileSupplySystem_Android_V4.7.32_beta_20230316_v4_1_nologo_release.apk", - "urlSuffix-6p":"/mobileClient/SterileSupplySystem_Android_V4.7.32_beta_20230316_v4_1_6p_release.apk", + "version":"4.7.33", + "urlSuffix":"/mobileClient/SterileSupplySystem_Android_V4.7.33_20230403_v4_1_release.apk", + "urlSuffix-nologo":"/mobileClient/SterileSupplySystem_Android_V4.7.33_20230403_v4_1_nologo_release.apk", + "urlSuffix-6p":"/mobileClient/SterileSupplySystem_Android_V4.7.33_20230403_v4_1_6p_release.apk", } \ No newline at end of file Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/signRecord/service/SignRecordManagerImpl.java =================================================================== diff -u -r33474 -r35539 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/signRecord/service/SignRecordManagerImpl.java (.../SignRecordManagerImpl.java) (revision 33474) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/signRecord/service/SignRecordManagerImpl.java (.../SignRecordManagerImpl.java) (revision 35539) @@ -20,6 +20,7 @@ import org.apache.commons.collections4.Predicate; import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; +import org.springframework.beans.factory.annotation.Autowired; import com.forgon.Constants; import com.forgon.databaseadapter.service.DateQueryAdapter; @@ -37,6 +38,8 @@ import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseInstanceManager; import com.forgon.exception.SystemException; import com.forgon.keyvalue.service.KeyValueManager; +import com.forgon.security.model.User; +import com.forgon.security.service.UserManager; import com.forgon.timeout.service.TimeoutManager; import com.forgon.tools.MathTools; import com.forgon.tools.date.DateTools; @@ -52,6 +55,8 @@ private DateQueryAdapter dateQueryAdapter; private static Logger logger = Logger.getLogger(SignRecordManagerImpl.class); private KeyValueManager keyValueManager; + @Autowired + private UserManager userManager; public void setKeyValueManager(KeyValueManager keyValueManager) { this.keyValueManager = keyValueManager; @@ -183,18 +188,24 @@ return items; } @Override - public void save(Collection tousseInstanceBarcodes){ + public SignRecord save(Collection tousseInstanceBarcodes,String signUserCode,String signUserName){ if(CollectionUtils.isEmpty(tousseInstanceBarcodes)){ throw new SystemException("器械包不能为空"); } - String signUserName = AcegiHelper.getLoginUserFullName(); - String signUserCode = AcegiHelper.getLoginUser().getUserName(); String departCoding = AcegiHelper.getCurrentOrgUnitCode(); SignRecord sr = new SignRecord(); - sr.setSignUserName(signUserName); + if(StringUtils.isNotBlank(signUserCode)){ + sr.setSignUserCode(signUserCode); + }else{ + sr.setSignUserCode(AcegiHelper.getLoginUser().getUserName()); + } + if(StringUtils.isNotBlank(signUserName)){ + sr.setSignUserName(signUserName); + }else{ + sr.setSignUserName(AcegiHelper.getLoginUser().getUserFullName()); + } sr.setDepartCode(departCoding); - sr.setSignUserCode(signUserCode); Date now = new Date(); sr.setSignDate(now); sr.setCreateDate(now); @@ -205,6 +216,7 @@ int cnt = tousseInstanceManager.count("signRecordId=" + sr.getId()); sr.setSignAmount(cnt); save(sr); + return sr; } /** * 生成签收记录 @@ -586,4 +598,29 @@ throw new SystemException("签收记录id非法"); } } + + @Override + public void updateBindSignatureImageFileIdForSignUser(Long signRecordId, + Long imageFileId) { + if(!DatabaseUtil.isPoIdValid(imageFileId)){ + throw new SystemException("签名图片id参数非法"); + } + if(!DatabaseUtil.isPoIdValid(signRecordId)){ + throw new SystemException("签收记录id参数非法"); + } + SignRecord signRecord = get(signRecordId); + if(signRecordId == null){ + throw new SystemException("未找到id为【"+ signRecordId +"】的签收记录"); + } + String signUserCode = signRecord.getSignUserCode(); + if(StringUtils.isBlank(signUserCode)){ + throw new SystemException("签收记录的签收人工号为空,请检查"); + } + User user = userManager.getUserByUserCode(signUserCode); + if(user == null){ + throw new SystemException("未找到工号为【"+ signUserCode +"】的签收人信息"); + } + user.setBindSignatureImageFileId(imageFileId); + objectDao.saveOrUpdate(user); + } } Index: ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/servlet/UploadServlet.java =================================================================== diff -u -r29312 -r35539 --- ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/servlet/UploadServlet.java (.../UploadServlet.java) (revision 29312) +++ ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/servlet/UploadServlet.java (.../UploadServlet.java) (revision 35539) @@ -31,12 +31,14 @@ import com.forgon.disinfectsystem.entity.basedatamanager.videomanager.VideoFile; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationRecordPic; import com.forgon.disinfectsystem.entity.washanddisinfectmanager.washanddisinfectrecord.WashAndDisinfectPic; +import com.forgon.disinfectsystem.signRecord.service.SignRecordManager; import com.forgon.disinfectsystem.sterilizationmanager.sterilizationrecord.service.SterilizationRecordManager; import com.forgon.disinfectsystem.tousse.imagefilemanager.service.ImageFileManager; import com.forgon.disinfectsystem.tousse.videomanager.service.VideoFileManager; import com.forgon.disinfectsystem.washanddisinfectmanager.washanddisinfectrecord.service.WashAndDisinfectRecordManager; import com.forgon.exception.SystemException; import com.forgon.exception.service.ExceptionHandler; +import com.forgon.security.service.UserManager; import com.forgon.tools.Path; import com.forgon.tools.SpringBeanManger; import com.forgon.tools.StrutsResponseUtils; @@ -61,13 +63,17 @@ private ImageFileManager imageFileManager; private ExceptionHandler exceptionHandler; private VideoFileManager videoFileManager; + private SignRecordManager signRecordManager; static { //请求的图片类型参数。因为类型是中文,请求参数用的是英文名(避免中文乱码),所以添加映射 requestImageTypeMap.put("washAndDisinfect", ImageFile.IMAGE_TYPE_WASHANDDISINFECT); requestImageTypeMap.put("sterileMonitor", ImageFile.IMAGE_TYPE_STERILIZATION); requestImageTypeMap.put("qualityMonitoring", ImageFile.IMAGE_TYPE_QUALITYMONITORING); requestImageTypeMap.put("cameraApplication", ImageFile.IMAGE_TYPE_CAMERA_APPLICATION); + //签名的两个图片(横屏版和竖屏版) + requestImageTypeMap.put("SIGNMODULE_SIGNATURE_LANDSCAPE", ImageFile.IMAGE_TYPE_SIGNMODULE_SIGNATURE_LANDSCAPE); + requestImageTypeMap.put("SIGNMODULE_SIGNATURE_PORTRAIT", ImageFile.IMAGE_TYPE_SIGNMODULE_SIGNATURE_PORTRAIT); requestVideoTypeMap.put("cameraApplication", VideoFile.VIDEO_TYPE_CAMERA_APPLICATION); } @@ -85,6 +91,7 @@ exceptionHandler = (ExceptionHandler) SpringBeanManger .getBean("exceptionHandler"); videoFileManager = (VideoFileManager) SpringBeanManger.getBean("videoFileManager"); + signRecordManager = (SignRecordManager) SpringBeanManger.getBean("signRecordManager"); } public static final String PHOTO_TYPE_STERILE_MONITOR = "sterileMonitor"; @@ -98,6 +105,7 @@ response.setContentType("text/html;charset=UTF-8"); // 设置Content-Type字段值 String sterileRecordId = request.getParameter("sterileRecordId");//灭菌记录id String washAndDisinfectId = request.getParameter("washAndDisinfectId");//清洗消毒记录Id + String signRecordId = request.getParameter("signRecordId");//签收记录Id String objectId = request.getParameter("objectId"); String photoType = request.getParameter("photoType"); String imageType = request.getParameter("imageType"); @@ -196,8 +204,12 @@ Long id = Long.valueOf(washAndDisinfectId); //保存清洗记录照片 saveWashAndDisinfectPic(filename, picData, id); - } - else if(DatabaseUtil.isPoIdValid(objectId)){ + }else if(DatabaseUtil.isPoIdValid(signRecordId)){ + //签收记录id + //是否绑定当前签名人 + boolean binded = Boolean.parseBoolean(request.getParameter("binded")); + saveSignRecordPic(filename, picData, signRecordId,imageType,ff,binded); + }else if(DatabaseUtil.isPoIdValid(objectId)){ if(StringUtils.isNotBlank(imageType)){ if(StringUtils.isBlank(requestImageTypeMap.get(imageType))){ throw new SystemException("不支持的图片类型 " + StringUtils.defaultString(requestImageTypeMap.get(imageType))); @@ -232,7 +244,6 @@ } /** * 保存清洗记录图片 - * @param method * @param filePath * @param picData * @param id @@ -270,10 +281,8 @@ } } - /** * 保存灭菌记录图片 - * @param method * @param filename * @param picData * @param id @@ -311,7 +320,46 @@ } } + /** + * 保存签收记录图片 + * @param filename + * @param picData + * @param signRecordId + * @param imageType + * @param ff + * @param binded + * @throws FileNotFoundException + * @throws IOException + */ + private void saveSignRecordPic(String filename,byte[] picData, String signRecordId,String imageType,File ff,boolean binded) throws FileNotFoundException, IOException { + if(StringUtils.isBlank(signRecordId)){ + throw new SystemException("签收记录的id不能为空"); + } + if(ArrayUtils.isEmpty(picData)){ + throw new SystemException("未获取到图片数据"); + } + if(StringUtils.isNotBlank(imageType)){ + if(StringUtils.isBlank(requestImageTypeMap.get(imageType))){ + throw new SystemException("不支持的图片类型 " + StringUtils.defaultString(requestImageTypeMap.get(imageType))); + } + //通用的图片上传处理 + List uploadImageList = new ArrayList<>(); + ImageFile imageFile = new ImageFile(); + imageFile.setImage(picData); + imageFile.setImageName(ff.getName()); + imageFile.setImageType(requestImageTypeMap.get(imageType)); + imageFile.setObjectId(signRecordId); + uploadImageList.add(imageFile); + imageFileManager.saveImageFile(uploadImageList, requestImageTypeMap.get(imageType), signRecordId); + if(binded){ + //设置签名人的签名图片的绑定实现业务逻辑 + signRecordManager.updateBindSignatureImageFileIdForSignUser(Long.valueOf(signRecordId),imageFile.getId()); + } + } + } + + /** * 生成略缩图 * @param filePath * @param picData Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/imagefilemanager/service/ImageFileManager.java =================================================================== diff -u -r32119 -r35539 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/imagefilemanager/service/ImageFileManager.java (.../ImageFileManager.java) (revision 32119) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/imagefilemanager/service/ImageFileManager.java (.../ImageFileManager.java) (revision 35539) @@ -81,7 +81,18 @@ * @return */ public ImageFile getImageAt(Long objectId,String imageType,int index); + /** + * 获取图片(按指定的排序) + * @param objectId + * @param imageType + * @param orderBy + * @param index + * @return + */ + public ImageFile getImageAt(Long objectId,String imageType,String orderBy,int index); + + /** * 保存为缩略图 * @param img 原图二进制数据 * @param originalAbsoultFilePaht 源文件的绝对路劲 Index: forgon-core/src/main/java/com/forgon/security/model/User.java =================================================================== diff -u -r33177 -r35539 --- forgon-core/src/main/java/com/forgon/security/model/User.java (.../User.java) (revision 33177) +++ forgon-core/src/main/java/com/forgon/security/model/User.java (.../User.java) (revision 35539) @@ -182,6 +182,11 @@ private String oldRoleNames; + /** + * 绑定的签名图片文件记录的id(QYSRMYY-49 PDA“器械包签收”功能新增手写签名功能) + */ + private Long bindSignatureImageFileId; + public String getPasswd() { return this.passwd; } @@ -746,6 +751,14 @@ this.oldRoleNames = oldRoleNames; } + public Long getBindSignatureImageFileId() { + return bindSignatureImageFileId; + } + + public void setBindSignatureImageFileId(Long bindSignatureImageFileId) { + this.bindSignatureImageFileId = bindSignatureImageFileId; + } + /** * 简易转换成json对象 * @return Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/imagefilemanager/service/ImageFileManagerImpl.java =================================================================== diff -u -r34210 -r35539 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/imagefilemanager/service/ImageFileManagerImpl.java (.../ImageFileManagerImpl.java) (revision 34210) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/imagefilemanager/service/ImageFileManagerImpl.java (.../ImageFileManagerImpl.java) (revision 35539) @@ -757,11 +757,18 @@ } @Override public ImageFile getImageAt(Long objectId,String imageType,int index) { - + return getImageAt(objectId, imageType, null, index); + } + + @Override + public ImageFile getImageAt(Long objectId,String imageType,String orderBy,int index) { Session session = objectDao.getHibernateSession(); - + String sort = "order by serialNum,id asc"; + if(StringUtils.isNotBlank(orderBy)){ + sort = orderBy; + } Query query = session.createQuery("from " + ImageFile.class.getSimpleName() - + " where objectId = :objectId and imageType = :imageType order by serialNum,id asc"); + + " where objectId = :objectId and imageType = :imageType " + sort); query.setParameter("objectId", objectId.toString()); query.setString("imageType", imageType); @@ -1054,12 +1061,12 @@ description.put("imageFiles", imageArray); appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_BASEDATA, "上传图片", description); } - }else { - if(ImageFile.IMAGE_TYPE_CAMERA_APPLICATION.equals(objectType)){ - batchSaveImage(uploadImageList); - }else{ - ret = false; - } + }else if(ImageFile.IMAGE_TYPE_CAMERA_APPLICATION.equals(objectType) + || ImageFile.IMAGE_TYPE_SIGNMODULE_SIGNATURE_LANDSCAPE.equals(objectType) + || ImageFile.IMAGE_TYPE_SIGNMODULE_SIGNATURE_PORTRAIT.equals(objectType)){ + batchSaveImage(uploadImageList); + }else{ + ret = false; } return ret; } Index: ssts-web/src/main/webapp/mobileClient/SterileSupplySystem_Android_V4.7.33_20230403_v4_1_nologo_release.apk =================================================================== diff -u Binary files differ Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/signRecord/service/SignRecordManager.java =================================================================== diff -u -r26969 -r35539 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/signRecord/service/SignRecordManager.java (.../SignRecordManager.java) (revision 26969) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/signRecord/service/SignRecordManager.java (.../SignRecordManager.java) (revision 35539) @@ -33,8 +33,11 @@ /** * 保存签收记录 * @param tousseInstanceBarcodes 签收记录签收的器械包实例条码 + * @param signUserCode 签收人工号 + * @param signUserName 签收人姓名 + * @return */ - public void save(Collection tousseInstanceBarcodes); + public SignRecord save(Collection tousseInstanceBarcodes,String signUserCode,String signUserName); /** * 根据签收记录ID 获取包实例 @@ -79,4 +82,11 @@ List> getWaitSignTousseInstanceByDate(String beginDate, String endDate, String departCoding); + /** + * 设置签名人的签名图片的绑定实现业务逻辑 + * @param signRecordId 签收记录id + * @param imageFileId 签收的图片id + */ + public void updateBindSignatureImageFileIdForSignUser(Long signRecordId, Long imageFileId); + } Index: ssts-web/src/main/webapp/mobileClient/SterileSupplySystem_Android_V4.7.33_20230403_v4_1_6p_release.apk =================================================================== diff -u Binary files differ Index: ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/service/ServiceManagerImpl.java =================================================================== diff -u -r35507 -r35539 --- ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/service/ServiceManagerImpl.java (.../ServiceManagerImpl.java) (revision 35507) +++ ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/service/ServiceManagerImpl.java (.../ServiceManagerImpl.java) (revision 35539) @@ -19,6 +19,7 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; import java.util.stream.Collectors; @@ -34,6 +35,7 @@ import net.sf.json.util.PropertyFilter; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.MapUtils; import org.apache.commons.collections4.Predicate; import org.apache.commons.collections4.Transformer; import org.apache.commons.lang.time.FastDateFormat; @@ -91,6 +93,7 @@ import com.forgon.disinfectsystem.entity.basedatamanager.departmentapplicationtemplate.DepartmentAppTemplate; import com.forgon.disinfectsystem.entity.basedatamanager.departmentapplicationtemplate.DiposableGoodsTemplateItem; import com.forgon.disinfectsystem.entity.basedatamanager.departmentapplicationtemplate.TousseDefinitionTemplateItem; +import com.forgon.disinfectsystem.entity.basedatamanager.imagefilemanager.ImageFile; import com.forgon.disinfectsystem.entity.basedatamanager.operationRoom.OperationRoom; import com.forgon.disinfectsystem.entity.basedatamanager.position.Position; import com.forgon.disinfectsystem.entity.basedatamanager.position.TousseOperation; @@ -576,6 +579,7 @@ .key("isEnableTousseOpSign").value(Boolean.valueOf(supplyRoomConfig.getIsEnableTousseOpSign())) .key("isEnableTousseOpRecipient").value(Boolean.valueOf(supplyRoomConfig.getIsEnableTousseOpRecipient())) .key("isEnableTousseOpDestLocation").value(Boolean.valueOf(supplyRoomConfig.getIsEnableTousseOpDestLocation())) + .key("handWrittenSignatureMode").value(supplyRoomConfig.getHandWrittenSignatureMode()) .key("modules").value(modelJSONArray) .key("moduleWhiteList").value(moduleWhiteArray) .key("sstsConfig").value(CssdUtils.getWebConfigInfo()) @@ -733,6 +737,7 @@ String operator = ""; String prepareRecycleDateTime = ""; String type = ""; + Map> tdIdToScanTousseInstanceBarcodeListMap = null; if(params != null){ Long id = params.optLong("id"); if(DatabaseUtil.isPoIdValid(id)){ @@ -808,7 +813,7 @@ } } } - + tdIdToScanTousseInstanceBarcodeListMap = invoicePlanManager.getPrepareRecycleScanBarcodeInfo(applicationItems); } array.append("]"); comfirmor = invoicePlan.getPrepareRecycleComfirmor(); @@ -826,10 +831,42 @@ obj.put("operator", operator); obj.put("prepareRecycleDateTime", prepareRecycleDateTime); obj.put("items", array.toString()); + + StringBuffer scanBarcodeInfo = new StringBuffer(""); + //测试数据 + /*tdIdToScanTousseInstanceBarcodeListMap = new HashMap>(); + tdIdToScanTousseInstanceBarcodeListMap.put(1140518L, Arrays.asList("0125808233")); + tdIdToScanTousseInstanceBarcodeListMap.put(1140525L, Arrays.asList("0125803225"));*/ + if(MapUtils.isNotEmpty(tdIdToScanTousseInstanceBarcodeListMap)){ + int entrySize = CollectionUtils.size(tdIdToScanTousseInstanceBarcodeListMap); + if(entrySize > 0){ + scanBarcodeInfo.append(",\"scanBarcodeInfo\":{"); + for (int i = 0; i < entrySize; i++) { + Entry> entry = CollectionUtils.get(tdIdToScanTousseInstanceBarcodeListMap, i); + List barcodeList = entry.getValue(); + if(CollectionUtils.isNotEmpty(barcodeList)){ + int barcodeSize = barcodeList.size(); + scanBarcodeInfo.append("\"").append(entry.getKey()).append("\"").append(":["); + for (int j = 0; j < barcodeSize; j++) { + String barcode = barcodeList.get(j); + scanBarcodeInfo.append("\"").append(barcode).append("\""); + if(j < (barcodeSize - 1)){ + scanBarcodeInfo.append(","); + } + } + scanBarcodeInfo.append("]"); + } + if(i < (entrySize - 1)){ + scanBarcodeInfo.append(","); + } + } + scanBarcodeInfo.append("}"); + } + } obj.put("type", type); //return obj.toString(); - return String.format("{\"success\":%s,\"comfirmor\":\"%s\",\"operator\":\"%s\",\"prepareRecycleDateTime\":\"%s\",\"type\":\"%s\",\"items\":%s}", - true,StringUtils.defaultString(comfirmor),StringUtils.defaultString(operator),StringUtils.defaultString(prepareRecycleDateTime),type,array.toString()); + return String.format("{\"success\":%s,\"comfirmor\":\"%s\",\"operator\":\"%s\",\"prepareRecycleDateTime\":\"%s\",\"type\":\"%s\",\"items\":%s %s}", + true,StringUtils.defaultString(comfirmor),StringUtils.defaultString(operator),StringUtils.defaultString(prepareRecycleDateTime),type,array.toString(),scanBarcodeInfo); } /** @@ -5205,6 +5242,22 @@ json.put("tousseSigns", array); return json.toString(); } + + /** + * 根据签收记录及图片类型查询图片信息 + * @param params + * @return + */ + public String loadSignatureImageIdBySignRecordId(JSONObject params){ + JSONObject result = JSONUtil.buildJsonObject(true); + Long objectId = params.optLong("signRecordId"); + String imageType = params.optString("imageType"); + ImageFile imageFile = imageFileManager.getImageAt(objectId, imageType , "order by uploadDateTime desc", 0); + if(imageFile != null){ + JSONUtil.addDataProperty(result, JSONObject.fromObject(imageFile)); + } + return result.toString(); + } public String setTousseSign(JSONObject params){ String tousseBarcodes = params.optString("tousseBarcodes"); @@ -5221,14 +5274,22 @@ } public String saveTousseSignRecord(JSONObject params){ + JSONObject result = JSONUtil.buildJsonObject(true); String tousseBarcodes = params.optString("tousseBarcodes"); + //签收人工号 + String signUserCode = params.optString("userName"); + //签收人姓名 + String signUserName = params.optString("userFullName"); appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_SIGN, "M", params); if(StringTools.isBlank(tousseBarcodes)){ return JSONUtil.buildJsonObject(false, "请扫描器械包条码").toString(); } - signRecordManager.save(Arrays.asList(tousseBarcodes.split(";"))); - return JSONUtil.buildJsonObject(true).toString(); + SignRecord signRecord = signRecordManager.save(Arrays.asList(tousseBarcodes.split(";")), signUserCode, signUserName); + if(signRecord != null){ + JSONUtil.addDataProperty(result, JSONObject.fromObject(signRecord)); + } + return result.toString(); } public String getInfoByBarcode_TousseSign(JSONObject params) { @@ -5296,7 +5357,45 @@ return json.toString(); } } + /** + * 签名页面扫描人员的条码 + * @param params + * @return + */ + public String getInfoByBarcode_Signature(JSONObject params) { + JSONObject result = JSONUtil.buildJsonObject(false); + String barcode = params.optString("barcode"); + if (StringUtils.isBlank(barcode)) { + JSONUtil.addMessage(result, "缺失参数barcode"); + }else{ + User user = userManager.getUserByBarcode(barcode); + if(user != null){ + appLogManager.saveBarcodeScanLog(AcegiHelper.getLoginUser(), Log.MODEL_SIGN, BarcodeDevice.BARCODE_TYPE_USER, barcode, user.getFullName()); + if(!user.isEnabled()){ + JSONUtil.addMessage(result, "该用户已被停用!"); + return result.toString(); + } + Long bindSignatureImageFileId = user.getBindSignatureImageFileId(); + if(!DatabaseUtil.isPoIdValid(bindSignatureImageFileId)){ + JSONUtil.addMessage(result, "该用户未绑定签名图片!"); + return result.toString(); + } + ImageFile imageFile = imageFileManager.getImageFileById(String.valueOf(bindSignatureImageFileId)); + if(imageFile == null){ + JSONUtil.addMessage(result, "该用户绑定的签名记录已不存在或被删除!"); + return result.toString(); + } + JSONUtil.addSuccess(result, true); + JSONUtil.addDataProperty(result, JSONObject.fromObject(user,JSONUtil.buildJsonConfig("id","name","fullName","bindSignatureImageFileId"))); + }else{ + JSONUtil.addMessage(result, "未找到该条码的用户!"); + } + } + return result.toString(); + } + + /** * 加载加急等级数据源 * @param params * @return Index: ssts-web/src/main/webapp/mobileClient/SterileSupplySystem_Android_V4.7.33_20230403_v4_1_release.apk =================================================================== diff -u Binary files differ