Browse Source

修复退宿单反审批报错

Heyuan 6 months ago
parent
commit
f083cc99a2

+ 5 - 19
src/com/kingdee/eas/custom/dormitorysystem/application/app/CheckoutApplicationControllerBean.java

@@ -11,6 +11,8 @@ import com.kingdee.bos.util.BOSUuid;
 import com.kingdee.eas.basedata.person.PersonInfo;
 import com.kingdee.eas.common.EASBizException;
 import com.kingdee.eas.custom.dormitorysystem.application.*;
+import com.kingdee.eas.custom.dormitorysystem.application.utils.CheckDuplicateCheckInByBillIdUtil;
+import com.kingdee.eas.custom.dormitorysystem.application.utils.ValidateRoomAvailableByBillIdsUtil;
 import com.kingdee.eas.custom.dormitorysystem.dormitory.DormitoryInfo;
 import com.kingdee.eas.custom.dormitorysystem.occupants.IOccupants;
 import com.kingdee.eas.custom.dormitorysystem.occupants.OccupantsCollection;
@@ -347,29 +349,13 @@ public class CheckoutApplicationControllerBean extends AbstractCheckoutApplicati
             if (currentRoom == null) {
                 throw new BaseItemException(BaseItemException.CUSTOM_EXCEPTION, new Object[]{"现住房间为空!"});
             }
-            String roomId = currentRoom.getId().toString();
             //1.校验房间在原入住期间内有没有被其他人入住
-            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
-            Map<String, List> paramAll = new HashMap<String, List>();
-            Map<String, String> params = new HashMap<String, String>();
-            List list = new ArrayList();
-            list.add(params);
-            params.put("checkInDate", sdf.format(checkInDate));
-            params.put("checkoutDate", sdf.format(oldCheckoutDate));
-            params.put("personId", personId);
-            params.put("roomId", roomId);
-            paramAll.put("validateData", list);
-            Map result = null;
             try {
-                IMSFServiceFacade imsfServiceFacade = MSFServiceFacadeFactory.getLocalInstance(ctx);
-                result = (Map) imsfServiceFacade.processService("validateRoomAvailableService", paramAll);
+                //根据单据id校验房间是否入住(批量)
+                ValidateRoomAvailableByBillIdsUtil.startValidate(ctx, billId);
             } catch (Exception e) {
                 logger.error(e);
-                throw new BaseItemException(BaseItemException.CUSTOM_EXCEPTION, new Object[]{"调用接口validateRoomAvailableService报错: " + e.getMessage()});
-            }
-            Integer code = (Integer) result.get("code");
-            if (500 == code) {
-                throw new BaseItemException(BaseItemException.CUSTOM_EXCEPTION, new Object[]{(String) result.get("errorMsg").toString()});
+                throw new BaseItemException(BaseItemException.CUSTOM_EXCEPTION, new Object[]{e.getMessage()});
             }
             //没有水电明细的可以反审批
             occupants.setCheckOutDate(oldCheckoutDate);

+ 29 - 7
src/com/kingdee/eas/custom/dormitorysystem/application/utils/ValidateRoomAvailableByBillIdsUtil.java

@@ -6,6 +6,7 @@ import com.kingdee.bos.Context;
 import com.kingdee.bos.dao.AbstractObjectCollection;
 import com.kingdee.bos.metadata.entity.*;
 import com.kingdee.bos.metadata.query.util.CompareType;
+import com.kingdee.bos.util.BOSObjectType;
 import com.kingdee.bos.util.BOSUuid;
 import com.kingdee.eas.basedata.person.Genders;
 import com.kingdee.eas.basedata.person.PersonInfo;
@@ -37,6 +38,9 @@ import java.util.*;
  */
 public class ValidateRoomAvailableByBillIdsUtil {
     private static Logger logger = Logger.getLogger(ValidateRoomAvailableByBillIdsUtil.class);
+    private static String CHECKOUTAPPLICATIONBOSTYPE = "EBE6D24D";//退宿单bosType
+    private static String ROOMCHANGEAPPLICATIONBOSTYPE = "0CDEF948";
+    private static String CHECKINAPPLICATIONBOSTYPE = "412D7440";//入住单bosType
 
     /**
      * 开始校验
@@ -56,15 +60,22 @@ public class ValidateRoomAvailableByBillIdsUtil {
         }
         Map<String, List<Map<String, Date>>> roomListMap = new HashMap<String, List<Map<String, Date>>>();
         List<String> errorMsgList = new ArrayList<String>();
-        ICoreBillBase iCoreBillBase = (ICoreBillBase) BOSObjectFactory.createBOSObject(ctx,
-                BOSUuid.read(billIds.split(",")[0]).getType());
+        BOSObjectType bosType = BOSUuid.read(billIds.split(",")[0]).getType();
+        ICoreBillBase iCoreBillBase = (ICoreBillBase) BOSObjectFactory.createBOSObject(ctx, bosType);
         SelectorItemCollection sic = new SelectorItemCollection();
         sic.add("*");
         sic.add("entrys.*");
         sic.add("entrys.person.*");
         sic.add("entrys.person.personType.*");
-        sic.add("entrys.checkInRoom.*");
-        sic.add("entrys.checkInRoom.DormitoryType.*");
+        if(CHECKOUTAPPLICATIONBOSTYPE.equals(CHECKOUTAPPLICATIONBOSTYPE)) {
+            //退宿单
+            sic.add("entrys.currentRoom.DormitoryType.*");
+            sic.add("entrys.currentRoom.*");
+        }else if(CHECKINAPPLICATIONBOSTYPE.equals(CHECKINAPPLICATIONBOSTYPE)) {
+            //入住单
+            sic.add("entrys.checkInRoom.DormitoryType.*");
+            sic.add("entrys.checkInRoom.*");
+        }
         FilterInfo filterInfo = new FilterInfo();
         FilterItemCollection filterItems = filterInfo.getFilterItems();
         //房间
@@ -75,7 +86,6 @@ public class ValidateRoomAvailableByBillIdsUtil {
             HRBillBaseInfo hrBillBaseInfo = (HRBillBaseInfo) hrBillBaseCollection.get(i);
             String billId = hrBillBaseInfo.getId().toString();
             String baseInfoNumber = hrBillBaseInfo.getNumber();
-            String bosType = hrBillBaseInfo.getId().getType().toString();
             AbstractObjectCollection entrys = (AbstractObjectCollection) hrBillBaseInfo.get("entrys");
             for (int j = 0; j < entrys.size(); j++) {
                 try {
@@ -93,7 +103,13 @@ public class ValidateRoomAvailableByBillIdsUtil {
                         throw new BOSException("入住日期不能为空!");
                     }
                     //退宿日期
-                    Date checkoutDate = entryInfo.getDate("checkoutDate");
+                    Date checkoutDate = null;
+                    if (CHECKOUTAPPLICATIONBOSTYPE.equals(bosType)) {
+                        //退宿单
+                        checkInDate = entryInfo.getDate("oldCheckoutDate");
+                    } else {
+                        checkoutDate = entryInfo.getDate("checkoutDate");
+                    }
                     if (checkoutDate == null) {
                         throw new BOSException("退宿日期不能为空!");
                     }
@@ -103,7 +119,13 @@ public class ValidateRoomAvailableByBillIdsUtil {
                         throw new BOSException("人员不能为空!");
                     }
                     //房间
-                    DormitoryInfo dormitory = (DormitoryInfo) entryInfo.getObjectValue("checkInRoom");
+                    DormitoryInfo dormitory = null;
+                    if (CHECKOUTAPPLICATIONBOSTYPE.equals(bosType)) {
+                        //退宿单
+                        dormitory = (DormitoryInfo) entryInfo.getObjectValue("currentRoom");
+                    } else {
+                        dormitory = (DormitoryInfo) entryInfo.getObjectValue("checkInRoom");
+                    }
                     if (dormitory == null) {
                         throw new BOSException("房间不能为空!");
                     }