Index: ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/service/ServiceManagerImpl.java =================================================================== diff -u -r18072 -r18191 --- ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/service/ServiceManagerImpl.java (.../ServiceManagerImpl.java) (revision 18072) +++ ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/service/ServiceManagerImpl.java (.../ServiceManagerImpl.java) (revision 18191) @@ -16,7 +16,6 @@ import java.util.Map; import java.util.Set; -import net.sf.jasperreports.engine.util.JsonUtil; import net.sf.json.JSONArray; import net.sf.json.JSONException; import net.sf.json.JSONNull; @@ -82,7 +81,6 @@ import com.forgon.disinfectsystem.entity.packing.ReviewedBasket; import com.forgon.disinfectsystem.entity.printRecyclingApplicationConfig.PrintConfig; import com.forgon.disinfectsystem.entity.recycledepartmentgroup.DepartmentGroup; -import com.forgon.disinfectsystem.entity.recyclingapplication.RecyclingApplication; import com.forgon.disinfectsystem.entity.returngoodsrecord.ReturnGoodsItem; import com.forgon.disinfectsystem.entity.returngoodsrecord.ReturnGoodsRecord; import com.forgon.disinfectsystem.entity.sterilizationmanager.proxydisinfection.ProxyDisinfection; @@ -100,6 +98,7 @@ import com.forgon.disinfectsystem.invoicemanager.vo.InvoiceStaticsVo; import com.forgon.disinfectsystem.invoicemanager.vo.WaitSignGoodsSummary; import com.forgon.disinfectsystem.operationreservation.service.OperationReservationManager; +import com.forgon.disinfectsystem.operationreservation.vo.OperationReservationGroupVo; import com.forgon.disinfectsystem.packing.service.PackingManager; import com.forgon.disinfectsystem.printRecyclingApplicationConfig.service.PrintConfigManager; import com.forgon.disinfectsystem.recyclingapplication.service.InvoicePlanManager; @@ -125,6 +124,7 @@ 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.disinfectsystem.webservice.operationreservation.model.OperationReservationInvoiceGoodsDetail; import com.forgon.keyvalue.service.KeyValueManager; import com.forgon.log.model.Log; import com.forgon.log.service.LogManager; @@ -148,7 +148,6 @@ import com.forgon.tools.Path; import com.forgon.tools.SpringBeanManger; import com.forgon.tools.SqlBuilder; -import com.forgon.tools.StrutsParamUtils; import com.forgon.tools.date.DateTools; import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.hibernate.ObjectDao; @@ -886,7 +885,6 @@ } public String getUserInfo(JSONObject params){ - JSONObject obj = new JSONObject(); String fullName = ""; String name = ""; String msg = ""; @@ -909,10 +907,10 @@ }else{ msg = "缺少参数loginName"; } - obj.put("success", success); + JSONObject obj = JSONUtil.buildJsonObject(success, msg); obj.put("fullName", fullName); obj.put("name", name); - obj.put("msg", msg); + obj.put("msg", msg); //可能后台程序更新了,但是前台PDA程序未更新,所以添加多一个属性,为了兼容。2017-5-22 return obj.toString(); } /** @@ -1041,8 +1039,55 @@ } } } - /** + * 获取手术预约单。在手术预约列表界面,点击其中一行打开发货界面的时候调用。参数为手术预约单的id集合. + * 目前,每一个台次只有一张手术预约单 + * @param params + * @return + */ + public String getOperationReservationGoods(JSONObject params){ + String invoicePlanIds = params.optString("invoicePlanIds"); + Collection ors = operationReservationManager.getCollection(invoicePlanIds, ";"); + List operationReservations = operationReservationManager.groupByConsoleName(ors); + if(CollectionUtils.isEmpty(operationReservations)){ + return JSONUtil.buildJsonObject(false, "手术预约单已经删除").toString(); + } + List applicationGoods = new ArrayList<>(); + for(OperationReservationGroupVo orv : operationReservations){ + if(orv == null){ + continue; + } + if(CollectionUtils.isNotEmpty(orv.getOperationReservations())){ + OperationReservationInvoiceGoodsDetail detail = CollectionUtils.find(applicationGoods, new Predicate(){ + @Override + public boolean evaluate( + OperationReservationInvoiceGoodsDetail object) { + if(object != null){ + return StringTools.equals(orv.getConsoleName(), object.getConsoleName()); + } + return false; + }}); + if(detail == null){ + detail = new OperationReservationInvoiceGoodsDetail(); + detail.setConsoleName(orv.getConsoleName()); + applicationGoods.add(detail); + } + for(InvoicePlan or : orv.getOperationReservations()){ + List ips = new ArrayList(); + ips.add(or); + Collection waitDeliverGoods = invoiceManager.getWaitDeliverGoods(ips, params.optString("applyDate",""), null); + if(CollectionUtils.isEmpty(waitDeliverGoods)){ + continue; + } + // 去除消毒物品显示名称前用中文括号包围的科室名称 + fixApplicationGoodsVoShowTousseName(waitDeliverGoods); + detail.add(or.getId(), waitDeliverGoods); + } + } + } + return JSONUtil.buildJsonObject(true,JSONArray.fromObject(applicationGoods)).toString(); + } + /** * 获取发货计划 * * @param id @@ -1259,14 +1304,8 @@ public String submitInvoicePlans2(JSONObject params) { try{ -// long start = System.currentTimeMillis(); invoiceManager.submitInvoice(params); -// long end = System.currentTimeMillis(); -// long time = end - start; -// System.out.println("发货消耗时间"+time); - return new JSONStringer().object() - .key("success").value(true) - .endObject().toString(); + return JSONUtil.buildJsonObject(true).toString(); } catch (Exception ex){ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return JSONUtil.buildErrorMsgJsonResult(ex.getMessage()); @@ -3528,31 +3567,69 @@ */ public String getWaitingForDeliveryOperationReservationList(JSONObject params){ String departCode =params.optString("departCode"); - List ors = operationReservationManager.getWaitingForDeliveryOperationReservations(departCode); - JSONArray operationReservationArray = new JSONArray(); - JSONArray departmentArray = new JSONArray(); - Map departMap = new HashMap(); - JSONObject json = JSONUtil.buildJsonObject(true); - if(CollectionUtils.isNotEmpty(ors)){ - for(OperationReservation or : ors){ - if(or != null){ - operationReservationArray.add(operationReservationManager.toJson(or)); - if(StringTools.isBlank(departCode)){ - departMap.put(or.getDepartCoding(), or.getDepart()); - } - } - } - } - for(Map.Entry entry : departMap.entrySet()){ - JSONObject depart = new JSONObject(); - depart.put("depart", entry.getValue()); - depart.put("departCode", entry.getKey()); - departmentArray.add(depart); - } - json.put("operationReservations", operationReservationArray); - json.put("departments", departmentArray); + String operationRoom =params.optString("operationRoom"); + String applyDate =params.optString("applyDate"); + JSONObject json = operationReservationManager.getWaitingForDeliveryOperationReservations(departCode,operationRoom,applyDate); + json.put("applyDateList", getOperationDateList()); return json.toString(); } + private List> getOperationDateList(){ + List> applyDateMapList = new ArrayList>(); + Calendar now = Calendar.getInstance(); + Map applyDateMap = new HashMap(); + applyDateMap.put("name", "全部日期"); + applyDateMap.put("value", ""); + applyDateMapList.add(applyDateMap); + + SimpleDateFormat sdf = Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS; + + now.add(Calendar.DATE, 1); + ForgonDateUtils.setTime(now, 23, 59, 59); + String tomorowStr = sdf.format(now.getTime()); + + applyDateMap = new HashMap(); + applyDateMap.put("name", "明天"); + ForgonDateUtils.setTime(now, 0, 0, 0); + applyDateMap.put("value", sdf.format(now.getTime()) + ";" + tomorowStr); + applyDateMapList.add(applyDateMap); + + now.add(Calendar.DATE, -1); + ForgonDateUtils.setTime(now, 23, 59, 59); + String todayStr = sdf.format(now.getTime()); + + + applyDateMap = new HashMap(); + applyDateMap.put("name", "今天"); + ForgonDateUtils.setTime(now, 0, 0, 0); + applyDateMap.put("value", sdf.format(now.getTime()) + ";" + todayStr); + applyDateMapList.add(applyDateMap); + + ForgonDateUtils.setTime(now, 0, 0, 0); + now.add(Calendar.DATE, -1); + String yesterdayStart = sdf.format(now.getTime()); + ForgonDateUtils.setTime(now, 23, 59, 59); + String yesterdayEnd = sdf.format(now.getTime()); + + applyDateMap = new HashMap(); + applyDateMap.put("name", "昨天"); + applyDateMap.put("value", yesterdayStart + ";" + yesterdayEnd); + applyDateMapList.add(applyDateMap); + + now.add(Calendar.DATE, -1); + ForgonDateUtils.setTime(now, 0, 0, 0); + applyDateMap = new HashMap(); + applyDateMap.put("name", "近三天"); + applyDateMap.put("value", sdf.format(now.getTime()) + ";" + todayStr); + applyDateMapList.add(applyDateMap); + + now.add(Calendar.DATE, -4); + applyDateMap = new HashMap(); + applyDateMap.put("name", "近一周"); + applyDateMap.put("value", sdf.format(now.getTime()) + ";" + todayStr); + applyDateMapList.add(applyDateMap); + + return applyDateMapList; + } /** * 在手术预约列表界面扫描单号,打开对应的手术预约单进行发货 * @param params Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/operationreservation/vo/OperationReservationSummary.java =================================================================== diff -u --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/operationreservation/vo/OperationReservationSummary.java (revision 0) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/operationreservation/vo/OperationReservationSummary.java (revision 18191) @@ -0,0 +1,69 @@ +package com.forgon.disinfectsystem.operationreservation.vo; + +import java.util.ArrayList; +import java.util.List; + +public class OperationReservationSummary { + /** + * 申请科室部门编码 + */ + private String departCoding; + + /** + * 申请科室 + */ + private String depart; + /** + * 手术间 + */ + private String operatingRoom; + /** + * 手术日期。为手术预约单上的手术时间取日期的部分,并且多张单同一个日期会合并 + */ + private String operationDate; + /** + * 手术预约单id的集合。为科室、手术间、手术日期三个合并的手术预约单的集合 + */ + private List operationReservationIds; + + public String getDepartCoding() { + return departCoding; + } + public void setDepartCoding(String departCoding) { + this.departCoding = departCoding; + } + public String getDepart() { + return depart; + } + public void setDepart(String depart) { + this.depart = depart; + } + public String getOperatingRoom() { + return operatingRoom; + } + public void setOperatingRoom(String operatingRoom) { + this.operatingRoom = operatingRoom; + } + public String getOperationDate() { + return operationDate; + } + public void setOperationDate(String operationDate) { + this.operationDate = operationDate; + } + public List getOperationReservationIds() { + return operationReservationIds; + } + public void setOperationReservationIds(List operationReservationIds) { + this.operationReservationIds = operationReservationIds; + } + /** + * 添加手术预约单的id + * @param orId + */ + public void addOperationReservationId(Long orId){ + if(operationReservationIds == null){ + operationReservationIds = new ArrayList<>(); + } + operationReservationIds.add(orId); + } +} Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/operationreservation/service/OperationReservationManagerImpl.java =================================================================== diff -u -r18008 -r18191 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/operationreservation/service/OperationReservationManagerImpl.java (.../OperationReservationManagerImpl.java) (revision 18008) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/operationreservation/service/OperationReservationManagerImpl.java (.../OperationReservationManagerImpl.java) (revision 18191) @@ -4,25 +4,31 @@ import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; 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.collections4.CollectionUtils; +import org.apache.commons.collections4.Predicate; import org.apache.commons.lang.StringUtils; -import org.apache.commons.lang3.BooleanUtils; import com.forgon.Constants; +import com.forgon.databaseadapter.service.DateQueryAdapter; import com.forgon.directory.acegi.tools.AcegiHelper; import com.forgon.disinfectsystem.entity.basedatamanager.operationRoom.OperationRoom; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; import com.forgon.disinfectsystem.entity.operationreservation.OperationReservation; import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; +import com.forgon.disinfectsystem.operationreservation.vo.OperationReservationGroupVo; +import com.forgon.disinfectsystem.operationreservation.vo.OperationReservationSummary; import com.forgon.disinfectsystem.operationreservation.vo.OperationReservationVo; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseDefinitionManager; import com.forgon.disinfectsystem.tousseitem.service.TousseItemManager; @@ -55,6 +61,12 @@ private SerialNumManager serialNumManager; + private DateQueryAdapter dateQueryAdapter; + + public void setDateQueryAdapter(DateQueryAdapter dateQueryAdapter) { + this.dateQueryAdapter = dateQueryAdapter; + } + public void setSerialNumManager(SerialNumManager serialNumManager) { this.serialNumManager = serialNumManager; } @@ -67,15 +79,6 @@ public void setTousseItemManager(TousseItemManager tousseItemManager) { this.tousseItemManager = tousseItemManager; } - - private OperationReservation getById(String id) { - if (StringUtils.isNotBlank(id)) { - return (OperationReservation) objectDao.getByProperty( - OperationReservation.class.getSimpleName(), "id", - Long.valueOf(id)); - } - return null; - } @Override public void saveOrUpdate(String json) { @@ -239,17 +242,94 @@ } } } - + /** + * 查找科室下,某手术间,在相同手术日期(精确到天)下的手术预约记录项 + * @param items + * @param operationReservationSummary + * @return + */ + private OperationReservationSummary find(List items,OperationReservation operationReservation){ + OperationReservationSummary find = null; + if(CollectionUtils.isNotEmpty(items) && operationReservation != null){ + for(OperationReservationSummary or : items ){ + if(or != null){ + if(StringTools.equals(operationReservation.getDepartCoding(), or.getDepartCoding()) + && StringTools.equals(operationReservation.getOperatingRoom(), or.getOperatingRoom()) + && StringTools.equals(ForgonDateUtils.safelyFormatDate(operationReservation.getOperationTime(),Constants.SIMPLEDATEFORMAT_YYYYMMDD,""), or.getOperationDate())){ + return or; + } + } + } + } + return find; + } + @Override - public List getWaitingForDeliveryOperationReservations(String departCode) { + public JSONObject getWaitingForDeliveryOperationReservations(String departCode, String operationRoom, String applyDate) { String departPredicate = " 1= 1"; if(StringTools.isNotBlank(departCode)){ departPredicate = " po.departCoding='" + departCode + "' "; } String condition = String.format(" po.deliverStatus in('%s','%s') and %s", InvoicePlan.DELIVERSTATUS_AWAITDELIVER,InvoicePlan.DELIVERSTATUS_PARTDELIVERED,departPredicate); - condition += " and committedStatus=true and operatingRoom in (select operationRoomName from "+ OperationRoom.class.getSimpleName() +" where isInvoice='"+ Constants.STR_YES +"') order by id desc"; - return getByHql(condition); + + if(StringTools.isNotBlank(applyDate)){ + String[] applyDateArray = StringUtils.split(applyDate, Constants.IDS_SEPARATOR); + condition += " and " + dateQueryAdapter.dateAreaSql("operationTime", applyDateArray[0], applyDateArray[1],false); + } + if(StringTools.isNotEmpty(operationRoom) && !StringTools.equals("全部", operationRoom)){ + condition += " and operatingRoom='" +operationRoom + "'"; + } + + condition += " and committedStatus=true and operatingRoom in (select operationRoomName from "+ OperationRoom.class.getSimpleName() +" where isInvoice='"+ Constants.STR_YES +"') order by "+dateQueryAdapter.dateToVarchar1("operationTime")+" desc,operatingRoom asc"; + + List ors = getByHql(condition); + List operationReservationArray = new ArrayList(); + JSONArray departmentArray = new JSONArray(); + Map departMap = new HashMap(); + Set operationRoomSet = new HashSet(); + JSONObject json = JSONUtil.buildJsonObject(true); + if(CollectionUtils.isNotEmpty(ors)){ + for(OperationReservation or : ors){ + if(or != null){ + OperationReservationSummary find = find(operationReservationArray,or); + if(find == null){ + find = new OperationReservationSummary(); + find.setDepart(or.getDepart()); + find.setDepartCoding(or.getDepartCoding()); + find.setOperatingRoom(or.getOperatingRoom()); + find.setOperationDate(ForgonDateUtils.safelyFormatDate(or.getOperationTime(),Constants.SIMPLEDATEFORMAT_YYYYMMDD,"")); + operationReservationArray.add(find); + } + find.addOperationReservationId(or.getId()); + + if(StringTools.isBlank(departCode)){ + departMap.put(or.getDepartCoding(), or.getDepart()); + } + if(StringTools.isNotBlank(or.getOperatingRoom())){ + operationRoomSet.add(or.getOperatingRoom()); + } + } + } + } + for(Map.Entry entry : departMap.entrySet()){ + JSONObject depart = new JSONObject(); + depart.put("depart", entry.getValue()); + depart.put("departCode", entry.getKey()); + departmentArray.add(depart); + } + json.put("operationReservations", operationReservationArray); + json.put("departments", departmentArray); + if(CollectionUtils.isNotEmpty(operationRoomSet)){ + List operationRoomList = new ArrayList<>(); + operationRoomList.addAll(operationRoomSet); + Collections.sort(operationRoomList); + operationRoomList.add(0, "全部"); + json.put("operationRoomList", operationRoomList); + } + + + return json; } @Override @@ -273,7 +353,7 @@ } String [] idArray = ids.split(";"); for (String id : idArray) { - OperationReservation or = getById(id); + OperationReservation or = get(id); if(or == null){ throw new RuntimeException("id="+id+"的单据已不存在!"); } @@ -313,4 +393,33 @@ return json; } + @Override + public List groupByConsoleName( + Collection operationReservations) { + List list = new ArrayList(); + if(CollectionUtils.isNotEmpty(operationReservations)){ + for(OperationReservation or : operationReservations){ + if(or == null){ + continue; + } + OperationReservationGroupVo find = CollectionUtils.find(list, new Predicate(){ + @Override + public boolean evaluate(OperationReservationGroupVo object) { + if(object != null){ + return StringTools.equals(or.getConsoleName(), object.getConsoleName()); + } + return false; + }}); + if(find == null){ + find = new OperationReservationGroupVo(); + find.setConsoleName(or.getConsoleName()); + list.add(find); + } + find.add(or); + } + } + Collections.sort(list); + return list; + } + } Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/vo/ApplicationGoodsVo.java =================================================================== diff -u -r15734 -r18191 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/vo/ApplicationGoodsVo.java (.../ApplicationGoodsVo.java) (revision 15734) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/vo/ApplicationGoodsVo.java (.../ApplicationGoodsVo.java) (revision 18191) @@ -18,7 +18,7 @@ */ public class ApplicationGoodsVo { - public String name;//包定义名称(带下划线) + private String name;//包定义名称(带下划线) private String showTousseName;//页面显示名称 Index: ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/operationreservation/model/OperationReservationInvoiceGoodsDetail.java =================================================================== diff -u --- ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/operationreservation/model/OperationReservationInvoiceGoodsDetail.java (revision 0) +++ ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/operationreservation/model/OperationReservationInvoiceGoodsDetail.java (revision 18191) @@ -0,0 +1,76 @@ +package com.forgon.disinfectsystem.webservice.operationreservation.model; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.Predicate; + +import com.forgon.disinfectsystem.recyclingapplication.vo.ApplicationGoodsVo; +import com.forgon.tools.MathTools; +import com.forgon.tools.string.StringTools; + +public class OperationReservationInvoiceGoodsDetail { + private String consoleName; + private List applicationGoods = new ArrayList<>(); + private Map> invoicePlanIdApplicationGoodsMap = new HashMap>(); + + public String getConsoleName() { + return consoleName; + } + public void setConsoleName(String consoleName) { + this.consoleName = consoleName; + } + public List getApplicationGoods() { + return applicationGoods; + } + + public Map> getInvoicePlanIdApplicationGoodsMap() { + return invoicePlanIdApplicationGoodsMap; + } + + public void add(Long invoicePlanId,Collection applicationGoods){ + String key = invoicePlanId == null?"":invoicePlanId.toString(); + List vos = invoicePlanIdApplicationGoodsMap.get(key); + if(vos == null){ + vos = new ArrayList<>(); + invoicePlanIdApplicationGoodsMap.put(key, vos); + } + merge(vos,applicationGoods); + merge(this.applicationGoods,applicationGoods); + } + + private void merge(List target,Collection source){ + if(CollectionUtils.isNotEmpty(source)){ + for(ApplicationGoodsVo vo : source){ + if(vo == null){ + continue; + } + ApplicationGoodsVo find = CollectionUtils.find(target, new Predicate(){ + @Override + public boolean evaluate(ApplicationGoodsVo object) { + if(object != null){ + return StringTools.equals(object.getName(),vo.getName()); + } + return false; + }}); + if(find == null){ + find = vo; + target.add(find); + }else{ + find.setApplicationAmount(MathTools.add(vo.getApplicationAmount(), find.getApplicationAmount()).intValue()); + find.setCount(MathTools.add(vo.getCount(),find.getCount()).intValue()); + find.setUrgentAmount(MathTools.add(find.getUrgentAmount(),vo.getUrgentAmount()).intValue()); + + find.getDisposableGoodsIdSet().addAll(vo.getDisposableGoodsIdSet()); + find.getInvoicePlanIDList().addAll(vo.getInvoicePlanIDList()); + find.getMaterials().addAll(vo.getMaterials()); + + } + } + } + } +} Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/operationreservation/vo/OperationReservationGroupVo.java =================================================================== diff -u --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/operationreservation/vo/OperationReservationGroupVo.java (revision 0) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/operationreservation/vo/OperationReservationGroupVo.java (revision 18191) @@ -0,0 +1,50 @@ +package com.forgon.disinfectsystem.operationreservation.vo; + +import java.util.ArrayList; +import java.util.List; + +import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; +import com.forgon.disinfectsystem.entity.operationreservation.OperationReservation; +import com.forgon.tools.string.StringTools; +/** + * 手术预约单按手术台次分组的对象。目前同一日期同一手术台次的手术预约单只会有一张。但不排队会有多张的可能 + * @author kzh + * + */ +public class OperationReservationGroupVo implements Comparable { + /** + * 手术台次 + */ + private String consoleName; + /** + * 对应台次下的手术预约单 + */ + private List operationReservations = new ArrayList<>(); + + public String getConsoleName() { + return consoleName; + } + public void setConsoleName(String consoleName) { + this.consoleName = StringTools.defaultIfBlank(consoleName, ""); + } + public List getOperationReservations() { + return operationReservations; + } + public void add(OperationReservation or){ + if(or != null){ + operationReservations.add(or); + } + } + @Override + public int compareTo(OperationReservationGroupVo o) { + if(StringTools.isBlank(consoleName)){ + if(StringTools.isBlank(o.getConsoleName())){ + return 0; + }else{ + return 1; + } + }else{ + return consoleName.compareTo(o.getConsoleName()); + } + } +} Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java =================================================================== diff -u -r18148 -r18191 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 18148) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 18191) @@ -10,7 +10,6 @@ import java.util.Calendar; import java.util.Collection; import java.util.Collections; -import java.util.Comparator; import java.util.Date; import java.util.HashMap; import java.util.HashSet; @@ -26,9 +25,6 @@ import javax.persistence.Transient; -import com.forgon.disinfectsystem.entity.invoicemanager.enums.BorrowConfirmStatus; -import com.forgon.disinfectsystem.recyclingapplication.service.InvoicePlanManagerImpl; - import net.sf.json.JSONArray; import net.sf.json.JSONObject; @@ -41,7 +37,6 @@ import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateFormatUtils; import org.apache.log4j.Logger; -import org.hibernate.LockMode; import org.hibernate.Query; import org.hibernate.Session; @@ -95,7 +90,6 @@ import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationRecord; import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; import com.forgon.disinfectsystem.idpredicate.IDOperators; -import com.forgon.disinfectsystem.idpredicate.IDPredicate; import com.forgon.disinfectsystem.inventorymanagement.dao.WriteBackInventoryDao; import com.forgon.disinfectsystem.inventorymanagement.service.WriteBackInventoryHelper; import com.forgon.disinfectsystem.invoice.service.SubmitInvoiceContext; @@ -404,6 +398,7 @@ return invoice; } + @Override public Invoice getInvoiceByTousseInstanceId2(String tousseInstanceId){ Invoice invoice = null; String sql = String.format(" where po.id=(select ti.invoice_id from %s ti where ti.id=%s) ",TousseInstance.class.getSimpleName(), tousseInstanceId); @@ -2278,6 +2273,7 @@ submitInvoiceContext.setSubmitInvoiceItems(submitInvoiceItems); } } + @Override public void submitInvoice(JSONObject params) { String invoiceType = JSONUtil.optString(params, "invoiceType", Invoice.TYPE_APPLICATION); @@ -4103,6 +4099,7 @@ } } // 发货扫描时的扫条码处理,暂时从getInfoByBarcode复制而来,还需要做进一步的优化处理 + @Override public JsonObject getInfoByBarcodeForInvoiceScan(JsonObject params){ @@ -4616,7 +4613,7 @@ if (!TousseDefinition.STR_NO.equals(tousseDefinition.getIsTraceable())) return 0; String sql = " where po.id=" + invoicePlanId; - List invoicePlans = (List)objectDao.findBySql(InvoicePlan.class.getSimpleName(),sql); + List invoicePlans = objectDao.findBySql(InvoicePlan.class.getSimpleName(),sql); long result = getDisinfectionTousseInstanceAmount(invoicePlans, tousseDefinition); return result; @@ -4793,6 +4790,7 @@ * @author SYF * @since 2015-09-29 */ + @Override public Collection getWaitDeliverGoods(Long invoicePlanId, String applyDate, String tousseType){ InvoicePlan invoicePlan = (InvoicePlan) objectDao.getByProperty( InvoicePlan.class.getSimpleName(), "id", @@ -4802,16 +4800,8 @@ return getWaitDeliverGoods(Collections.singleton(invoicePlan) , applyDate , null); } - /** - * 根据发货计划与是否一次性物品的条件查询待发货物品,条件说明如下 - * @param invoicePlans 发货计划单 - * @param applyDate 申请日期(开始日期与结束日期之间用分号分隔) - * @param tousseType 是否一次性物品(是或否) - * @return Collection - * @author SYF - * @since 2015-09-29 - */ - private Collection getWaitDeliverGoods(Collection invoicePlans, + @Override + public Collection getWaitDeliverGoods(Collection invoicePlans, String applyDate , String tousseTypeArg){ Date out_beginTime = new Date(); @@ -8259,6 +8249,7 @@ return null; } + @Override public JSONArray getTousseInstancesForAuxiliaryInvoice(JSONObject params) { String applyDate = StrutsParamUtils.getPraramValue("applyDate", ""); String tousseType = StrutsParamUtils.getPraramValue("tousseType", ""); Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/operationreservation/service/OperationReservationManager.java =================================================================== diff -u -r17296 -r18191 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/operationreservation/service/OperationReservationManager.java (.../OperationReservationManager.java) (revision 17296) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/operationreservation/service/OperationReservationManager.java (.../OperationReservationManager.java) (revision 18191) @@ -1,11 +1,12 @@ package com.forgon.disinfectsystem.operationreservation.service; +import java.util.Collection; import java.util.List; -import net.sf.json.JSONArray; import net.sf.json.JSONObject; import com.forgon.disinfectsystem.entity.operationreservation.OperationReservation; +import com.forgon.disinfectsystem.operationreservation.vo.OperationReservationGroupVo; import com.forgon.tools.hibernate.BasePoManager; /** * @author wangyi @@ -19,9 +20,11 @@ /** * 获取待发货或者部分发货的手术预约单 * @param departCode 申请科室编码 + * @param applyDate 手术日期 + * @param operationRoom 手术间 * @return */ - public List getWaitingForDeliveryOperationReservations(String departCode); + public JSONObject getWaitingForDeliveryOperationReservations(String departCode, String operationRoom, String applyDate); /** * 将手术预约单转换为json格式。其中申请项不转换 * @param operationReservation 手术预约单,如果为null。返回值为null @@ -39,4 +42,12 @@ * @param ids */ public JSONObject batchPrintOperationReservation(String ids); + + /** + * 按手术台次分组 + * @param operationReservations 待分组的所有手术预约单 + * @return + */ + public List groupByConsoleName( + Collection operationReservations); } Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManager.java =================================================================== diff -u -r17871 -r18191 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManager.java (.../InvoiceManager.java) (revision 17871) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManager.java (.../InvoiceManager.java) (revision 18191) @@ -2,17 +2,15 @@ import java.sql.SQLException; import java.util.Collection; -import java.util.Date; import java.util.List; import java.util.Map; import net.sf.json.JSONArray; import net.sf.json.JSONObject; -import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; -import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; import com.forgon.disinfectsystem.entity.invoicemanager.DiposableGoodsItem; import com.forgon.disinfectsystem.entity.invoicemanager.Invoice; +import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; import com.forgon.disinfectsystem.entity.invoicemanager.TimeQuantum; import com.forgon.disinfectsystem.invoicemanager.vo.InvoicePrintVo; import com.forgon.disinfectsystem.invoicemanager.vo.InvoiceStaticsVo; @@ -123,6 +121,17 @@ * @since 2015-09-29 */ public Collection getWaitDeliverGoods(Long invoicePlanId, String applyDate, String tousseType); + /** + * 根据发货计划与是否一次性物品的条件查询待发货物品,条件说明如下 + * @param invoicePlans 发货计划单 + * @param applyDate 申请日期(开始日期与结束日期之间用分号分隔) + * @param tousseType 是否一次性物品(是或否) + * @return Collection + * @author SYF + * @since 2015-09-29 + */ + public Collection getWaitDeliverGoods(Collection invoicePlans, + String applyDate , String tousseType); public Map loadSterilizeBasketInsideTousse(String barcode, String departCodeOfInvoicePlan);