Index: ssts-web/src/main/webapp/mobileClient/SterileSupplySystem_Android_V4.7.40_20250210_v4_1_6p_release.apk =================================================================== diff -u Binary files differ Index: ssts-web/src/main/webapp/mobileClient/SterileSupplySystem_Android_V4.7.40_20250210_v4_1_nologo_release.apk =================================================================== diff -u Binary files differ Index: ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/service/ServiceManagerImpl.java =================================================================== diff -u -r39345 -r39500 --- ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/service/ServiceManagerImpl.java (.../ServiceManagerImpl.java) (revision 39345) +++ ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/service/ServiceManagerImpl.java (.../ServiceManagerImpl.java) (revision 39500) @@ -50,7 +50,6 @@ import org.springframework.security.authentication.encoding.Md5PasswordEncoder; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; -import org.springframework.stereotype.Component; import sun.misc.BASE64Decoder; @@ -110,14 +109,14 @@ import com.forgon.disinfectsystem.entity.basedatamanager.taskGroup.TaskGroup; import com.forgon.disinfectsystem.entity.basedatamanager.tousseGroup.TousseGroup; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.InstrumentSetType; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.ThirdPartyTousseReceiveRecord; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; import com.forgon.disinfectsystem.entity.basedatamanager.toussereturndisinfect.TousseReturnDisinfectItem; import com.forgon.disinfectsystem.entity.basedatamanager.toussereturndisinfect.TousseReturnDisinfectRecord; import com.forgon.disinfectsystem.entity.becleanitem.ClassifyBasket; import com.forgon.disinfectsystem.entity.borrowrecord.BorrowRecord; import com.forgon.disinfectsystem.entity.foreigntousseapplication.ForeignTousseApplication; -import com.forgon.disinfectsystem.entity.foreigntousseapplication.ForeignTousseItem; import com.forgon.disinfectsystem.entity.idcardinstance.IDCardInstance; import com.forgon.disinfectsystem.entity.invoicemanager.Invoice; import com.forgon.disinfectsystem.entity.invoicemanager.InvoiceDepartment; @@ -168,7 +167,6 @@ import com.forgon.disinfectsystem.recyclingapplication.vo.ExpressInvoiceApplicationGoodsVo; import com.forgon.disinfectsystem.recyclingapplication.vo.ExpressInvoiceInvoicePlanVo; import com.forgon.disinfectsystem.recyclingapplication.vo.InvoicePlanVo; -import com.forgon.disinfectsystem.vo.SearchInvoicePlanOrGoodsParams; import com.forgon.disinfectsystem.returngoodsrecord.service.ReturnGoodsRecordManager; import com.forgon.disinfectsystem.signRecord.service.SignRecordManager; import com.forgon.disinfectsystem.signRecord.vo.SignRecordVo; @@ -187,6 +185,8 @@ import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseDefinitionHelper; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseDefinitionManager; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseInstanceManager; +import com.forgon.disinfectsystem.tousse.toussedefinition.vo.ThirdPartyTousseInstanceVo; +import com.forgon.disinfectsystem.tousse.toussedefinition.vo.ThirdPartyTousseReceiveRecordVo; import com.forgon.disinfectsystem.tousse.videomanager.service.VideoFileManager; import com.forgon.disinfectsystem.tousseReturnDisinfectRecord.service.TousseReturnDisinfectRecordManager; import com.forgon.disinfectsystem.tousseitem.service.TousseItemManager; @@ -198,12 +198,14 @@ import com.forgon.disinfectsystem.vo.ApplicationItemVO; import com.forgon.disinfectsystem.vo.ItemDefinitionVO; import com.forgon.disinfectsystem.vo.RecyclingApplicationVo; +import com.forgon.disinfectsystem.vo.SearchInvoicePlanOrGoodsParams; import com.forgon.disinfectsystem.vo.TousseSimpleVO; import com.forgon.disinfectsystem.washTransition.service.WashTransitionItemManager; import com.forgon.disinfectsystem.washTransition.service.WashTransitionMaterialManager; import com.forgon.disinfectsystem.washTransition.service.WashTransitionRecordManager; import com.forgon.disinfectsystem.washanddisinfectmanager.washanddisinfectrecord.action.WashAndDisinfectRecordAction; import com.forgon.disinfectsystem.washanddisinfectmanager.washanddisinfectrecord.service.WashAndDisinfectRecordManager; +import com.forgon.entity.PageEntity; import com.forgon.exception.BorrowUnRecturnException; import com.forgon.exception.CleanMethodNotTheSameException; import com.forgon.exception.InvoiceException; @@ -2607,6 +2609,7 @@ /** * 清洗记录列表的开始时间下拉框 + * 第三方器械包列表的时间条件的控件也调用了这个方法-GZSLWQGSKY-2 * @param params * @return */ @@ -6369,6 +6372,9 @@ if(CollectionUtils.isNotEmpty(allArray)){ for (int i = 0; i < allArray.size(); i++) { JSONObject jsonObject = allArray.optJSONObject(i); + //增加id和name属性的输出,用于第三方器械包接收记录的送货员、发货员、核对员等-GZSLWQGSKY-2 + jsonObject.put("id", jsonObject.optLong("id")); + jsonObject.put("name", jsonObject.optString("name")); jsonObject.put("fullName", StringUtil.subStringByAsciiLength(jsonObject.optString("fullName"), 8,2)); } } @@ -8952,4 +8958,168 @@ return result.toString(); } + /** + * 分页展示第三方器械包接收记录 + * @return + */ + public String loadThirdPartyTousseReceiveRecordList(JSONObject params){ + JSONObject result = JSONUtil.buildJsonObject(false); + PageEntity page = new PageEntity(); + page.setLimit(params.optInt("firstIndex", 10)); + page.setStart(params.optInt("maxResultCount", 0)); + //开始时间起止范围条件(格式为yyyy-MM-dd HH:mm:ss;yyyy-MM-dd HH:mm:ss) + String receiveDateTimeParam = params.optString("startDate"); + Date receiveDateTimeStart = null; + Date receiveDateTimeEnd = null; + if(StringUtils.isNotBlank(receiveDateTimeParam)){ + String[] receiveDateTimeArray = StringUtils.split(receiveDateTimeParam, ";"); + if(receiveDateTimeArray.length < 2){ + throw new SystemException("接收时间参数有误"); + } + receiveDateTimeStart = ForgonDateUtils.safelyParseDate(receiveDateTimeArray[0]); + receiveDateTimeEnd = ForgonDateUtils.safelyParseDate(receiveDateTimeArray[1]); + } + thirdPartyTousseReceiveRecordManager.loadThirdPartyTousseReceiveRecord(receiveDateTimeStart,receiveDateTimeEnd,page); + JSONUtil.addSuccess(result, true); + JSONUtil.addProperty(result, "thirdPartyTousseReceiveRecords", page.getList()); + return result.toString(); + } + + /** + * 查询第三方器械包接收记录明细(及接收的物品集合) + * @return + */ + public String loadThirdPartyTousseReceiveRecordDetail(JSONObject params){ + JSONObject result = JSONUtil.buildJsonObject(false); + try { + //对vo进行请求参数赋值 + String ids = params.optString("ids"); + List thirdPartyTousseReceiveRecordVoList = thirdPartyTousseReceiveRecordManager.loadThirdPartyTousseReceiveRecordDetail(ids); + JSONUtil.addSuccess(result, true); + if(CollectionUtils.isNotEmpty(thirdPartyTousseReceiveRecordVoList)){ + ThirdPartyTousseReceiveRecordVo vo = thirdPartyTousseReceiveRecordVoList.get(0); + JSONUtil.addProperty(result, "thirdPartyTousseReceiveRecord", JSONObject.fromObject(vo)); + JSONUtil.addProperty(result, "thirdPartyTousseInstances", vo.getThirdPartyTousseInstances()); + } + } catch (Exception e) { + e.printStackTrace(); + result = JSONUtil.buildJsonObject(false, "查询失败:" + e.getMessage()); + } + return result.toString(); + } + + + /** + * 扫码扫描物品接收时调用,验证第三方器械包条码是否被接收过 + * @return + */ + public String validateThirdPartyTousse(JSONObject params){ + JSONObject result = JSONUtil.buildJsonObject(false); + ThirdPartyTousseInstanceVo vo = new ThirdPartyTousseInstanceVo(); + //对vo进行请求参数赋值 + vo.setBarcode(params.optString("barcode")); + vo.setTousseName(params.optString("tousseName")); + thirdPartyTousseReceiveRecordManager.validateThirdPartyTousse(vo); + JSONUtil.addSuccess(result, true); + return result.toString(); + } + + // 在第三方器械包模块的上下文,根据条码获取信息 + @SuppressWarnings("unchecked") + public String getInfoByBarcode_ThirdPartyTousse(JSONObject params) { + String barcode = params.optString("barcode"); + if (StringUtils.isBlank(barcode)) { + return JSONUtil.buildErrorMsgJsonResult("缺失参数barcode"); + } + BarcodeDevice barcodeDevice = barcodeManager.getBarcodeByBarcode(barcode, false); + if (barcodeDevice == null) { + return JSONUtil.buildErrorMsgJsonResult("该条码为非法条码"); + } + if(!(barcodeDevice instanceof User)){ + return JSONUtil.buildErrorMsgJsonResult("只能扫描系统用户的条码"); + } + User user = (User)barcodeDevice; + if(!user.isEnabled()){ + return JSONUtil.buildErrorMsgJsonResult("该用户已停用"); + } + String departCode = params.optString("departCode"); + if(!StringUtils.equals(departCode, user.getCurrentOrgUnitCode())){ + return JSONUtil.buildErrorMsgJsonResult("扫描的条码不是本科室用户"); + } + JSONObject result = JSONUtil.buildJsonObject(true); + JSONUtil.addDataProperty(result, JSONObject.fromObject(user,JSONUtil.buildJsonConfig("id","name","fullName"))); + return result.toString(); + } + + /** + * 根据所传的json参数构造第三方器械包接收对象 + * @param thirdPartyTousseReceiveRecordVo + * @param params + */ + private void buildThirdPartyTousseReceiveRecordVo(ThirdPartyTousseReceiveRecordVo thirdPartyTousseReceiveRecordVo,JSONObject params){ + //基本参数与接收的第三方器械包明细 + JSONObject formParamsJSONObject = params.optJSONObject("formParams"); + JSONArray itemsJSONArray = params.optJSONArray("items"); + if(formParamsJSONObject != null){ + //receiverId,shipperId,verifierId,sender,remark,wareHouseId,id, + thirdPartyTousseReceiveRecordVo.setReceiverId(formParamsJSONObject.optLong("receiverId")); + thirdPartyTousseReceiveRecordVo.setShipperId(formParamsJSONObject.optLong("shipperId")); + thirdPartyTousseReceiveRecordVo.setVerifierId(formParamsJSONObject.optLong("verifierId")); + thirdPartyTousseReceiveRecordVo.setSender(formParamsJSONObject.optString("sender")); + thirdPartyTousseReceiveRecordVo.setRemark(formParamsJSONObject.optString("remark")); + thirdPartyTousseReceiveRecordVo.setWareHouseId(formParamsJSONObject.optLong("wareHouseId")); + thirdPartyTousseReceiveRecordVo.setId(formParamsJSONObject.optLong("id")); + //设置数据源(贵阳二院为东昇,荔湾骨伤科为老肯) + thirdPartyTousseReceiveRecordVo.setDataSource(ThirdPartyTousseReceiveRecord.DATASOURCE_DONGSHENG); + if(CssdUtils.getSystemSetConfigByNameBool("enabledCreateNewDefinitionOnReceiving")){ + thirdPartyTousseReceiveRecordVo.setDataSource(ThirdPartyTousseReceiveRecord.DATASOURCE_LAOKEN); + } + } + if(CollectionUtils.isNotEmpty(itemsJSONArray)){ + List thirdPartyTousseInstanceVoList = new ArrayList(); + for (int i = 0; i < itemsJSONArray.size(); i++) { + JSONObject item = itemsJSONArray.optJSONObject(i); + ThirdPartyTousseInstanceVo vo = new ThirdPartyTousseInstanceVo(); + //barcode,tousseName,orgUnitId,orgUnitName,operator,reviewer,sterileTime,validUntil + vo.setBarcode(item.optString("barcode")); + vo.setTousseName(item.optString("tousseName")); + vo.setOrgUnitId(item.optLong("orgUnitId")); + vo.setOrgUnitName(item.optString("orgUnitName")); + vo.setOperator(item.optString("operator")); + vo.setReviewer(item.optString("reviewer")); + vo.setSterileTime(item.optString("sterileTime")); + vo.setValidUntil(item.optString("validUntil")); + thirdPartyTousseInstanceVoList.add(vo); + } + thirdPartyTousseReceiveRecordVo.setThirdPartyTousseInstances(thirdPartyTousseInstanceVoList); + } + } + + /** + * 接收第三方器械包实例 + * @return + */ + public String receiveThirdPartyTousse(JSONObject params){ + JSONObject result = JSONUtil.buildJsonObject(false); + ThirdPartyTousseReceiveRecordVo thirdPartyTousseReceiveRecordVo = new ThirdPartyTousseReceiveRecordVo(); + buildThirdPartyTousseReceiveRecordVo(thirdPartyTousseReceiveRecordVo,params); + //对vo进行请求参数赋值 + thirdPartyTousseReceiveRecordManager.receiveThirdPartyTousse(thirdPartyTousseReceiveRecordVo); + JSONUtil.addSuccess(result, true); + return result.toString(); + } + + /** + * 第三方器械包“接收”时新增一键发货功能 + */ + public String receiveAndInvoiceThirdPartyTousse(JSONObject params){ + JSONObject result = JSONUtil.buildJsonObject(false); + ThirdPartyTousseReceiveRecordVo thirdPartyTousseReceiveRecordVo = new ThirdPartyTousseReceiveRecordVo(); + buildThirdPartyTousseReceiveRecordVo(thirdPartyTousseReceiveRecordVo,params); + //对vo进行请求参数赋值 + invoiceManager.receiveAndInvoiceThirdPartyTousse(thirdPartyTousseReceiveRecordVo); + JSONUtil.addSuccess(result, true); + return result.toString(); + } + } Index: ssts-web/src/main/webapp/mobileClient/SterileSupplySystem_Android_V4.7.40_20250210_v4_1_release.apk =================================================================== diff -u Binary files differ Index: ssts-web/src/main/webapp/mobileClient/clientForAndroid.json =================================================================== diff -u -r38151 -r39500 --- ssts-web/src/main/webapp/mobileClient/clientForAndroid.json (.../clientForAndroid.json) (revision 38151) +++ ssts-web/src/main/webapp/mobileClient/clientForAndroid.json (.../clientForAndroid.json) (revision 39500) @@ -1,7 +1,7 @@ { "success":"true", - "version":"4.7.39", - "urlSuffix": "/mobileClient/SterileSupplySystem_Android_V4.7.39_20240606_v4_1_release.apk", - "urlSuffix-nologo":"/mobileClient/SterileSupplySystem_Android_V4.7.39_20240606_v4_1_nologo_release.apk", - "urlSuffix-6p": "/mobileClient/SterileSupplySystem_Android_V4.7.39_20240606_v4_1_6p_release.apk", + "version":"4.7.40", + "urlSuffix": "/mobileClient/SterileSupplySystem_Android_V4.7.40_20250210_v4_1_release.apk", + "urlSuffix-nologo":"/mobileClient/SterileSupplySystem_Android_V4.7.40_20250210_v4_1_nologo_release.apk", + "urlSuffix-6p": "/mobileClient/SterileSupplySystem_Android_V4.7.40_20250210_v4_1_6p_release.apk", } \ No newline at end of file