Bladeren bron

提交入住申请单handler

Heyuan 1 maand geleden
bovenliggende
commit
7ba0cb83e0
14 gewijzigde bestanden met toevoegingen van 928 en 80 verwijderingen
  1. 45 1
      websrc/com/kingdee/eas/custom/dormitorysystem/application/handler/CheckInApplicationEditHandler.java
  2. 44 14
      websrc/com/kingdee/eas/custom/dormitorysystem/application/handler/CheckInApplicationListHandler.java
  3. 11 2
      websrc/com/kingdee/eas/custom/dormitorysystem/application/handler/CheckInApplicationSelfEditHandler.java
  4. 59 0
      websrc/com/kingdee/eas/custom/dormitorysystem/application/handler/CheckoutApplicationEditHandler.java
  5. 58 0
      websrc/com/kingdee/eas/custom/dormitorysystem/application/handler/CheckoutApplicationListHandler.java
  6. 100 0
      websrc/com/kingdee/eas/custom/dormitorysystem/application/handler/CheckoutApplicationSelfEditHandler.java
  7. 122 3
      websrc/com/kingdee/eas/custom/dormitorysystem/application/handler/DormitoryApplicationEditHandler.java
  8. 60 0
      websrc/com/kingdee/eas/custom/dormitorysystem/application/handler/DormitoryApplicationListHandler.java
  9. 14 14
      websrc/com/kingdee/eas/custom/dormitorysystem/application/service/CheckAgainstByCheckInBillIdsService.java
  10. 244 0
      websrc/com/kingdee/eas/custom/dormitorysystem/application/service/CheckDuplicateCheckInByBillIdService.java
  11. 125 0
      websrc/com/kingdee/eas/custom/dormitorysystem/application/service/CheckInApplicationImportService.java
  12. 13 13
      websrc/com/kingdee/eas/custom/dormitorysystem/application/service/GetOptionalRoomIdsService.java
  13. 17 17
      websrc/com/kingdee/eas/custom/dormitorysystem/application/service/ValidateRoomAvailableByBillIdsService.java
  14. 16 16
      websrc/com/kingdee/eas/custom/dormitorysystem/application/service/ValidateRoomAvailableService.java

+ 45 - 1
websrc/com/kingdee/eas/custom/dormitorysystem/application/handler/CheckInApplicationEditHandler.java

@@ -1,7 +1,20 @@
 package com.kingdee.eas.custom.dormitorysystem.application.handler;
 
+import com.kingdee.bos.Context;
+import com.kingdee.bos.util.BOSUuid;
+import com.kingdee.eas.basedata.org.HROrgUnitInfo;
+import com.kingdee.eas.custom.dormitorysystem.application.CheckInApplicationEntryInfo;
+import com.kingdee.eas.custom.dormitorysystem.application.CheckInApplicationInfo;
+import com.kingdee.eas.framework.CoreBaseInfo;
+import com.kingdee.shr.base.syssetting.context.SHRContext;
+import com.kingdee.shr.base.syssetting.exception.SHRWebException;
+import com.kingdee.shr.base.syssetting.exception.ShrWebBizException;
+import com.kingdee.util.DateTimeUtils;
 import org.apache.log4j.Logger;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
 /**
  * @Description 入住申请单表单Handler
  * @Date 2025/4/24 13:48
@@ -10,5 +23,36 @@ import org.apache.log4j.Logger;
 public class CheckInApplicationEditHandler extends DormitoryApplicationEditHandler {
     private static Logger logger = Logger.getLogger(CheckInApplicationSelfEditHandler.class);
 
-
+    /**
+     * 创建对象后置方法
+     *
+     * @param request
+     * @param response
+     * @param coreBaseInfo
+     * @throws SHRWebException
+     */
+    protected void afterCreateNewModel(
+            HttpServletRequest request,
+            HttpServletResponse response,
+            CoreBaseInfo coreBaseInfo
+    ) throws SHRWebException {
+        try {
+            Context ctx = SHRContext.getInstance().getContext();
+            CheckInApplicationInfo checkInApplicationInfo = (CheckInApplicationInfo) coreBaseInfo;
+            HROrgUnitInfo hrOrgUnitInfo = new HROrgUnitInfo();
+            hrOrgUnitInfo.setId(BOSUuid.read("00000000-0000-0000-0000-000000000000CCE7AED4"));
+            checkInApplicationInfo.setHrOrgUnit(hrOrgUnitInfo);
+            checkInApplicationInfo.setManagementNotes("本人愿意遵守以下条款:" +
+                    "\n1、自觉遵守公司《宿舍管理制度》和员工宿舍区有关管理办法,不私自调换宿舍和床位。" +
+                    "\n2、自觉维护宿舍公共区域的卫生,爱护公物,损坏公物自觉赔偿。 3、自觉遵守消防安全,节约用电用水。" +
+                    "\n3、自觉遵守消防安全,节约用电用水。");
+            //分录
+            CheckInApplicationEntryInfo entryInfo = new CheckInApplicationEntryInfo();
+            entryInfo.setCheckoutDate(DateTimeUtils.parseDate("2199-12-31", "yyyy-MM-dd"));
+            checkInApplicationInfo.getEntrys().add(entryInfo);
+        } catch (Exception e) {
+            logger.error(e);
+            throw new ShrWebBizException(e);
+        }
+    }
 }

+ 44 - 14
websrc/com/kingdee/eas/custom/dormitorysystem/application/handler/CheckInApplicationListHandler.java

@@ -1,11 +1,23 @@
 package com.kingdee.eas.custom.dormitorysystem.application.handler;
 
 import com.kingdee.bos.BOSException;
+import com.kingdee.bos.Context;
+import com.kingdee.eas.framework.CoreBaseInfo;
+import com.kingdee.eas.hr.base.HRBillBaseInfo;
+import com.kingdee.shr.base.syssetting.BaseItemException;
+import com.kingdee.shr.base.syssetting.IMSFServiceFacade;
+import com.kingdee.shr.base.syssetting.MSFServiceFacadeFactory;
+import com.kingdee.shr.base.syssetting.context.SHRContext;
 import com.kingdee.shr.base.syssetting.exception.SHRWebException;
+import com.kingdee.shr.base.syssetting.exception.ShrWebBizException;
+import org.apache.log4j.Logger;
 import org.springframework.ui.ModelMap;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
  * @Description 入住申请单列表Handler
@@ -13,21 +25,39 @@ import javax.servlet.http.HttpServletResponse;
  * @Created by Heyuan
  */
 public class CheckInApplicationListHandler extends DormitoryApplicationListHandler {
-    /**
-     * 提交生效
-     *
-     * @param request
-     * @param response
-     * @param modelMap
-     * @throws SHRWebException
-     * @throws BOSException
-     */
-    public void submitEffectAction(
+    private static Logger logger = Logger.getLogger(CheckInApplicationListHandler.class);
+    private Context ctx = SHRContext.getInstance().getContext();
+
+    @Override
+    protected void beforeSubmit(
             HttpServletRequest request,
             HttpServletResponse response,
-            ModelMap modelMap
-    ) throws SHRWebException, BOSException {
-        this.handleEnableWithTips(request, "submitEffect");
-        //JSONUtils.writeJson(response, res);
+            CoreBaseInfo model
+    ) throws SHRWebException {
+        super.beforeSubmit(request, response, model);
+        HRBillBaseInfo hrBillBaseInfo = (HRBillBaseInfo) model;
+        String billIds = hrBillBaseInfo.getId().toString();
+        Map result = null;
+        Map<String, String> params = new HashMap<String, String>();
+        params.put("billIds", billIds);
+        //校验入住申请单是否重复提交、校验入住信息时间交叉
+        try {
+            IMSFServiceFacade imsfServiceFacade = MSFServiceFacadeFactory.getLocalInstance(ctx);
+            result = (Map) imsfServiceFacade.processService("checkDuplicateCheckInByBillIdService", params);
+        } catch (Exception e) {
+            logger.error(e);
+            throw new ShrWebBizException("调用接口checkDuplicateCheckInByBillIdService报错: " + e.getMessage());
+        }
+        Integer code = (Integer) result.get("code");
+        if (500 == code) {
+            List<String> errorMsgList = (List<String>) result.get("errorMsg");
+            StringBuilder errorMsgBuilder = new StringBuilder();
+            for (String errorMsg : errorMsgList) {
+                errorMsgBuilder.append(errorMsg).append("\n");
+            }
+            throw new ShrWebBizException(errorMsgBuilder.toString());
+        }
     }
+
+
 }

+ 11 - 2
websrc/com/kingdee/eas/custom/dormitorysystem/application/handler/CheckInApplicationSelfEditHandler.java

@@ -4,12 +4,15 @@ import com.kingdee.bos.Context;
 import com.kingdee.bos.util.BOSUuid;
 import com.kingdee.eas.basedata.org.HROrgUnitInfo;
 import com.kingdee.eas.basedata.person.PersonInfo;
-import com.kingdee.eas.custom.managedormsys.application.CheckInApplicationEntryInfo;
-import com.kingdee.eas.custom.managedormsys.application.CheckInApplicationInfo;
+import com.kingdee.eas.custom.dormitorysystem.application.CheckInApplicationEntryInfo;
+import com.kingdee.eas.custom.dormitorysystem.application.CheckInApplicationInfo;
 import com.kingdee.eas.framework.CoreBaseInfo;
+import com.kingdee.eas.hr.base.HRBillBaseInfo;
 import com.kingdee.eas.hr.emp.PersonPositionFactory;
 import com.kingdee.eas.hr.emp.PersonPositionInfo;
 import com.kingdee.eas.util.app.ContextUtil;
+import com.kingdee.shr.base.syssetting.IMSFServiceFacade;
+import com.kingdee.shr.base.syssetting.MSFServiceFacadeFactory;
 import com.kingdee.shr.base.syssetting.context.SHRContext;
 import com.kingdee.shr.base.syssetting.exception.SHRWebException;
 import com.kingdee.shr.base.syssetting.exception.ShrWebBizException;
@@ -18,6 +21,9 @@ import org.apache.log4j.Logger;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
  * @Description 入住申请单表单Handler(员工自助)
@@ -27,6 +33,9 @@ import javax.servlet.http.HttpServletResponse;
 public class CheckInApplicationSelfEditHandler extends DormitoryApplicationEditHandler {
     private static Logger logger = Logger.getLogger(CheckInApplicationSelfEditHandler.class);
 
+
+
+
     /**
      * 创建对象后置方法
      *

+ 59 - 0
websrc/com/kingdee/eas/custom/dormitorysystem/application/handler/CheckoutApplicationEditHandler.java

@@ -0,0 +1,59 @@
+package com.kingdee.eas.custom.dormitorysystem.application.handler;
+
+import com.kingdee.bos.Context;
+import com.kingdee.bos.util.BOSUuid;
+import com.kingdee.eas.basedata.org.HROrgUnitInfo;
+import com.kingdee.eas.custom.dormitorysystem.application.CheckInApplicationEntryInfo;
+import com.kingdee.eas.custom.dormitorysystem.application.CheckoutApplicationEntryInfo;
+import com.kingdee.eas.custom.dormitorysystem.application.CheckoutApplicationInfo;
+import com.kingdee.eas.framework.CoreBaseInfo;
+import com.kingdee.shr.base.syssetting.context.SHRContext;
+import com.kingdee.shr.base.syssetting.exception.SHRWebException;
+import com.kingdee.shr.base.syssetting.exception.ShrWebBizException;
+import com.kingdee.util.DateTimeUtils;
+import org.apache.log4j.Logger;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * @Description 退宿申请单表单Handler
+ * @Date 2025/4/24 13:48
+ * @Created by Heyuan
+ */
+public class CheckoutApplicationEditHandler extends DormitoryApplicationEditHandler {
+    private static Logger logger = Logger.getLogger(CheckoutApplicationEditHandler.class);
+
+    /**
+     * 创建对象后置方法
+     *
+     * @param request
+     * @param response
+     * @param coreBaseInfo
+     * @throws SHRWebException
+     */
+    protected void afterCreateNewModel(
+            HttpServletRequest request,
+            HttpServletResponse response,
+            CoreBaseInfo coreBaseInfo
+    ) throws SHRWebException {
+        try {
+            Context ctx = SHRContext.getInstance().getContext();
+            CheckoutApplicationInfo checkoutApplicationInfo = (CheckoutApplicationInfo) coreBaseInfo;
+            HROrgUnitInfo hrOrgUnitInfo = new HROrgUnitInfo();
+            hrOrgUnitInfo.setId(BOSUuid.read("00000000-0000-0000-0000-000000000000CCE7AED4"));
+            checkoutApplicationInfo.setHrOrgUnit(hrOrgUnitInfo);
+//            checkoutApplicationInfo.setManagementNotes("本人愿意遵守以下条款:" +
+//                    "\n1、自觉遵守公司《宿舍管理制度》和员工宿舍区有关管理办法,不私自调换宿舍和床位。" +
+//                    "\n2、自觉维护宿舍公共区域的卫生,爱护公物,损坏公物自觉赔偿。 3、自觉遵守消防安全,节约用电用水。" +
+//                    "\n3、自觉遵守消防安全,节约用电用水。");
+            //分录
+            CheckoutApplicationEntryInfo entryInfo = new CheckoutApplicationEntryInfo();
+            entryInfo.setCheckoutDate(DateTimeUtils.parseDate("2199-12-31", "yyyy-MM-dd"));
+            checkoutApplicationInfo.getEntrys().add(entryInfo);
+        } catch (Exception e) {
+            logger.error(e);
+            throw new ShrWebBizException(e);
+        }
+    }
+}

+ 58 - 0
websrc/com/kingdee/eas/custom/dormitorysystem/application/handler/CheckoutApplicationListHandler.java

@@ -0,0 +1,58 @@
+package com.kingdee.eas.custom.dormitorysystem.application.handler;
+
+import com.kingdee.bos.Context;
+import com.kingdee.eas.framework.CoreBaseInfo;
+import com.kingdee.eas.hr.base.HRBillBaseInfo;
+import com.kingdee.shr.base.syssetting.IMSFServiceFacade;
+import com.kingdee.shr.base.syssetting.MSFServiceFacadeFactory;
+import com.kingdee.shr.base.syssetting.context.SHRContext;
+import com.kingdee.shr.base.syssetting.exception.SHRWebException;
+import com.kingdee.shr.base.syssetting.exception.ShrWebBizException;
+import org.apache.log4j.Logger;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description 退宿申请单列表Handler
+ * @Date 2025/4/24 13:47
+ * @Created by Heyuan
+ */
+public class CheckoutApplicationListHandler extends DormitoryApplicationListHandler {
+    private static Logger logger = Logger.getLogger(CheckoutApplicationListHandler.class);
+    private Context ctx = SHRContext.getInstance().getContext();
+
+    @Override
+    protected void beforeSubmit(
+            HttpServletRequest request,
+            HttpServletResponse response,
+            CoreBaseInfo model
+    ) throws SHRWebException {
+        super.beforeSubmit(request, response, model);
+        HRBillBaseInfo hrBillBaseInfo = (HRBillBaseInfo) model;
+        String billIds = hrBillBaseInfo.getId().toString();
+        Map result = null;
+        Map<String, String> params = new HashMap<String, String>();
+        params.put("billIds", billIds);
+        //校验入住申请单是否重复提交、校验入住信息时间交叉
+        try {
+            IMSFServiceFacade imsfServiceFacade = MSFServiceFacadeFactory.getLocalInstance(ctx);
+            result = (Map) imsfServiceFacade.processService("checkDuplicateCheckInByBillIdService", params);
+        } catch (Exception e) {
+            logger.error(e);
+            throw new ShrWebBizException("调用接口checkDuplicateCheckInByBillIdService报错: " + e.getMessage());
+        }
+        Integer code = (Integer) result.get("code");
+        if (500 == code) {
+            List<String> errorMsgList = (List<String>) result.get("errorMsg");
+            StringBuilder errorMsgBuilder = new StringBuilder();
+            for (String errorMsg : errorMsgList) {
+                errorMsgBuilder.append(errorMsg).append("\n");
+            }
+            throw new ShrWebBizException(errorMsgBuilder.toString());
+        }
+    }
+}

+ 100 - 0
websrc/com/kingdee/eas/custom/dormitorysystem/application/handler/CheckoutApplicationSelfEditHandler.java

@@ -0,0 +1,100 @@
+package com.kingdee.eas.custom.dormitorysystem.application.handler;
+
+import com.kingdee.bos.Context;
+import com.kingdee.bos.metadata.entity.*;
+import com.kingdee.bos.metadata.query.util.CompareType;
+import com.kingdee.bos.util.BOSUuid;
+import com.kingdee.eas.basedata.org.HROrgUnitInfo;
+import com.kingdee.eas.basedata.person.PersonInfo;
+import com.kingdee.eas.custom.dormitorysystem.application.CheckInApplicationEntryInfo;
+import com.kingdee.eas.custom.dormitorysystem.application.CheckInApplicationInfo;
+import com.kingdee.eas.custom.dormitorysystem.application.CheckoutApplicationEntryInfo;
+import com.kingdee.eas.custom.dormitorysystem.application.CheckoutApplicationInfo;
+import com.kingdee.eas.custom.dormitorysystem.occupants.IOccupants;
+import com.kingdee.eas.custom.dormitorysystem.occupants.OccupantsCollection;
+import com.kingdee.eas.custom.dormitorysystem.occupants.OccupantsFactory;
+import com.kingdee.eas.custom.dormitorysystem.occupants.OccupantsInfo;
+import com.kingdee.eas.framework.CoreBaseInfo;
+import com.kingdee.eas.hr.emp.PersonPositionFactory;
+import com.kingdee.eas.hr.emp.PersonPositionInfo;
+import com.kingdee.eas.util.app.ContextUtil;
+import com.kingdee.shr.base.syssetting.context.SHRContext;
+import com.kingdee.shr.base.syssetting.exception.SHRWebException;
+import com.kingdee.shr.base.syssetting.exception.ShrWebBizException;
+import com.kingdee.util.DateTimeUtils;
+import org.apache.log4j.Logger;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Date;
+
+/**
+ * @Description 入住申请单表单Handler(员工自助)
+ * @Date 2025/4/24 13:48
+ * @Created by Heyuan
+ */
+public class CheckoutApplicationSelfEditHandler extends DormitoryApplicationEditHandler {
+    private static Logger logger = Logger.getLogger(CheckoutApplicationSelfEditHandler.class);
+
+
+    /**
+     * 创建对象后置方法
+     *
+     * @param request
+     * @param response
+     * @param coreBaseInfo
+     * @throws SHRWebException
+     */
+    protected void afterCreateNewModel(
+            HttpServletRequest request,
+            HttpServletResponse response,
+            CoreBaseInfo coreBaseInfo
+    ) throws SHRWebException {
+        OccupantsCollection occupantsCollection = null;
+        Context ctx = SHRContext.getInstance().getContext();
+        PersonInfo person = ContextUtil.getCurrentUserInfo(ctx).getPerson();
+        try {
+            IOccupants iOccupants = OccupantsFactory.getLocalInstance(ctx);
+            FilterInfo filterInfo = new FilterInfo();
+            FilterItemCollection filterItems = filterInfo.getFilterItems();
+            Date date = new Date();
+            //人员
+            filterItems.add(new FilterItemInfo("person", person.getId()));
+            //
+            filterItems.add(new FilterItemInfo("CheckInDate", date, CompareType.LESS_EQUALS));
+            filterItems.add(new FilterItemInfo("CheckOutDate", date, CompareType.GREATER));
+            SelectorItemCollection sic = new SelectorItemCollection();
+            //sic.add("personPosition。pe")
+            EntityViewInfo viewInfo = EntityViewInfo.getInstance(filterInfo, sic, null);
+            occupantsCollection = iOccupants.getOccupantsCollection(viewInfo);
+        } catch (Exception e) {
+            logger.error(e);
+            throw new ShrWebBizException(e);
+        }
+        if (occupantsCollection.size() > 0) {
+            CheckoutApplicationInfo checkoutApplicationInfo = (CheckoutApplicationInfo) coreBaseInfo;
+            HROrgUnitInfo hrOrgUnitInfo = new HROrgUnitInfo();
+            hrOrgUnitInfo.setId(BOSUuid.read("00000000-0000-0000-0000-000000000000CCE7AED4"));
+            checkoutApplicationInfo.setHrOrgUnit(hrOrgUnitInfo);
+//            checkoutApplicationInfo.setManagementNotes("本人愿意遵守以下条款:" +
+//                    "\n1、自觉遵守公司《宿舍管理制度》和员工宿舍区有关管理办法,不私自调换宿舍和床位。" +
+//                    "\n2、自觉维护宿舍公共区域的卫生,爱护公物,损坏公物自觉赔偿。 3、自觉遵守消防安全,节约用电用水。" +
+//                    "\n3、自觉遵守消防安全,节约用电用水。");
+            //分录
+            CheckoutApplicationEntryInfo entryInfo = new CheckoutApplicationEntryInfo();
+            OccupantsInfo occupantsInfo = occupantsCollection.get(0);
+            entryInfo.setOccupants(occupantsInfo);
+            entryInfo.setPerson(person);
+            PersonPositionInfo personPosition = occupantsInfo.getPersonPosition();
+            entryInfo.setAdminOrg(personPosition.getPersonDep());
+            entryInfo.setPosition(personPosition.getPrimaryPosition());
+            //原退宿日期
+            entryInfo.setOldCheckoutDate(occupantsInfo.getCheckOutDate());
+            entryInfo.setCurrentRoom(occupantsInfo.getDormitory());
+            entryInfo.setCheckInDate(occupantsInfo.getCheckInDate());
+            checkoutApplicationInfo.getEntrys().add(entryInfo);
+        } else {
+            throw new ShrWebBizException("未找到当前最新的入住信息!");
+        }
+    }
+}

+ 122 - 3
websrc/com/kingdee/eas/custom/dormitorysystem/application/handler/DormitoryApplicationEditHandler.java

@@ -1,15 +1,33 @@
 package com.kingdee.eas.custom.dormitorysystem.application.handler;
 
+import com.kingdee.bos.BOSException;
+import com.kingdee.bos.Context;
+import com.kingdee.bos.ctrl.swing.StringUtils;
+import com.kingdee.bos.dao.IObjectPK;
 import com.kingdee.bos.util.BOSUuid;
 import com.kingdee.eas.basedata.org.HROrgUnitInfo;
-import com.kingdee.eas.custom.managedormsys.application.CheckInApplicationInfo;
+import com.kingdee.eas.common.EASBizException;
 import com.kingdee.eas.framework.CoreBaseInfo;
+import com.kingdee.eas.hr.base.ApproveTypeEnum;
+import com.kingdee.eas.hr.base.HRBillBaseInfo;
+import com.kingdee.eas.hr.base.IHRBillBase;
+import com.kingdee.eas.hr.emp.PersonPositionFactory;
+import com.kingdee.eas.hr.emp.PersonPositionInfo;
+import com.kingdee.shr.base.syssetting.IMSFServiceFacade;
+import com.kingdee.shr.base.syssetting.MSFServiceFacadeFactory;
+import com.kingdee.shr.base.syssetting.context.SHRContext;
 import com.kingdee.shr.base.syssetting.exception.SHRWebException;
+import com.kingdee.shr.base.syssetting.exception.ShrWebBizException;
 import com.kingdee.shr.base.syssetting.web.handler.EditHandler;
+import com.kingdee.shr.base.syssetting.web.json.JSONUtils;
 import org.apache.log4j.Logger;
+import org.springframework.ui.ModelMap;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
  * @Description 申请单通用Handler
@@ -18,6 +36,8 @@ import javax.servlet.http.HttpServletResponse;
  */
 public class DormitoryApplicationEditHandler extends EditHandler {
     private static Logger logger = Logger.getLogger(DormitoryApplicationEditHandler.class);
+    private Context ctx = SHRContext.getInstance().getContext();
+
 
     /**
      * 设置HR组织
@@ -33,9 +53,108 @@ public class DormitoryApplicationEditHandler extends EditHandler {
             CoreBaseInfo model
     ) throws SHRWebException {
         super.beforeSave(request, response, model);
-        CheckInApplicationInfo checkInApplicationInfo = (CheckInApplicationInfo) model;
+        HRBillBaseInfo hrBillBaseInfo = (HRBillBaseInfo) model;
         HROrgUnitInfo hrOrgUnitInfo = new HROrgUnitInfo();
         hrOrgUnitInfo.setId(BOSUuid.read("00000000-0000-0000-0000-000000000000CCE7AED4"));
-        checkInApplicationInfo.setHrOrgUnit(hrOrgUnitInfo);
+        hrBillBaseInfo.setHrOrgUnit(hrOrgUnitInfo);
+    }
+
+
+    @Override
+    protected void beforeSubmit(
+            HttpServletRequest request,
+            HttpServletResponse response,
+            CoreBaseInfo model
+    ) throws SHRWebException {
+        HRBillBaseInfo hrBillBaseInfo = (HRBillBaseInfo) model;
+        String billIds = hrBillBaseInfo.getId().toString();
+        Map result = null;
+        Map<String, String> params = new HashMap<String, String>();
+        params.put("billIds", billIds);
+        try {
+            IMSFServiceFacade imsfServiceFacade = MSFServiceFacadeFactory.getLocalInstance(ctx);
+            result = (Map) imsfServiceFacade.processService("validateRoomAvailableByBillIdsService", params);
+        } catch (Exception e) {
+            logger.error(e);
+            throw new ShrWebBizException("调用接口validateRoomAvailableByBillIdsService报错: " + e.getMessage());
+        }
+        Integer code = (Integer) result.get("code");
+        if (500 == code) {
+            List<String> errorMsgList = (List<String>) result.get("errorMsg");
+            StringBuilder errorMsgBuilder = new StringBuilder();
+            for (String errorMsg : errorMsgList) {
+                errorMsgBuilder.append(errorMsg).append("\n");
+            }
+            throw new ShrWebBizException(errorMsgBuilder.toString());
+        }
+        //设置单据状态为未审批
+        model.setInt("billState", 1);
+        super.beforeSubmit(request, response, model);
+    }
+
+    /**
+     * 提交生效
+     *
+     * @param request
+     * @param response
+     * @param modelMap
+     * @throws SHRWebException
+     */
+    public void submitEffectAction(
+            HttpServletRequest request,
+            HttpServletResponse response,
+            ModelMap modelMap
+    ) throws SHRWebException {
+        CoreBaseInfo model = (CoreBaseInfo) request.getAttribute("dynamic_model");
+        this.beforeSave(request, response, model);
+        HRBillBaseInfo hrBillBaseInfo = (HRBillBaseInfo) model;
+        hrBillBaseInfo.setApproveType(ApproveTypeEnum.DIRECT);
+        try {
+            IHRBillBase ihrBillBase = (IHRBillBase) this.getBizInterface();
+            IObjectPK objectPK = ihrBillBase.submitEffect(model);
+            model.setId(BOSUuid.read(objectPK.toString()));
+        } catch (EASBizException var8) {
+            logger.error(var8);
+            throw new ShrWebBizException(var8.getMessage(), var8);
+        } catch (BOSException var9) {
+            logger.error(var9);
+            throw new ShrWebBizException(var9.getMessage(), var9);
+        } catch (Exception var10) {
+            logger.error(var10);
+            throw new ShrWebBizException(var10);
+        }
+        this.afterSave(request, response, model);
+        this.saveAttachment(request, response, model);
+        //this.reverseAttachment(request, response, model);
+        this.writeSuccessData(model.getId().toString());
+    }
+
+    /**
+     * 根据人员id获取组织职位信息
+     *
+     * @param request
+     * @param response
+     * @param modelMap
+     * @throws SHRWebException
+     */
+    public void getOrgPositionByPersonIdAction(
+            HttpServletRequest request,
+            HttpServletResponse response,
+            ModelMap modelMap
+    ) throws SHRWebException {
+        String personId = request.getParameter("personId");
+        if (StringUtils.isEmpty(personId)) {
+            throw new ShrWebBizException("人员id不能为空!");
+        }
+        try {
+            Map result = new HashMap();
+            PersonPositionInfo pp = PersonPositionFactory.getLocalInstance(ctx).getPersonPositionInfo(
+                    "select personDep.*,primaryPosition.* where person = '" + personId + "'");
+            result.put("orgUnit", pp.getPersonDep());
+            result.put("position", pp.getPrimaryPosition());
+            JSONUtils.SUCCESS(result);
+        } catch (Exception e) {
+            throw new ShrWebBizException("获取员工任职信息报错: " + e.getMessage());
+        }
     }
 }

+ 60 - 0
websrc/com/kingdee/eas/custom/dormitorysystem/application/handler/DormitoryApplicationListHandler.java

@@ -1,13 +1,24 @@
 package com.kingdee.eas.custom.dormitorysystem.application.handler;
 
 import com.kingdee.bos.BOSException;
+import com.kingdee.bos.Context;
+import com.kingdee.eas.common.EASBizException;
+import com.kingdee.eas.framework.CoreBaseInfo;
+import com.kingdee.eas.hr.base.HRBillBaseInfo;
+import com.kingdee.shr.base.syssetting.IMSFServiceFacade;
+import com.kingdee.shr.base.syssetting.MSFServiceFacadeFactory;
+import com.kingdee.shr.base.syssetting.context.SHRContext;
 import com.kingdee.shr.base.syssetting.exception.SHRWebException;
+import com.kingdee.shr.base.syssetting.exception.ShrWebBizException;
 import com.kingdee.shr.base.syssetting.web.handler.ListHandler;
 import org.apache.log4j.Logger;
 import org.springframework.ui.ModelMap;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
  * @Description 申请单通用Handler
@@ -16,6 +27,37 @@ import javax.servlet.http.HttpServletResponse;
  */
 public class DormitoryApplicationListHandler extends ListHandler {
     private static Logger logger = Logger.getLogger(DormitoryApplicationListHandler.class);
+    private Context ctx = SHRContext.getInstance().getContext();
+
+    @Override
+    protected void beforeSubmit(
+            HttpServletRequest request,
+            HttpServletResponse response,
+            CoreBaseInfo model
+    ) throws SHRWebException {
+        HRBillBaseInfo hrBillBaseInfo = (HRBillBaseInfo) model;
+        String billIds = hrBillBaseInfo.getId().toString();
+        Map result = null;
+        Map<String, String> params = new HashMap<String, String>();
+        params.put("billIds", billIds);
+        try {
+            IMSFServiceFacade imsfServiceFacade = MSFServiceFacadeFactory.getLocalInstance(ctx);
+            result = (Map) imsfServiceFacade.processService("validateRoomAvailableByBillIdsService", params);
+        } catch (Exception e) {
+            logger.error(e);
+            throw new ShrWebBizException("调用接口validateRoomAvailableByBillIdsService报错: " + e.getMessage());
+        }
+        Integer code = (Integer) result.get("code");
+        if (500 == code) {
+            List<String> errorMsgList = (List<String>) result.get("errorMsg");
+            StringBuilder errorMsgBuilder = new StringBuilder();
+            for (String errorMsg : errorMsgList) {
+                errorMsgBuilder.append(errorMsg).append("\n");
+            }
+            throw new ShrWebBizException(errorMsgBuilder.toString());
+        }
+        super.beforeSubmit(request, response, model);
+    }
 
     /**
      * 提交生效批量
@@ -51,4 +93,22 @@ public class DormitoryApplicationListHandler extends ListHandler {
     ) throws SHRWebException, BOSException {
         this.handleEnableWithTips(request, "untiCheckBizBill");
     }
+
+    /**
+     * 撤回
+     *
+     * @param request
+     * @param response
+     * @param modelMap
+     * @throws SHRWebException
+     * @throws EASBizException
+     * @throws BOSException
+     */
+    public void abortBizBillAction(
+            HttpServletRequest request,
+            HttpServletResponse response,
+            ModelMap modelMap
+    ) throws SHRWebException {
+        this.handleEnableWithTips(request, "abortBizBill");
+    }
 }

+ 14 - 14
websrc/com/kingdee/eas/custom/dormitorysystem/application/service/CheckAgainstByCheckInBillIdsService.java

@@ -11,20 +11,20 @@ import com.kingdee.bos.util.BOSUuid;
 import com.kingdee.eas.basedata.person.Genders;
 import com.kingdee.eas.basedata.person.PersonInfo;
 import com.kingdee.eas.common.EASBizException;
-import com.kingdee.eas.custom.managedormsys.application.CheckInApplicationEntryCollection;
-import com.kingdee.eas.custom.managedormsys.application.CheckInApplicationEntryFactory;
-import com.kingdee.eas.custom.managedormsys.application.CheckInApplicationEntryInfo;
-import com.kingdee.eas.custom.managedormsys.application.ICheckInApplicationEntry;
-import com.kingdee.eas.custom.managedormsys.dormitory.DormitoryFactory;
-import com.kingdee.eas.custom.managedormsys.dormitory.DormitoryInfo;
-import com.kingdee.eas.custom.managedormsys.dormitory.IDormitory;
-import com.kingdee.eas.custom.managedormsys.enumerationset.DormitoryClassification;
-import com.kingdee.eas.custom.managedormsys.occupants.IOccupants;
-import com.kingdee.eas.custom.managedormsys.occupants.OccupantsCollection;
-import com.kingdee.eas.custom.managedormsys.occupants.OccupantsFactory;
-import com.kingdee.eas.custom.managedormsys.occupants.OccupantsInfo;
-import com.kingdee.eas.custom.managedormsys.otherbasicdata.DormitoryTypeInfo;
-import com.kingdee.eas.custom.managedormsys.otherbasicdata.PersonDormitoryTypeInfo;
+import com.kingdee.eas.custom.dormitorysystem.application.CheckInApplicationEntryCollection;
+import com.kingdee.eas.custom.dormitorysystem.application.CheckInApplicationEntryFactory;
+import com.kingdee.eas.custom.dormitorysystem.application.CheckInApplicationEntryInfo;
+import com.kingdee.eas.custom.dormitorysystem.application.ICheckInApplicationEntry;
+import com.kingdee.eas.custom.dormitorysystem.dormitory.DormitoryFactory;
+import com.kingdee.eas.custom.dormitorysystem.dormitory.DormitoryInfo;
+import com.kingdee.eas.custom.dormitorysystem.dormitory.IDormitory;
+import com.kingdee.eas.custom.dormitorysystem.enumerationset.DormitoryClassification;
+import com.kingdee.eas.custom.dormitorysystem.occupants.IOccupants;
+import com.kingdee.eas.custom.dormitorysystem.occupants.OccupantsCollection;
+import com.kingdee.eas.custom.dormitorysystem.occupants.OccupantsFactory;
+import com.kingdee.eas.custom.dormitorysystem.occupants.OccupantsInfo;
+import com.kingdee.eas.custom.dormitorysystem.otherbasicdata.DormitoryTypeInfo;
+import com.kingdee.eas.custom.dormitorysystem.otherbasicdata.PersonDormitoryTypeInfo;
 import com.kingdee.eas.framework.CoreBillBaseCollection;
 import com.kingdee.eas.framework.ICoreBillBase;
 import com.kingdee.eas.hr.ats.AtsUtil;

+ 244 - 0
websrc/com/kingdee/eas/custom/dormitorysystem/application/service/CheckDuplicateCheckInByBillIdService.java

@@ -0,0 +1,244 @@
+package com.kingdee.eas.custom.dormitorysystem.application.service;
+
+import com.kingdee.bos.BOSException;
+import com.kingdee.bos.BOSObjectFactory;
+import com.kingdee.bos.Context;
+import com.kingdee.bos.bsf.service.app.IHRMsfService;
+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.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.occupants.IOccupants;
+import com.kingdee.eas.custom.dormitorysystem.occupants.OccupantsCollection;
+import com.kingdee.eas.custom.dormitorysystem.occupants.OccupantsFactory;
+import com.kingdee.eas.framework.CoreBillBaseCollection;
+import com.kingdee.eas.framework.ICoreBillBase;
+import com.kingdee.eas.hr.ats.AtsUtil;
+import com.kingdee.eas.hr.base.HRBillBaseEntryInfo;
+import com.kingdee.eas.hr.base.HRBillBaseInfo;
+import com.kingdee.util.StringUtils;
+import org.apache.log4j.Logger;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * @Description 检查入住申请单是否重复、入住信息是否重复
+ * @Date 2025/4/29 17:03
+ * @Created by Heyuan
+ */
+public class CheckDuplicateCheckInByBillIdService implements IHRMsfService {
+    private static Logger logger = Logger.getLogger(CheckDuplicateCheckInByBillIdService.class);
+
+    @Override
+    public Object process(
+            Context ctx,
+            Map<String, Object> params
+    ) throws EASBizException, BOSException {
+        String billIds = (String) params.get("billIds");
+        if (StringUtils.isEmpty(billIds)) {
+            logger.error("单据id不能为空!");
+            throw new BOSException("单据id不能为空!");
+        }
+        Map<String, List<Map<String, Date>>> roomListMap = new HashMap<>();
+        List<String> errorMsgList = new ArrayList<>();
+        ICoreBillBase iCoreBillBase = (ICoreBillBase) BOSObjectFactory.createBOSObject(ctx,
+                BOSUuid.read(billIds.split(",")[0]).getType());
+        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.*");
+        FilterInfo filterInfo = new FilterInfo();
+        FilterItemCollection filterItems = filterInfo.getFilterItems();
+        //房间
+        filterItems.add(new FilterItemInfo("id", AtsUtil.toSet(billIds), CompareType.INCLUDE));
+        EntityViewInfo viewInfo = EntityViewInfo.getInstance(filterInfo, sic, null);
+        CoreBillBaseCollection hrBillBaseCollection = iCoreBillBase.getCoreBillBaseCollection(viewInfo);
+        for (int i = 0; i < hrBillBaseCollection.size(); i++) {
+            HRBillBaseInfo hrBillBaseInfo = (HRBillBaseInfo) hrBillBaseCollection.get(i);
+            String baseInfoNumber = hrBillBaseInfo.getNumber();
+            //分录
+            AbstractObjectCollection entrys = (AbstractObjectCollection) hrBillBaseInfo.get("entrys");
+            for (int j = 0; j < entrys.size(); j++) {
+                try {
+                    HRBillBaseEntryInfo entryInfo = (HRBillBaseEntryInfo) entrys.getObject(j);
+                    //入住日期
+                    Date checkInDate = entryInfo.getDate("checkInDate");
+                    if (checkInDate == null) {
+                        throw new BOSException("入住日期不能为空!");
+                    }
+                    //退宿日期
+                    Date checkoutDate = entryInfo.getDate("checkoutDate");
+                    if (checkoutDate == null) {
+                        throw new BOSException("退宿日期不能为空!");
+                    }
+                    //人员
+                    PersonInfo personInfo = (PersonInfo) entryInfo.getObjectValue("person");
+                    if (personInfo == null) {
+                        throw new BOSException("人员不能为空!");
+                    }
+                    //1.根据人员、入住日期、退宿日期检查入住申请单是否重复
+                    checkDuplicateCheckIn(ctx, personInfo, checkInDate, checkoutDate, entryInfo);
+                    //2.根据人员、入住日期、退宿日期检查入住人员信息是否重复
+                    checkDuplicateOccupants(ctx, personInfo, checkInDate, checkoutDate);
+                    //3.根据人员、入住日期、退宿日期检查换宿单是否重复
+                    checkDuplicateRoomChange(ctx, personInfo, checkInDate, checkoutDate);
+                } catch (Exception e) {
+                    logger.error("单据编号为" + baseInfoNumber + "校验未通过: " + e.getMessage());
+                    errorMsgList.add("单据编号为" + baseInfoNumber + "校验未通过: " + e.getMessage());
+                }
+            }
+        }
+        Map result = new HashMap();
+        if (errorMsgList.size() > 0) {
+            result.put("code", 500);
+            result.put("errorMsg", errorMsgList);
+        } else {
+            result.put("code", 200);
+        }
+        return result;
+    }
+
+    /**
+     * 根据人员、入住日期、退宿日期检查换宿单是否重复
+     *
+     * @param ctx
+     * @param personInfo
+     * @param checkInDate
+     * @param checkoutDate
+     */
+    protected void checkDuplicateRoomChange(
+            Context ctx,
+            PersonInfo personInfo,
+            Date checkInDate,
+            Date checkoutDate
+    ) throws BOSException {
+        String personInfoName = personInfo.getName();
+        IRoomChangeApplicationEntry iRoomChangeApplicationEntry = RoomChangeApplicationEntryFactory.getLocalInstance(ctx);
+        FilterInfo filterInfo = new FilterInfo();
+        FilterItemCollection filterItems = filterInfo.getFilterItems();
+        //人员
+        filterItems.add(new FilterItemInfo("person", personInfo.getId()));
+        //申请入住日期在入住日期和退宿日期之间
+        filterItems.add(new FilterItemInfo("checkInDate", checkInDate, CompareType.LESS_EQUALS));
+        filterItems.add(new FilterItemInfo("checkoutDate", checkInDate, CompareType.GREATER_EQUALS));
+        //入住日期在申请入住日期和申请退宿日期之间
+        filterItems.add(new FilterItemInfo("checkInDate", checkInDate, CompareType.GREATER_EQUALS));
+        filterItems.add(new FilterItemInfo("checkInDate", checkoutDate, CompareType.LESS_EQUALS));
+        filterInfo.setMaskString("#0 and ((#1 and #2) or (#3 and #4))");
+        SelectorItemCollection sic = new SelectorItemCollection();
+        sic.add("parent.number");
+        EntityViewInfo viewInfo = EntityViewInfo.getInstance(filterInfo, sic, null);
+        RoomChangeApplicationEntryCollection entryCollection = iRoomChangeApplicationEntry.getRoomChangeApplicationEntryCollection(viewInfo);
+        StringBuilder errorMsg = new StringBuilder();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        for (int i = 0; i < entryCollection.size(); i++) {
+            RoomChangeApplicationEntryInfo roomChangeApplicationEntryInfo = entryCollection.get(i);
+            RoomChangeApplicationInfo parent = roomChangeApplicationEntryInfo.getParent();
+            String number = parent.getNumber();
+            errorMsg.append("员工[" + personInfoName + "]在[" + sdf.format(checkInDate) + "] ~ [" + sdf.format(checkoutDate) + "]期间与换宿申请单[" + number + "]日期存在交叉\n");
+        }
+        if (errorMsg.length() > 0) {
+            throw new BOSException(errorMsg.toString());
+        }
+    }
+
+
+    /**
+     * 根据人员、入住日期、退宿日期检查入住人员信息是否重复
+     *
+     * @param ctx
+     * @param personInfo   人员
+     * @param checkInDate  入住日期
+     * @param checkoutDate 退宿日期
+     * @throws BOSException
+     */
+    protected void checkDuplicateOccupants(
+            Context ctx,
+            PersonInfo personInfo,
+            Date checkInDate,
+            Date checkoutDate
+    ) throws BOSException {
+        String personInfoName = personInfo.getName();
+        IOccupants iOccupants = OccupantsFactory.getLocalInstance(ctx);
+        FilterInfo filterInfo = new FilterInfo();
+        FilterItemCollection filterItems = filterInfo.getFilterItems();
+        //人员
+        filterItems.add(new FilterItemInfo("person", personInfo.getId()));
+        //申请入住日期在入住日期和退宿日期之间
+        filterItems.add(new FilterItemInfo("CheckInDate", checkInDate, CompareType.LESS_EQUALS));
+        filterItems.add(new FilterItemInfo("CheckOutDate", checkInDate, CompareType.GREATER_EQUALS));
+        //入住日期在申请入住日期和申请退宿日期之间
+        filterItems.add(new FilterItemInfo("CheckInDate", checkInDate, CompareType.GREATER_EQUALS));
+        filterItems.add(new FilterItemInfo("CheckInDate", checkoutDate, CompareType.LESS_EQUALS));
+        filterInfo.setMaskString("#0 and ((#1 and #2) or (#3 and #4))");
+        SelectorItemCollection sic = new SelectorItemCollection();
+        sic.add("parent.number");
+        EntityViewInfo viewInfo = EntityViewInfo.getInstance(filterInfo, sic, null);
+        OccupantsCollection occupantsCollection = iOccupants.getOccupantsCollection(viewInfo);
+        StringBuilder errorMsg = new StringBuilder();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        if (occupantsCollection.size() > 0) {
+            errorMsg.append("员工[" + personInfoName + "]在[" + sdf.format(checkInDate) + "] ~ [" + sdf.format(checkoutDate) + "]期间与入住信息数据存在日期交叉\n");
+            throw new BOSException(errorMsg.toString());
+        }
+    }
+
+    /**
+     * 根据人员、入住日期、退宿日期检查单据状态为已提交、审批中或审批通过的入住申请单是否重复
+     *
+     * @param ctx
+     * @param personInfo   人员
+     * @param checkInDate  入住日期
+     * @param checkoutDate 退宿日期
+     * @throws BOSException
+     * @throws EASBizException
+     */
+    protected void checkDuplicateCheckIn(
+            Context ctx,
+            PersonInfo personInfo,
+            Date checkInDate,
+            Date checkoutDate,
+            HRBillBaseEntryInfo entryInfo
+    ) throws BOSException {
+        String personInfoName = personInfo.getName();
+        String entryId = entryInfo.getId().toString();
+        ICheckInApplicationEntry iCheckInApplicationEntry = CheckInApplicationEntryFactory.getLocalInstance(ctx);
+        FilterInfo filterInfo = new FilterInfo();
+        FilterItemCollection filterItems = filterInfo.getFilterItems();
+        //单据状态等于已提交、审批中或审批通过
+        filterItems.add(new FilterItemInfo("parent.billState", "1,2,3", CompareType.INCLUDE));
+        //申请入住日期在入住日期和退宿日期之间
+        filterItems.add(new FilterItemInfo("checkInDate", checkInDate, CompareType.LESS_EQUALS));
+        filterItems.add(new FilterItemInfo("checkoutDate", checkInDate, CompareType.GREATER_EQUALS));
+        //入住日期在申请入住日期和申请退宿日期之间
+        filterItems.add(new FilterItemInfo("checkInDate", checkInDate, CompareType.GREATER_EQUALS));
+        filterItems.add(new FilterItemInfo("checkInDate", checkoutDate, CompareType.LESS_EQUALS));
+        //人员
+        filterItems.add(new FilterItemInfo("person", personInfo.getId()));
+        //不等于当前分录数据
+        filterItems.add(new FilterItemInfo("id", entryId, CompareType.NOTEQUALS));
+        filterInfo.setMaskString("#0 and ((#1 and #2) or (#3 and #4)) and #5 and #6");
+        SelectorItemCollection sic = new SelectorItemCollection();
+        sic.add("parent.number");
+        EntityViewInfo viewInfo = EntityViewInfo.getInstance(filterInfo, sic, null);
+        CheckInApplicationEntryCollection entryCollection = iCheckInApplicationEntry.getCheckInApplicationEntryCollection(viewInfo);
+        StringBuilder errorMsg = new StringBuilder();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        for (int i = 0; i < entryCollection.size(); i++) {
+            CheckInApplicationEntryInfo checkInApplicationEntryInfo = entryCollection.get(i);
+            CheckInApplicationInfo parent = checkInApplicationEntryInfo.getParent();
+            String number = parent.getNumber();
+            errorMsg.append("员工[" + personInfoName + "]在[" + sdf.format(checkInDate) + "] ~ [" + sdf.format(checkoutDate) + "]期间与入住申请单[" + number + "]日期存在交叉\n");
+        }
+        if (errorMsg.length() > 0) {
+            throw new BOSException(errorMsg.toString());
+        }
+    }
+}

+ 125 - 0
websrc/com/kingdee/eas/custom/dormitorysystem/application/service/CheckInApplicationImportService.java

@@ -0,0 +1,125 @@
+package com.kingdee.eas.custom.dormitorysystem.application.service;
+
+import com.kingdee.bos.BOSException;
+import com.kingdee.bos.Context;
+import com.kingdee.bos.dao.IObjectPK;
+import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
+import com.kingdee.bos.metadata.MetaDataLoaderFactory;
+import com.kingdee.bos.metadata.MetaDataPK;
+import com.kingdee.bos.metadata.entity.EntityObjectInfo;
+import com.kingdee.bos.metadata.entity.FilterInfo;
+import com.kingdee.bos.metadata.entity.FilterItemInfo;
+import com.kingdee.bos.metadata.entity.PropertyInfo;
+import com.kingdee.bos.metadata.query.util.CompareType;
+import com.kingdee.bos.sql.ParserException;
+import com.kingdee.bos.util.BOSUuid;
+import com.kingdee.eas.basedata.org.HROrgUnitInfo;
+import com.kingdee.eas.common.EASBizException;
+import com.kingdee.eas.custom.dormitorysystem.application.CheckInApplicationEntryInfo;
+import com.kingdee.eas.custom.dormitorysystem.application.CheckInApplicationFactory;
+import com.kingdee.eas.custom.dormitorysystem.application.CheckInApplicationInfo;
+import com.kingdee.eas.custom.dormitorysystem.application.ICheckInApplication;
+import com.kingdee.eas.custom.dormitorysystem.dormitory.DormitoryCollection;
+import com.kingdee.eas.custom.dormitorysystem.dormitory.DormitoryFactory;
+import com.kingdee.eas.custom.dormitorysystem.dormitory.DormitoryInfo;
+import com.kingdee.eas.custom.dormitorysystem.dormitory.IDormitory;
+import com.kingdee.eas.custom.dormitorysystem.enumerationset.DormitoryClassification;
+import com.kingdee.eas.custom.dormitorysystem.waterpower.WaterPowerMeterReadingInfo;
+import com.kingdee.eas.custom.dormitorysystem.waterpower.utils.WaterPowerUtil;
+import com.kingdee.eas.framework.CoreBaseInfo;
+import com.kingdee.eas.hr.base.HRBillStateEnum;
+import com.kingdee.eas.hr.emp.PersonPositionFactory;
+import com.kingdee.eas.hr.emp.PersonPositionInfo;
+import com.kingdee.shr.ats.web.util.NumberCodeRule;
+import com.kingdee.shr.base.syssetting.api.bean.BaseItemParam;
+import com.kingdee.shr.base.syssetting.api.service.SHRBaseItemApi;
+import com.kingdee.shr.base.syssetting.app.io.fileImport.BaseColumnInfo;
+import com.kingdee.shr.base.syssetting.app.io.fileImport.BaseImportService;
+import com.kingdee.shr.base.syssetting.app.io.fileImport.BaseRowInfo;
+import com.kingdee.shr.base.syssetting.app.io.fileImport.ImportException;
+import com.kingdee.shr.ml.util.SHRServerResource;
+import com.kingdee.util.DateTimeUtils;
+import com.kingdee.util.StringUtils;
+import org.apache.log4j.Logger;
+
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description 入住申请单导入实现类
+ * @Date 2025/4/24 13:48
+ * @Created by Heyuan
+ */
+public class CheckInApplicationImportService extends BaseImportService {
+    Logger logger = Logger.getLogger(this.getClass());
+
+    @Override
+    protected FilterInfo getDefaultFilterByEntityInfo(String entityName, BaseColumnInfo columnInfo) {
+        FilterInfo defaultFilterByEntityInfo = super.getDefaultFilterByEntityInfo(entityName, columnInfo);
+        if ("com.kingdee.eas.custom.dormitorysystem.dormitory.app.Dormitory".equals(entityName)) {
+            //房间
+            FilterInfo filter = new FilterInfo();
+            filter.getFilterItems().add(new FilterItemInfo("RoomClassification", "3"));
+            return filter;
+        }
+        return defaultFilterByEntityInfo;
+    }
+
+    protected void verifyRowBiz(CoreBaseInfo coreBaseInfo) throws ImportException {
+        DormitoryInfo dormitoryInfo = null;
+        try {
+            Context ctx = this.getContext();
+            CheckInApplicationEntryInfo entryInfo = (CheckInApplicationEntryInfo) coreBaseInfo;
+            DormitoryInfo checkInRoom = entryInfo.getCheckInRoom();
+            String dormitoryId = checkInRoom.getId().toString();
+            IDormitory iDormitory = DormitoryFactory.getLocalInstance(ctx);
+            dormitoryInfo = iDormitory.getDormitoryInfo(new ObjectUuidPK(dormitoryId));
+        } catch (Exception e) {
+            throw new ImportException(e);
+        }
+        DormitoryClassification roomClassification = dormitoryInfo.getRoomClassification();
+        if (!DormitoryClassification.ROOM.equals(roomClassification)) {
+            throw new ImportException("当前入住房间为" + roomClassification.getAlias() + ",入住房间必须是房间类型!");
+        }
+    }
+
+    protected void submitData(CoreBaseInfo coreBaseInfo) throws ImportException {
+        Context ctx = this.getContext();
+        try {
+            CheckInApplicationInfo checkInApplicationInfo = new CheckInApplicationInfo();
+            checkInApplicationInfo.setBillState(HRBillStateEnum.SAVED);
+            HROrgUnitInfo hrOrgUnitInfo = new HROrgUnitInfo();
+            hrOrgUnitInfo.setId(BOSUuid.read("00000000-0000-0000-0000-000000000000CCE7AED4"));
+            checkInApplicationInfo.setHrOrgUnit(hrOrgUnitInfo);
+            checkInApplicationInfo.setManagementNotes("本人愿意遵守以下条款:" +
+                    "\n1、自觉遵守公司《宿舍管理制度》和员工宿舍区有关管理办法,不私自调换宿舍和床位。" +
+                    "\n2、自觉维护宿舍公共区域的卫生,爱护公物,损坏公物自觉赔偿。 3、自觉遵守消防安全,节约用电用水。" +
+                    "\n3、自觉遵守消防安全,节约用电用水。");
+            //分录
+            CheckInApplicationEntryInfo entryInfo = (CheckInApplicationEntryInfo) coreBaseInfo;
+            Date checkoutDate = entryInfo.getCheckoutDate();
+            if (checkoutDate == null) {
+                entryInfo.setCheckoutDate(DateTimeUtils.parseDate("2199-12-31", "yyyy-MM-dd"));
+            }
+            String personId = entryInfo.getPerson().getId().toString();
+            PersonPositionInfo pp = PersonPositionFactory.getLocalInstance(ctx).getPersonPositionInfo("select personDep.*,primaryPosition.* where person = '" + personId + "'");
+            entryInfo.setAdminOrg(pp.getPersonDep());
+            entryInfo.setPosition(pp.getPrimaryPosition());
+            checkInApplicationInfo.getEntrys().add(entryInfo);
+            CheckInApplicationFactory.getLocalInstance(ctx).save(checkInApplicationInfo);
+        } catch (EASBizException e) {
+            ImportException importException = new ImportException(e.getMessage(ctx.getLocale()), e);
+            throw importException;
+        } catch (BOSException e) {
+            ImportException importException = new ImportException(SHRServerResource.getString("com.kingdee.shr.base.syssetting.CommonserviceResource", "save_fails_bos", ctx), e);
+            throw importException;
+        } catch (Exception e) {
+            ImportException importException = new ImportException(SHRServerResource.getString("com.kingdee.shr.base.syssetting.CommonserviceResource", "save_submit_fails", ctx), e);
+            throw importException;
+        }
+    }
+}

+ 13 - 13
websrc/com/kingdee/eas/custom/dormitorysystem/application/service/GetOptionalRoomIdsService.java

@@ -11,19 +11,19 @@ import com.kingdee.eas.basedata.person.IPerson;
 import com.kingdee.eas.basedata.person.PersonFactory;
 import com.kingdee.eas.basedata.person.PersonInfo;
 import com.kingdee.eas.common.EASBizException;
-import com.kingdee.eas.custom.managedormsys.application.CheckInApplicationEntryCollection;
-import com.kingdee.eas.custom.managedormsys.application.CheckInApplicationEntryFactory;
-import com.kingdee.eas.custom.managedormsys.application.CheckInApplicationEntryInfo;
-import com.kingdee.eas.custom.managedormsys.application.ICheckInApplicationEntry;
-import com.kingdee.eas.custom.managedormsys.dormitory.DormitoryCollection;
-import com.kingdee.eas.custom.managedormsys.dormitory.DormitoryFactory;
-import com.kingdee.eas.custom.managedormsys.dormitory.DormitoryInfo;
-import com.kingdee.eas.custom.managedormsys.dormitory.IDormitory;
-import com.kingdee.eas.custom.managedormsys.occupants.IOccupants;
-import com.kingdee.eas.custom.managedormsys.occupants.OccupantsCollection;
-import com.kingdee.eas.custom.managedormsys.occupants.OccupantsFactory;
-import com.kingdee.eas.custom.managedormsys.occupants.OccupantsInfo;
-import com.kingdee.eas.custom.managedormsys.otherbasicdata.PersonDormitoryTypeInfo;
+import com.kingdee.eas.custom.dormitorysystem.application.CheckInApplicationEntryCollection;
+import com.kingdee.eas.custom.dormitorysystem.application.CheckInApplicationEntryFactory;
+import com.kingdee.eas.custom.dormitorysystem.application.CheckInApplicationEntryInfo;
+import com.kingdee.eas.custom.dormitorysystem.application.ICheckInApplicationEntry;
+import com.kingdee.eas.custom.dormitorysystem.dormitory.DormitoryCollection;
+import com.kingdee.eas.custom.dormitorysystem.dormitory.DormitoryFactory;
+import com.kingdee.eas.custom.dormitorysystem.dormitory.DormitoryInfo;
+import com.kingdee.eas.custom.dormitorysystem.dormitory.IDormitory;
+import com.kingdee.eas.custom.dormitorysystem.occupants.IOccupants;
+import com.kingdee.eas.custom.dormitorysystem.occupants.OccupantsCollection;
+import com.kingdee.eas.custom.dormitorysystem.occupants.OccupantsFactory;
+import com.kingdee.eas.custom.dormitorysystem.occupants.OccupantsInfo;
+import com.kingdee.eas.custom.dormitorysystem.otherbasicdata.PersonDormitoryTypeInfo;
 import com.kingdee.eas.hr.ats.AtsUtil;
 import com.kingdee.shr.base.syssetting.exception.ShrWebBizException;
 import com.kingdee.util.DateTimeUtils;

+ 17 - 17
websrc/com/kingdee/eas/custom/dormitorysystem/application/service/ValidateRoomAvailableByBillIdsService.java

@@ -11,20 +11,20 @@ import com.kingdee.bos.util.BOSUuid;
 import com.kingdee.eas.basedata.person.Genders;
 import com.kingdee.eas.basedata.person.PersonInfo;
 import com.kingdee.eas.common.EASBizException;
-import com.kingdee.eas.custom.managedormsys.application.CheckInApplicationEntryCollection;
-import com.kingdee.eas.custom.managedormsys.application.CheckInApplicationEntryFactory;
-import com.kingdee.eas.custom.managedormsys.application.CheckInApplicationEntryInfo;
-import com.kingdee.eas.custom.managedormsys.application.ICheckInApplicationEntry;
-import com.kingdee.eas.custom.managedormsys.dormitory.DormitoryFactory;
-import com.kingdee.eas.custom.managedormsys.dormitory.DormitoryInfo;
-import com.kingdee.eas.custom.managedormsys.dormitory.IDormitory;
-import com.kingdee.eas.custom.managedormsys.enumerationset.DormitoryClassification;
-import com.kingdee.eas.custom.managedormsys.occupants.IOccupants;
-import com.kingdee.eas.custom.managedormsys.occupants.OccupantsCollection;
-import com.kingdee.eas.custom.managedormsys.occupants.OccupantsFactory;
-import com.kingdee.eas.custom.managedormsys.occupants.OccupantsInfo;
-import com.kingdee.eas.custom.managedormsys.otherbasicdata.DormitoryTypeInfo;
-import com.kingdee.eas.custom.managedormsys.otherbasicdata.PersonDormitoryTypeInfo;
+import com.kingdee.eas.custom.dormitorysystem.application.CheckInApplicationEntryCollection;
+import com.kingdee.eas.custom.dormitorysystem.application.CheckInApplicationEntryFactory;
+import com.kingdee.eas.custom.dormitorysystem.application.CheckInApplicationEntryInfo;
+import com.kingdee.eas.custom.dormitorysystem.application.ICheckInApplicationEntry;
+import com.kingdee.eas.custom.dormitorysystem.dormitory.DormitoryFactory;
+import com.kingdee.eas.custom.dormitorysystem.dormitory.DormitoryInfo;
+import com.kingdee.eas.custom.dormitorysystem.dormitory.IDormitory;
+import com.kingdee.eas.custom.dormitorysystem.enumerationset.DormitoryClassification;
+import com.kingdee.eas.custom.dormitorysystem.occupants.IOccupants;
+import com.kingdee.eas.custom.dormitorysystem.occupants.OccupantsCollection;
+import com.kingdee.eas.custom.dormitorysystem.occupants.OccupantsFactory;
+import com.kingdee.eas.custom.dormitorysystem.occupants.OccupantsInfo;
+import com.kingdee.eas.custom.dormitorysystem.otherbasicdata.DormitoryTypeInfo;
+import com.kingdee.eas.custom.dormitorysystem.otherbasicdata.PersonDormitoryTypeInfo;
 import com.kingdee.eas.framework.*;
 import com.kingdee.eas.hr.ats.AtsUtil;
 import com.kingdee.eas.hr.base.*;
@@ -58,9 +58,9 @@ public class ValidateRoomAvailableByBillIdsService implements IHRMsfService {
         }
         //BatchMessageTipsHeader batchMessageTipsHeader = new BatchMessageTipsHeader();
         // addBatchMessageTips(ids, "面谈通知发送失败", batchMessageTipsHeader);
-        Map<String, List<Map<String, Date>>> roomListMap = new HashMap<>();
+        Map<String, List<Map<String, Date>>> roomListMap = new HashMap<String, List<Map<String, Date>>>();
         //StringBuilder errorMsg = new StringBuilder();
-        List<String> errorMsgList = new ArrayList<>();
+        List<String> errorMsgList = new ArrayList<String>();
         // HRBillBaseFactory.getLocalInstance()
         ICoreBillBase iCoreBillBase = (ICoreBillBase) BOSObjectFactory.createBOSObject(ctx,
                 BOSUuid.read(billIds.split(",")[0]).getType());
@@ -147,7 +147,7 @@ public class ValidateRoomAvailableByBillIdsService implements IHRMsfService {
                         }
                     }
                     //5.算出房间剩余可住人数: 可住人数 - 已住人数
-                    if (occupancyCapacity - dormCheckInCount <= 0) {
+                    if (occupancyCapacity - dormCheckInCount < 0) {
                         String dormitoryName = dormitory.getName();
                         throw new BOSException("当前入住人数" + dormCheckInCount + ",已超过房间[" + dormitoryName + "]可住人数" + occupancyCapacity + ",不能入住!");
                     }

+ 16 - 16
websrc/com/kingdee/eas/custom/dormitorysystem/application/service/ValidateRoomAvailableService.java

@@ -1,7 +1,7 @@
 package com.kingdee.eas.custom.dormitorysystem.application.service;
 
-import com.kingdee.eas.custom.managedormsys.enumerationset.DormitoryClassification;
-import com.kingdee.eas.custom.managedormsys.otherbasicdata.DormitoryTypeInfo;
+import com.kingdee.eas.custom.dormitorysystem.enumerationset.DormitoryClassification;
+import com.kingdee.eas.custom.dormitorysystem.otherbasicdata.DormitoryTypeInfo;
 import com.kingdee.shr.base.syssetting.BasicItemStateEnum;
 import org.apache.log4j.Logger;
 import org.json.JSONArray;
@@ -16,18 +16,18 @@ import com.kingdee.eas.basedata.person.IPerson;
 import com.kingdee.eas.basedata.person.PersonFactory;
 import com.kingdee.eas.basedata.person.PersonInfo;
 import com.kingdee.eas.common.EASBizException;
-import com.kingdee.eas.custom.managedormsys.application.CheckInApplicationEntryCollection;
-import com.kingdee.eas.custom.managedormsys.application.CheckInApplicationEntryFactory;
-import com.kingdee.eas.custom.managedormsys.application.CheckInApplicationEntryInfo;
-import com.kingdee.eas.custom.managedormsys.application.ICheckInApplicationEntry;
-import com.kingdee.eas.custom.managedormsys.dormitory.DormitoryFactory;
-import com.kingdee.eas.custom.managedormsys.dormitory.DormitoryInfo;
-import com.kingdee.eas.custom.managedormsys.dormitory.IDormitory;
-import com.kingdee.eas.custom.managedormsys.occupants.IOccupants;
-import com.kingdee.eas.custom.managedormsys.occupants.OccupantsCollection;
-import com.kingdee.eas.custom.managedormsys.occupants.OccupantsFactory;
-import com.kingdee.eas.custom.managedormsys.occupants.OccupantsInfo;
-import com.kingdee.eas.custom.managedormsys.otherbasicdata.PersonDormitoryTypeInfo;
+import com.kingdee.eas.custom.dormitorysystem.application.CheckInApplicationEntryCollection;
+import com.kingdee.eas.custom.dormitorysystem.application.CheckInApplicationEntryFactory;
+import com.kingdee.eas.custom.dormitorysystem.application.CheckInApplicationEntryInfo;
+import com.kingdee.eas.custom.dormitorysystem.application.ICheckInApplicationEntry;
+import com.kingdee.eas.custom.dormitorysystem.dormitory.DormitoryFactory;
+import com.kingdee.eas.custom.dormitorysystem.dormitory.DormitoryInfo;
+import com.kingdee.eas.custom.dormitorysystem.dormitory.IDormitory;
+import com.kingdee.eas.custom.dormitorysystem.occupants.IOccupants;
+import com.kingdee.eas.custom.dormitorysystem.occupants.OccupantsCollection;
+import com.kingdee.eas.custom.dormitorysystem.occupants.OccupantsFactory;
+import com.kingdee.eas.custom.dormitorysystem.occupants.OccupantsInfo;
+import com.kingdee.eas.custom.dormitorysystem.otherbasicdata.PersonDormitoryTypeInfo;
 import com.kingdee.util.DateTimeUtils;
 import com.kingdee.util.StringUtils;
 import org.json.JSONException;
@@ -60,7 +60,7 @@ public class ValidateRoomAvailableService implements IHRMsfService {
             logger.error(e);
             throw new RuntimeException(e);
         }
-        Map<String, List<Map<String, Date>>> roomListMap = new HashMap<>();
+        Map<String, List<Map<String, Date>>> roomListMap = new HashMap<String, List<Map<String, Date>>>();
         StringBuilder errorMsg = new StringBuilder();
         for (int i = 0; i < validateDatas.length(); i++) {
             try {
@@ -127,7 +127,7 @@ public class ValidateRoomAvailableService implements IHRMsfService {
                     }
                 }
                 //5.算出房间剩余可住人数: 可住人数 - 已住人数
-                if (occupancyCapacity - dormCheckInCount <= 0) {
+                if (occupancyCapacity - dormCheckInCount < 0) {
                     String dormitoryName = dormitoryInfo.getName();
                     throw new BOSException("当前入住人数" + dormCheckInCount + ",已超过房间[" + dormitoryName + "]可住人数" + occupancyCapacity + ",不能入住!");
                 }