소스 검색

换宿单 代码提交

qingwu 2 주 전
부모
커밋
14b383a3fd
23개의 변경된 파일600개의 추가작업 그리고 149개의 파일을 삭제
  1. 18 43
      metadata/com/kingdee/eas/custom/dormitorysystem/application/app/RoomChangeApplication.entity
  2. 1 1
      metadata/com/kingdee/eas/custom/dormitorysystem/application/app/RoomChangeApplicationEditUIFunction.function
  3. 0 82
      metadata/com/kingdee/eas/custom/dormitorysystem/application/client/RoomChangeApplicationEditUI.ui
  4. 70 0
      src/com/kingdee/eas/basedata/org/app/PersonControllerBeanEx.java
  5. 73 18
      src/com/kingdee/eas/custom/dormitorysystem/application/app/RoomChangeApplicationControllerBean.java
  6. 2 0
      src/com/kingdee/eas/custom/dormitorysystem/application/client/AbstractRoomChangeApplicationEditUI.java
  7. 0 0
      src/com/kingdee/eas/custom/dormitorysystem/application/client/AbstractRoomChangeApplicationEditUI.properties
  8. 0 0
      src/com/kingdee/eas/custom/dormitorysystem/application/client/AbstractRoomChangeApplicationEditUI_l2.properties
  9. 0 0
      src/com/kingdee/eas/custom/dormitorysystem/application/client/AbstractRoomChangeApplicationEditUI_l3.properties
  10. 0 0
      src/com/kingdee/eas/custom/dormitorysystem/application/client/AbstractRoomChangeApplicationListUI.java
  11. 0 0
      src/com/kingdee/eas/custom/dormitorysystem/application/client/AbstractRoomChangeApplicationListUI.properties
  12. 0 0
      src/com/kingdee/eas/custom/dormitorysystem/application/client/AbstractRoomChangeApplicationListUI_l2.properties
  13. 0 0
      src/com/kingdee/eas/custom/dormitorysystem/application/client/AbstractRoomChangeApplicationListUI_l3.properties
  14. 1 0
      websrc/com/kingdee/eas/custom/dormitorysystem/application/handler/HRBillBaseEditHandler.java
  15. 411 4
      websrc/com/kingdee/eas/custom/dormitorysystem/application/handler/RoomChangeApplicationEditHandler.java
  16. 17 1
      websrc/com/kingdee/eas/custom/dormitorysystem/application/handler/RoomChangeApplicationListHandler.java
  17. 1 0
      websrc/com/kingdee/eas/custom/dormitorysystem/application/web/AbstractRoomChangeApplicationEditUIBean.java
  18. 1 0
      websrc/com/kingdee/eas/custom/dormitorysystem/application/web/RoomChangeApplicationEditUIBean_l1.properties
  19. 1 0
      websrc/com/kingdee/eas/custom/dormitorysystem/application/web/RoomChangeApplicationEditUIBean_l2.properties
  20. 1 0
      websrc/com/kingdee/eas/custom/dormitorysystem/application/web/RoomChangeApplicationEditUIBean_l3.properties
  21. 1 0
      websrc/com/kingdee/eas/custom/dormitorysystem/application/web/RoomChangeApplicationListUIBean_l1.properties
  22. 1 0
      websrc/com/kingdee/eas/custom/dormitorysystem/application/web/RoomChangeApplicationListUIBean_l2.properties
  23. 1 0
      websrc/com/kingdee/eas/custom/dormitorysystem/application/web/RoomChangeApplicationListUIBean_l3.properties

+ 18 - 43
metadata/com/kingdee/eas/custom/dormitorysystem/application/app/RoomChangeApplication.entity

@@ -366,26 +366,26 @@
       <userDefined>true</userDefined>
       <eventMethods>
         <eventMethod>
-          <name>bbce8906-00fa-1000-e000-000ec0a813e6</name>
-          <alias>entityObject[com.kingdee.eas.custom.dormitorysystem.application.app.RoomChangeApplication].events.event[passAuditEvent].eventMethods.eventMethod[bbce8906-00fa-1000-e000-000ec0a813e6].alias</alias>
-          <description>entityObject[com.kingdee.eas.custom.dormitorysystem.application.app.RoomChangeApplication].events.event[passAuditEvent].eventMethods.eventMethod[bbce8906-00fa-1000-e000-000ec0a813e6].description</description>
+          <name>e22c89a7-53eb-45e1-9569-d0a862796bc0</name>
+          <alias>entityObject[com.kingdee.eas.custom.dormitorysystem.application.app.RoomChangeApplication].events.event[passAuditEvent].eventMethods.eventMethod[e22c89a7-53eb-45e1-9569-d0a862796bc0].alias</alias>
+          <description>entityObject[com.kingdee.eas.custom.dormitorysystem.application.app.RoomChangeApplication].events.event[passAuditEvent].eventMethods.eventMethod[e22c89a7-53eb-45e1-9569-d0a862796bc0].description</description>
           <entityMethodRef>
-            <key name="name" value="passAudit" />
-            <key name="innerID" value="bbce8906-00fa-1000-e000-000ec0a813e6" />
+            <key name="name" value="setAudited" />
+            <key name="innerID" value="e22c89a7-53eb-45e1-9569-d0a862796bc0" />
           </entityMethodRef>
           <parameterMappings>
             <parameterMapping>
               <name />
-              <alias>entityObject[com.kingdee.eas.custom.dormitorysystem.application.app.RoomChangeApplication].events.event[passAuditEvent].eventMethods.eventMethod[bbce8906-00fa-1000-e000-000ec0a813e6].parameterMappings.parameterMappingalias</alias>
-              <description>entityObject[com.kingdee.eas.custom.dormitorysystem.application.app.RoomChangeApplication].events.event[passAuditEvent].eventMethods.eventMethod[bbce8906-00fa-1000-e000-000ec0a813e6].parameterMappings.parameterMappingdescription</description>
+              <alias>entityObject[com.kingdee.eas.custom.dormitorysystem.application.app.RoomChangeApplication].events.event[passAuditEvent].eventMethods.eventMethod[e22c89a7-53eb-45e1-9569-d0a862796bc0].parameterMappings.parameterMappingalias</alias>
+              <description>entityObject[com.kingdee.eas.custom.dormitorysystem.application.app.RoomChangeApplication].events.event[passAuditEvent].eventMethods.eventMethod[e22c89a7-53eb-45e1-9569-d0a862796bc0].parameterMappings.parameterMappingdescription</description>
               <formalParameterInnerID>50cf5dac-0105-1000-e000-009dc0a813a4evfp</formalParameterInnerID>
               <actualParameterIndex>0</actualParameterIndex>
               <isBOPK>true</isBOPK>
             </parameterMapping>
             <parameterMapping>
               <name />
-              <alias>entityObject[com.kingdee.eas.custom.dormitorysystem.application.app.RoomChangeApplication].events.event[passAuditEvent].eventMethods.eventMethod[bbce8906-00fa-1000-e000-000ec0a813e6].parameterMappings.parameterMappingalias</alias>
-              <description>entityObject[com.kingdee.eas.custom.dormitorysystem.application.app.RoomChangeApplication].events.event[passAuditEvent].eventMethods.eventMethod[bbce8906-00fa-1000-e000-000ec0a813e6].parameterMappings.parameterMappingdescription</description>
+              <alias>entityObject[com.kingdee.eas.custom.dormitorysystem.application.app.RoomChangeApplication].events.event[passAuditEvent].eventMethods.eventMethod[e22c89a7-53eb-45e1-9569-d0a862796bc0].parameterMappings.parameterMappingalias</alias>
+              <description>entityObject[com.kingdee.eas.custom.dormitorysystem.application.app.RoomChangeApplication].events.event[passAuditEvent].eventMethods.eventMethod[e22c89a7-53eb-45e1-9569-d0a862796bc0].parameterMappings.parameterMappingdescription</description>
               <formalParameterInnerID>50cf5dac-0105-1000-e000-009ec0a813a4evfp</formalParameterInnerID>
               <actualParameterIndex>1</actualParameterIndex>
               <isBOPK>false</isBOPK>
@@ -402,21 +402,8 @@
             <alias>entityObject[com.kingdee.eas.custom.dormitorysystem.application.app.RoomChangeApplication].events.event[passAuditEvent].formalParameters.formalParameter.parameter[pk].alias</alias>
             <description>entityObject[com.kingdee.eas.custom.dormitorysystem.application.app.RoomChangeApplication].events.event[passAuditEvent].formalParameters.formalParameter.parameter[pk].description</description>
             <direction>in</direction>
-            <dataType>com.kingdee.bos.dao.IObjectPK</dataType>
-            <metadataRef>com.kingdee.eas.custom.dormitorysystem.application.app.RoomChangeApplication</metadataRef>
-            <userDefined>true</userDefined>
-          </parameter>
-        </formalParameter>
-        <formalParameter>
-          <innerID>50cf5dac-0105-1000-e000-009ec0a813a4evfp</innerID>
-          <userDefined>true</userDefined>
-          <parameter>
-            <name>model</name>
-            <alias>entityObject[com.kingdee.eas.custom.dormitorysystem.application.app.RoomChangeApplication].events.event[passAuditEvent].formalParameters.formalParameter.parameter[model].alias</alias>
-            <description>entityObject[com.kingdee.eas.custom.dormitorysystem.application.app.RoomChangeApplication].events.event[passAuditEvent].formalParameters.formalParameter.parameter[model].description</description>
-            <direction>in</direction>
-            <dataType>ObjectValue</dataType>
-            <metadataRef>com.kingdee.eas.custom.dormitorysystem.application.app.RoomChangeApplication</metadataRef>
+            <dataType>BOSUuid</dataType>
+            <metadataRef />
             <userDefined>true</userDefined>
           </parameter>
         </formalParameter>
@@ -672,47 +659,35 @@
       <lang locale="zh_HK" value="審核通過事件" />
       <lang locale="zh_TW" value="審核通過事件" />
     </rs>
-    <rs key="entityObject[com.kingdee.eas.custom.dormitorysystem.application.app.RoomChangeApplication].events.event[passAuditEvent].eventMethods.eventMethod[bbce8906-00fa-1000-e000-000ec0a813e6].alias">
+    <rs key="entityObject[com.kingdee.eas.custom.dormitorysystem.application.app.RoomChangeApplication].events.event[passAuditEvent].eventMethods.eventMethod[e22c89a7-53eb-45e1-9569-d0a862796bc0].alias">
       <lang locale="en_US" value="null" />
       <lang locale="zh_CN" value="null" />
       <lang locale="zh_HK" value="null" />
       <lang locale="zh_TW" value="null" />
     </rs>
-    <rs key="entityObject[com.kingdee.eas.custom.dormitorysystem.application.app.RoomChangeApplication].events.event[passAuditEvent].eventMethods.eventMethod[bbce8906-00fa-1000-e000-000ec0a813e6].description">
+    <rs key="entityObject[com.kingdee.eas.custom.dormitorysystem.application.app.RoomChangeApplication].events.event[passAuditEvent].eventMethods.eventMethod[e22c89a7-53eb-45e1-9569-d0a862796bc0].description">
       <lang locale="en_US" value="null" />
       <lang locale="zh_CN" value="null" />
       <lang locale="zh_HK" value="null" />
       <lang locale="zh_TW" value="null" />
     </rs>
-    <rs key="entityObject[com.kingdee.eas.custom.dormitorysystem.application.app.RoomChangeApplication].events.event[passAuditEvent].eventMethods.eventMethod[bbce8906-00fa-1000-e000-000ec0a813e6].parameterMappings.parameterMappingalias">
+    <rs key="entityObject[com.kingdee.eas.custom.dormitorysystem.application.app.RoomChangeApplication].events.event[passAuditEvent].eventMethods.eventMethod[e22c89a7-53eb-45e1-9569-d0a862796bc0].parameterMappings.parameterMappingalias">
       <lang locale="en_US" value="null" />
       <lang locale="zh_CN" value="null" />
       <lang locale="zh_HK" value="null" />
       <lang locale="zh_TW" value="null" />
     </rs>
-    <rs key="entityObject[com.kingdee.eas.custom.dormitorysystem.application.app.RoomChangeApplication].events.event[passAuditEvent].eventMethods.eventMethod[bbce8906-00fa-1000-e000-000ec0a813e6].parameterMappings.parameterMappingdescription">
+    <rs key="entityObject[com.kingdee.eas.custom.dormitorysystem.application.app.RoomChangeApplication].events.event[passAuditEvent].eventMethods.eventMethod[e22c89a7-53eb-45e1-9569-d0a862796bc0].parameterMappings.parameterMappingdescription">
       <lang locale="en_US" value="null" />
       <lang locale="zh_CN" value="null" />
       <lang locale="zh_HK" value="null" />
       <lang locale="zh_TW" value="null" />
     </rs>
-    <rs key="entityObject[com.kingdee.eas.custom.dormitorysystem.application.app.RoomChangeApplication].events.event[passAuditEvent].formalParameters.formalParameter.parameter[model].alias">
-      <lang locale="en_US" value="null" />
-      <lang locale="zh_CN" value="值对象" />
-      <lang locale="zh_HK" value="值對象" />
-      <lang locale="zh_TW" value="值對象" />
-    </rs>
-    <rs key="entityObject[com.kingdee.eas.custom.dormitorysystem.application.app.RoomChangeApplication].events.event[passAuditEvent].formalParameters.formalParameter.parameter[model].description">
-      <lang locale="en_US" value="null" />
-      <lang locale="zh_CN" value="值对象" />
-      <lang locale="zh_HK" value="值對象" />
-      <lang locale="zh_TW" value="值對象" />
-    </rs>
     <rs key="entityObject[com.kingdee.eas.custom.dormitorysystem.application.app.RoomChangeApplication].events.event[passAuditEvent].formalParameters.formalParameter.parameter[pk].alias">
       <lang locale="en_US" value="null" />
-      <lang locale="zh_CN" value="对象主键" />
-      <lang locale="zh_HK" value="對象主鍵" />
-      <lang locale="zh_TW" value="對象主鍵" />
+      <lang locale="zh_CN" value="单据ID" />
+      <lang locale="zh_HK" value="單據ID" />
+      <lang locale="zh_TW" value="單據ID" />
     </rs>
     <rs key="entityObject[com.kingdee.eas.custom.dormitorysystem.application.app.RoomChangeApplication].events.event[passAuditEvent].formalParameters.formalParameter.parameter[pk].description">
       <lang locale="en_US" value="null" />

+ 1 - 1
metadata/com/kingdee/eas/custom/dormitorysystem/application/app/RoomChangeApplicationEditUIFunction.function

@@ -52,7 +52,7 @@
       <alias>functionObject[com.kingdee.eas.custom.dormitorysystem.application.app.RoomChangeApplicationEditUIFunction].operations.operation[ActionPassAudit].alias</alias>
       <description>functionObject[com.kingdee.eas.custom.dormitorysystem.application.app.RoomChangeApplicationEditUIFunction].operations.operation[ActionPassAudit].description</description>
       <reverseOperation />
-      <eventMethod>bbce8906-00fa-1000-e000-000ec0a813e6</eventMethod>
+      <eventMethod>e22c89a7-53eb-45e1-9569-d0a862796bc0</eventMethod>
       <event>passAuditEvent</event>
       <userDefined>true</userDefined>
       <entityObjectRef>

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 82
metadata/com/kingdee/eas/custom/dormitorysystem/application/client/RoomChangeApplicationEditUI.ui


+ 70 - 0
src/com/kingdee/eas/basedata/org/app/PersonControllerBeanEx.java

@@ -0,0 +1,70 @@
+package com.kingdee.eas.basedata.org.app;
+
+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.dao.IObjectValue;
+import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
+import com.kingdee.bos.metadata.entity.SelectorItemCollection;
+import com.kingdee.eas.basedata.person.PersonFactory;
+import com.kingdee.eas.basedata.person.PersonInfo;
+import com.kingdee.eas.basedata.person.app.PersonControllerBean;
+import com.kingdee.eas.common.EASBizException;
+import com.kingdee.eas.custom.synctask.task.ISynPersonToPunchCardFacade;
+import com.kingdee.eas.custom.synctask.task.SynPersonToPunchCardFacadeFactory;
+import org.apache.log4j.Logger;
+
+
+/**
+ * @author qingwu
+ * @date 2025/5/19
+ * @apiNote
+ */
+public class PersonControllerBeanEx extends PersonControllerBean {
+    private static Logger logger =
+            Logger.getLogger(PersonControllerBeanEx.class);
+
+    @Override
+    protected IObjectPK _addnew(Context ctx, IObjectValue model) throws BOSException, EASBizException {
+        logger.error("PersonControllerBeanEx--------------------_addnew");
+        IObjectPK iObjectPK = super._addnew(ctx, model);
+        PersonInfo info = (PersonInfo) model;
+        getUpdatePerson(ctx, info);
+        return iObjectPK;
+    }
+
+
+    @Override
+    protected void _update(Context ctx, IObjectPK pk, IObjectValue model) throws BOSException, EASBizException {
+        super._update(ctx, pk, model);
+        logger.error("PersonControllerBeanEx--------------------_update");
+        PersonInfo personInfo = (PersonInfo) model;
+        getUpdatePerson(ctx, personInfo);
+
+    }
+
+    @Override
+    protected void _updatePartial(Context ctx, IObjectValue model, SelectorItemCollection selector) throws BOSException, EASBizException {
+        super._updatePartial(ctx, model, selector);
+        logger.error("PersonControllerBeanEx--------------------_updatePartial");
+        PersonInfo personInfo = (PersonInfo) model;
+        getUpdatePerson(ctx, personInfo);
+    }
+
+    /**
+     * 用不人员信息到打卡记录
+     *
+     * @param ctx
+     * @param model
+     * @throws BOSException
+     * @throws EASBizException
+     */
+    public void getUpdatePerson(Context ctx, PersonInfo model) throws BOSException, EASBizException {
+        if (StringUtils.isEmpty(model.getNumber())) {
+            model = PersonFactory.getLocalInstance(ctx).getPersonInfo(new ObjectUuidPK(model.getId()));
+        }
+        ISynPersonToPunchCardFacade iSynPersonToPunchCardFacade = SynPersonToPunchCardFacadeFactory.getLocalInstance(ctx);
+        iSynPersonToPunchCardFacade.updatePerson(model.getNumber());
+    }
+}

+ 73 - 18
src/com/kingdee/eas/custom/dormitorysystem/application/app/RoomChangeApplicationControllerBean.java

@@ -45,23 +45,11 @@ public class RoomChangeApplicationControllerBean extends AbstractRoomChangeAppli
         this._submitEffect(ctx, roomChangeApplicationInfo);
     }
 
-    /**
-     * 提交生效
-     *
-     * @param ctx
-     * @param model
-     * @return
-     * @throws BOSException
-     * @throws EASBizException
-     */
     @Override
-    protected IObjectPK _submitEffect(
-            Context ctx,
-            CoreBaseInfo model
-    ) throws BOSException, EASBizException {
-        logger.error("_submitEffect-----");
-        RoomChangeApplicationInfo info = (RoomChangeApplicationInfo) model;
-        info = getRoomChangeApplicationInfo(ctx, new ObjectUuidPK(info.getId()));
+    protected void _setAudited(Context ctx, BOSUuid billID) throws BOSException, EASBizException {
+        logger.error("_setAudited-----");
+        //RoomChangeApplicationInfo info = (RoomChangeApplicationInfo) model;
+        RoomChangeApplicationInfo info = getRoomChangeApplicationInfo(ctx, new ObjectUuidPK(billID));
         //人员入住信息
         IOccupants iOccupants = OccupantsFactory.getLocalInstance(ctx);
         //人员入住信息修改字段
@@ -109,9 +97,76 @@ public class RoomChangeApplicationControllerBean extends AbstractRoomChangeAppli
 
         }
         update(ctx, new ObjectUuidPK(info.getId()), info);
-        IObjectPK iObjectPK = super._submitEffect(ctx, info);
         //校验时间是否存在交叉
-        return iObjectPK;
+        super._setAudited(ctx, billID);
+    }
+
+    /**
+     * 提交生效
+     *
+     * @param ctx
+     * @param model
+     * @return
+     * @throws BOSException
+     * @throws EASBizException
+     */
+    @Override
+    protected IObjectPK _submitEffect(
+            Context ctx,
+            CoreBaseInfo model
+    ) throws BOSException, EASBizException {
+        logger.error("_submitEffect-----");
+        //RoomChangeApplicationInfo info = (RoomChangeApplicationInfo) model;
+        //info = getRoomChangeApplicationInfo(ctx, new ObjectUuidPK(info.getId()));
+        ////人员入住信息
+        //IOccupants iOccupants = OccupantsFactory.getLocalInstance(ctx);
+        ////人员入住信息修改字段
+        //SelectorItemCollection sicOccupants = new SelectorItemCollection();
+        //sicOccupants.add("CheckOutDate");
+        ////换宿单分录
+        //SelectorItemCollection sicEntry = new SelectorItemCollection();
+        //sicEntry.add("occupants");
+        ////生成入住人员信息
+        //for (int i = 0; i < info.getEntrys().size(); i++) {
+        //    RoomChangeApplicationEntryInfo entryInfo = info.getEntrys().get(i);
+        //    //原入住人员信息
+        //    OccupantsInfo oldOccupants = entryInfo.getOldOccupants();
+        //    //原退宿日期
+        //    entryInfo.setOldCheckoutDate(oldOccupants.getCheckOutDate());
+        //    //新增新的入住人员信息
+        //    oldOccupants = iOccupants.getOccupantsInfo(new ObjectUuidPK(oldOccupants.getId()));
+        //    //修改原入住人员信息的宿时间等于换宿单入住时间的前一天。
+        //    Date checkInDate = entryInfo.getCheckInDate();
+        //    oldOccupants.setCheckOutDate(DateTimeUtils.addDay(checkInDate, -1));
+        //    iOccupants.updatePartial(oldOccupants, sicOccupants);
+        //    //创建一张新的人员入住信息入住时间等于换宿单的入住时间
+        //    //生成入住人员信息
+        //    OccupantsInfo occupantsInfo = new OccupantsInfo();
+        //    //入住人员
+        //    occupantsInfo.setPerson(entryInfo.getPerson());
+        //    //入住日期
+        //    occupantsInfo.setCheckInDate(entryInfo.getCheckInDate());
+        //    //退宿日期
+        //    occupantsInfo.setCheckOutDate(entryInfo.getCheckoutDate());
+        //    //入住房间
+        //    occupantsInfo.setDormitory(entryInfo.getAdjustRoom());
+        //    //人员宿舍分类
+        //    occupantsInfo.setPersonDormitoryType(oldOccupants.getPersonDormitoryType());
+        //    //宿舍
+        //    //occupantsInfo.setDormitory(oldOccupants.getDormitory());
+        //    //职位
+        //    occupantsInfo.setPersonPosition(oldOccupants.getPersonPosition());
+        //    //occupantsInfo.setPersonD
+        //    //状态:启用
+        //    //occupantsInfo.setState(BasicItemStateEnum.ENABLE);
+        //    iOccupants.addnew(occupantsInfo);
+        //    // 保存新的入住人员信息到
+        //    entryInfo.setOccupants(occupantsInfo);
+        //
+        //}
+        //update(ctx, new ObjectUuidPK(info.getId()), info);
+        //IObjectPK iObjectPK = super._submitEffect(ctx, info);
+        return super._submitEffect(ctx, model);
     }
 
 

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 2 - 0
src/com/kingdee/eas/custom/dormitorysystem/application/client/AbstractRoomChangeApplicationEditUI.java


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
src/com/kingdee/eas/custom/dormitorysystem/application/client/AbstractRoomChangeApplicationEditUI.properties


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
src/com/kingdee/eas/custom/dormitorysystem/application/client/AbstractRoomChangeApplicationEditUI_l2.properties


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
src/com/kingdee/eas/custom/dormitorysystem/application/client/AbstractRoomChangeApplicationEditUI_l3.properties


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
src/com/kingdee/eas/custom/dormitorysystem/application/client/AbstractRoomChangeApplicationListUI.java


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
src/com/kingdee/eas/custom/dormitorysystem/application/client/AbstractRoomChangeApplicationListUI.properties


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
src/com/kingdee/eas/custom/dormitorysystem/application/client/AbstractRoomChangeApplicationListUI_l2.properties


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
src/com/kingdee/eas/custom/dormitorysystem/application/client/AbstractRoomChangeApplicationListUI_l3.properties


+ 1 - 0
websrc/com/kingdee/eas/custom/dormitorysystem/application/handler/HRBillBaseEditHandler.java

@@ -70,6 +70,7 @@ public class HRBillBaseEditHandler extends DormitoryApplicationEditHandler {
             //换宿单不能对有退宿单的入住信息进行换宿
             ValidateSwapWithCheckout(model);
 
+
         } catch (Exception e) {
             e.printStackTrace();
             throw new ShrWebBizException(e);

+ 411 - 4
websrc/com/kingdee/eas/custom/dormitorysystem/application/handler/RoomChangeApplicationEditHandler.java

@@ -1,24 +1,51 @@
 package com.kingdee.eas.custom.dormitorysystem.application.handler;
 
+import com.kingdee.bos.BOSException;
+import com.kingdee.bos.BOSObjectFactory;
 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.BOSUuid;
 import com.kingdee.eas.base.permission.UserInfo;
+import com.kingdee.eas.basedata.person.Genders;
 import com.kingdee.eas.basedata.person.PersonInfo;
-import com.kingdee.eas.custom.dormitorysystem.application.RoomChangeApplicationEntryCollection;
-import com.kingdee.eas.custom.dormitorysystem.application.RoomChangeApplicationEntryInfo;
-import com.kingdee.eas.custom.dormitorysystem.application.RoomChangeApplicationInfo;
+import com.kingdee.eas.common.EASBizException;
+import com.kingdee.eas.custom.dormitorysystem.application.*;
+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.CoreBaseInfo;
+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.eas.hr.emp.IPersonPosition;
 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.BasicItemStateEnum;
+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.util.DateTimeUtils;
+import com.kingdee.util.StringUtils;
 import org.apache.log4j.Logger;
 import org.springframework.ui.ModelMap;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.util.*;
 
 
 /**
@@ -26,10 +53,389 @@ import javax.servlet.http.HttpServletResponse;
  * @date 2025/4/27
  * @apiNote ABK_换宿申请单
  */
-    public class RoomChangeApplicationEditHandler extends HRBillBaseEditHandler {
+public class RoomChangeApplicationEditHandler extends HRBillBaseEditHandler {
     private Logger logger = Logger.getLogger(this.getClass());
     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);
+            result = validateRoomAvailableByBillIds(billIds);
+        } 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);
+    }
+
+    public Map validateRoomAvailableByBillIds(String billIds) throws BOSException {
+        if (StringUtils.isEmpty(billIds)) {
+            logger.error("单据id不能为空!");
+            throw new BOSException("单据id不能为空!");
+        }
+        Map<String, List<Map<String, Date>>> roomListMap = new HashMap<String, List<Map<String, Date>>>();
+        //StringBuilder errorMsg = new StringBuilder();
+        List<String> errorMsgList = new ArrayList<String>();
+        // HRBillBaseFactory.getLocalInstance()
+        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.adjustRoom.*");
+        sic.add("entrys.adjustRoom.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 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 {
+                    HRBillBaseEntryInfo entryInfo = (HRBillBaseEntryInfo) entrys.getObject(j);
+                    Date checkInDate = null;
+                    //B371AC0A 换宿单分录
+                    if ("B371AC0A".equals(bosType)) {
+                        //换宿单
+                        //调整日期
+                        checkInDate = entryInfo.getDate("adjustmentDate");
+                    } else {
+                        //入住日期
+                        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("人员不能为空!");
+                    }
+                    //房间
+                    DormitoryInfo dormitory = (DormitoryInfo) entryInfo.getObjectValue("adjustRoom");
+                    if (dormitory == null) {
+                        throw new BOSException("房间不能为空!");
+                    }
+                    String roomId = dormitory.getId().toString();
+                    //根据入住日期,性别,员工类别查询可选房间
+                    //人员类型
+                    PersonDormitoryTypeInfo personType = (PersonDormitoryTypeInfo) personInfo.get("personType");
+                    if (personType == null) {
+                        throw new BOSException("员工[" + personInfo.getName() + "]的人员类别为空,请及时维护!");
+                    }
+                    //String personTypeId = personType.getId().toString();
+                    //已住人数
+                    int dormCheckInCount = 0;
+                    //1.校验房间信息
+                    validateDormitoryInfo(ctx, personInfo, dormitory);
+                    //可住人数
+                    int occupancyCapacity = dormitory.getOccupancyCapacity();
+                    //2.根据入住日期和退宿日期算出入住信息房间已住人数
+                    dormCheckInCount += getCheckInInfoByOccupants(ctx, checkInDate, checkoutDate, roomId, personType);
+                    //3.根据入住日期和退宿日期算出入住申请单状态为申请中的已住人数
+                    dormCheckInCount += getCheckInInfoByCheckInApplication(ctx, checkInDate, checkoutDate, roomId, personType);
+                    //4.根据入住日期和退宿日期算出换宿申请单状态为申请中的已住人数
+                    dormCheckInCount += getRoomChangeInfoByRoomChangeApplication(ctx, checkInDate, checkoutDate, roomId, personType);
+                    //5.根据当前参数缓存算出已住人数
+                    if (roomListMap.containsKey(roomId)) {
+                        List<Map<String, Date>> roomMapList = roomListMap.get(roomId);
+                        for (int k = 0; k < roomMapList.size(); k++) {
+                            Map<String, Date> roomMap = roomMapList.get(k);
+                            Date checkInDateOld = roomMap.get("checkInDate");
+                            Date checkoutDateOld = roomMap.get("checkoutDate");
+                            //申请入住日期在入住日期和退宿日期之间
+                            //入住日期在申请入住日期和申请退宿日期之间
+                            if ((checkInDateOld.compareTo(checkInDate) <= 0 && checkoutDateOld.compareTo(checkInDate) >= 0)
+                                    || (checkInDateOld.compareTo(checkInDate) >= 0 && checkInDateOld.compareTo(checkoutDate) <= 0)) {
+                                dormCheckInCount++;
+                            }
+                        }
+                    }
+                    //6.算出房间剩余可住人数: 可住人数 - 已住人数
+                    if (occupancyCapacity - dormCheckInCount < 0) {
+                        String dormitoryName = dormitory.getName();
+                        throw new BOSException("当前入住人数" + dormCheckInCount + ",已超过房间[" + dormitoryName + "]可住人数" + occupancyCapacity + ",不能入住!");
+                    }
+                    Map roomMap = new HashMap();
+                    roomMap.put("checkInDate", checkInDate);
+                    roomMap.put("checkoutDate", checkoutDate);
+                    if (roomListMap.containsKey(roomId)) {
+                        roomListMap.get(roomId).add(roomMap);
+                    } else {
+                        List list = new ArrayList();
+                        roomListMap.put(roomId, list);
+                        list.add(roomMap);
+                    }
+                } catch (Exception e) {
+                    logger.error("单据编号为" + baseInfoNumber + "校验未通过: " + e.getMessage(), e);
+                    errorMsgList.add("单据编号为" + baseInfoNumber + "校验未通过: " + e.getMessage());
+                    //errorMsg.append("单据编号为").append(baseInfoNumber).append("校验未通过: ").append(e.getMessage()).append(System.lineSeparator());
+                }
+            }
+        }
+        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 checkInDate  入住日期
+     * @param checkoutDate 退宿日期
+     * @param roomId       房间id
+     * @param personType   人员类型
+     * @return
+     * @throws BOSException
+     */
+    private int getRoomChangeInfoByRoomChangeApplication(
+            Context ctx,
+            Date checkInDate,
+            Date checkoutDate,
+            String roomId,
+            PersonDormitoryTypeInfo personType
+    ) throws BOSException {
+        IRoomChangeApplicationEntry iRoomChangeApplicationEntry = RoomChangeApplicationEntryFactory.getLocalInstance(ctx);
+        FilterInfo filterInfo = new FilterInfo();
+        FilterItemCollection filterItems = filterInfo.getFilterItems();
+        //房间
+        filterItems.add(new FilterItemInfo("adjustRoom", roomId));
+        //申请入住日期在入住日期和退宿日期之间
+        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("parent.billState", "1,2,3", CompareType.INCLUDE));
+        filterInfo.setMaskString("#0 and ((#1 and #2) or (#3 and #4)) and #5");
+        SelectorItemCollection sic = new SelectorItemCollection();
+        sic.add("adjustRoom.id");
+        sic.add("person.personType.id");
+        sic.add("person.personType.name");
+        EntityViewInfo viewInfo = EntityViewInfo.getInstance(filterInfo, sic, null);
+        RoomChangeApplicationEntryCollection roomChangeApplicationEntryCol = iRoomChangeApplicationEntry.getRoomChangeApplicationEntryCollection(viewInfo);
+        String personTypeId = personType.getId().toString();
+        String personTypeName = personType.getName();
+        //已住人数
+        int dormCheckInCount = 0;
+        for (int i = 0; i < roomChangeApplicationEntryCol.size(); i++) {
+            RoomChangeApplicationEntryInfo roomChangeApplicationEntryInfo = roomChangeApplicationEntryCol.get(i);
+            //房间
+            PersonInfo person = roomChangeApplicationEntryInfo.getPerson();
+            String personName = person.getName();
+            //人员类型
+            PersonDormitoryTypeInfo personDormitoryType = (PersonDormitoryTypeInfo) person.get("personType");
+            if (personDormitoryType == null) {
+                throw new BOSException("员工[" + personName + "]的人员类别为空,请及时维护!");
+            }
+            String personDormitoryTypeId = personDormitoryType.getId().toString();
+            String personDormitoryTypeName = personDormitoryType.getName();
+            if (!personTypeId.equals(personDormitoryTypeId)) {
+                throw new BOSException("人员类别[" + personTypeName + "]与宿舍类型[" + personDormitoryTypeName + "]不符,不能入住!");
+            }
+            //累计已住人数
+            dormCheckInCount++;
+        }
+        return dormCheckInCount;
+    }
+
+    /**
+     * 根据入住日期和退宿日期算出入住申请单状态为申请中的已住人数
+     *
+     * @param ctx
+     * @param checkInDate  入住日期
+     * @param checkoutDate 退宿日期
+     * @param roomId       房间id
+     * @param personType   人员类型
+     * @return
+     * @throws BOSException
+     */
+    private int getCheckInInfoByCheckInApplication(
+            Context ctx,
+            Date checkInDate,
+            Date checkoutDate,
+            String roomId,
+            PersonDormitoryTypeInfo personType
+    ) throws BOSException {
+        ICheckInApplicationEntry iCheckInApplicationEntry = CheckInApplicationEntryFactory.getLocalInstance(ctx);
+        FilterInfo filterInfo = new FilterInfo();
+        FilterItemCollection filterItems = filterInfo.getFilterItems();
+        //房间
+        filterItems.add(new FilterItemInfo("adjustRoom", roomId));
+        //申请入住日期在入住日期和退宿日期之间
+        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("parent.billState", "1,2,3", CompareType.INCLUDE));
+        filterInfo.setMaskString("#0 and ((#1 and #2) or (#3 and #4)) and #5");
+        SelectorItemCollection sic = new SelectorItemCollection();
+        sic.add("adjustRoom.id");
+        sic.add("person.personType.id");
+        sic.add("person.personType.name");
+        EntityViewInfo viewInfo = EntityViewInfo.getInstance(filterInfo, sic, null);
+        CheckInApplicationEntryCollection checkInApplicationEntryCol = iCheckInApplicationEntry.getCheckInApplicationEntryCollection(viewInfo);
+        String personTypeId = personType.getId().toString();
+        String personTypeName = personType.getName();
+        //已住人数
+        int dormCheckInCount = 0;
+        for (int i = 0; i < checkInApplicationEntryCol.size(); i++) {
+            CheckInApplicationEntryInfo checkInApplicationEntryInfo = checkInApplicationEntryCol.get(i);
+            //房间
+            PersonInfo person = checkInApplicationEntryInfo.getPerson();
+            String personName = person.getName();
+            //人员类型
+            PersonDormitoryTypeInfo personDormitoryType = (PersonDormitoryTypeInfo) person.get("personType");
+            if (personDormitoryType == null) {
+                throw new BOSException("员工[" + personName + "]的人员类别为空,请及时维护!");
+            }
+            String personDormitoryTypeId = personDormitoryType.getId().toString();
+            String personDormitoryTypeName = personDormitoryType.getName();
+            if (!personTypeId.equals(personDormitoryTypeId)) {
+                throw new BOSException("人员类别[" + personTypeName + "]与宿舍类型[" + personDormitoryTypeName + "]不符,不能入住!");
+            }
+            //累计已住人数
+            dormCheckInCount++;
+        }
+        return dormCheckInCount;
+    }
+
+    /**
+     * 校验房间信息
+     *
+     * @param ctx
+     * @param personInfo
+     * @param dormitory  房间
+     * @return
+     * @throws BOSException
+     * @throws EASBizException
+     */
+    protected void validateDormitoryInfo(
+            Context ctx,
+            PersonInfo personInfo,
+            DormitoryInfo dormitory
+    ) throws BOSException, EASBizException {
+        Genders gender = personInfo.getGender();
+        if (gender == null) {
+            throw new BOSException("员工性别为空!");
+        }
+        String personInfoName = personInfo.getName();
+        IDormitory iDormitory = DormitoryFactory.getLocalInstance(ctx);
+        //查询房间信息
+        String dormitoryName = dormitory.getName();
+        DormitoryClassification roomClassification = dormitory.getRoomClassification();
+        if (!DormitoryClassification.ROOM.equals(roomClassification)) {
+            String classificationAlias = roomClassification.getAlias();
+            throw new BOSException("房间[" + dormitoryName + "]房间归类为" + classificationAlias + ",不能入住!");
+        }
+        BasicItemStateEnum dormitoryInfoState = dormitory.getState();
+        if (BasicItemStateEnum.DISABLE.equals(dormitoryInfoState)) {
+            throw new BOSException("房间[" + dormitoryName + "]未启用,不能入住!");
+        }
+        //宿舍类型
+        DormitoryTypeInfo dormitoryType = dormitory.getDormitoryType();
+        Genders roomGender = dormitoryType.getGender();
+        if (roomGender != null && gender.getValue() != roomGender.getValue()) {
+            String dormitoryTypeName = dormitoryType.getName();
+            throw new BOSException("房间[" + dormitoryName + "]宿舍类型为" + dormitoryTypeName + ",与人员[" + personInfoName + "]的性别不符!");
+        }
+    }
+
+    /**
+     * 根据入住日期和退宿日期算出入住信息中每个房间已住人数
+     *
+     * @param ctx
+     * @param checkInDate  入住日期
+     * @param checkoutDate 退宿日期
+     * @param roomId       房间id
+     * @param personType   人员类型
+     * @return
+     * @throws BOSException
+     */
+    protected int getCheckInInfoByOccupants(
+            Context ctx,
+            Date checkInDate,
+            Date checkoutDate,
+            String roomId,
+            PersonDormitoryTypeInfo personType
+    ) throws BOSException {
+        IOccupants iOccupants = OccupantsFactory.getLocalInstance(ctx);
+        FilterInfo filterInfo = new FilterInfo();
+        FilterItemCollection filterItems = filterInfo.getFilterItems();
+        //房间
+        filterItems.add(new FilterItemInfo("Dormitory", roomId));
+        //申请入住日期在入住日期和退宿日期之间
+        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("PersonDormitoryType.id");
+        sic.add("PersonDormitoryType.name");
+        EntityViewInfo viewInfo = EntityViewInfo.getInstance(filterInfo, sic, null);
+        OccupantsCollection occupantsCollection = iOccupants.getOccupantsCollection(viewInfo);
+        String personTypeId = personType.getId().toString();
+        String personTypeName = personType.getName();
+        //已住人数
+        int dormCheckInCount = 0;
+        String personDormitoryTypeId = null;
+        for (int i = 0; i < occupantsCollection.size(); i++) {
+            OccupantsInfo occupantsInfo = occupantsCollection.get(i);
+            //人员宿舍分类
+            PersonDormitoryTypeInfo personDormitoryType = occupantsInfo.getPersonDormitoryType();
+            personDormitoryTypeId = personDormitoryType.getId().toString();
+            String personDormitoryTypeName = personDormitoryType.getName();
+            if (!personTypeId.equals(personDormitoryTypeId)) {
+                throw new BOSException("人员类别[" + personTypeName + "]与宿舍类型[" + personDormitoryTypeName + "]不符,不能入住!");
+            }
+            dormCheckInCount++;
+        }
+        return dormCheckInCount;
+    }
+
     @Override
     protected void afterCreateNewModel(HttpServletRequest request, HttpServletResponse response, CoreBaseInfo coreBaseInfo) throws SHRWebException {
         super.afterInitModel(request, response, coreBaseInfo);
@@ -37,6 +443,7 @@ import javax.servlet.http.HttpServletResponse;
         try {
             RoomChangeApplicationEntryCollection entrys = roomChangeApplicationInfo.getEntrys();
             RoomChangeApplicationEntryInfo roomChangeApplicationEntryInfo = new RoomChangeApplicationEntryInfo();
+            roomChangeApplicationEntryInfo.setCheckoutDate(DateTimeUtils.parseDate("2199-12-31", "yyyy-MM-dd"));
             //managementNotes  宿舍管理说明
             StringBuilder managementNotes = new StringBuilder();
             managementNotes.append("本人愿意遵守以下条款:").append("\n");

+ 17 - 1
websrc/com/kingdee/eas/custom/dormitorysystem/application/handler/RoomChangeApplicationListHandler.java

@@ -1,9 +1,17 @@
 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.framework.CoreBaseInfo;
+import com.kingdee.eas.hr.base.HRBillBaseInfo;
 import com.kingdee.shr.base.syssetting.context.SHRContext;
+import com.kingdee.shr.base.syssetting.exception.SHRWebException;
 import org.apache.log4j.Logger;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
 /**
  * @author qingwu
  * @date 2025/4/28
@@ -13,7 +21,15 @@ public class RoomChangeApplicationListHandler extends DormitoryApplicationListHa
     private Logger logger = Logger.getLogger(this.getClass());
     private Context ctx = SHRContext.getInstance().getContext();
 
-    //@Override
+    @Override
+    protected void beforeSubmit(HttpServletRequest request, HttpServletResponse response, CoreBaseInfo model) throws SHRWebException {
+        HRBillBaseInfo hrBillBaseInfo = (HRBillBaseInfo) model;
+        HROrgUnitInfo hrOrgUnitInfo = new HROrgUnitInfo();
+        hrOrgUnitInfo.setId(BOSUuid.read("00000000-0000-0000-0000-000000000000CCE7AED4"));
+        hrBillBaseInfo.setHrOrgUnit(hrOrgUnitInfo);
+        super.beforeSubmit(request, response, model);
+    }
+//@Override
     //public String deleteAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException {
     //    String billId = this.getBillId(request);
     //    FilterInfo fIlterInfo = new FilterInfo();

+ 1 - 0
websrc/com/kingdee/eas/custom/dormitorysystem/application/web/AbstractRoomChangeApplicationEditUIBean.java

@@ -146,6 +146,7 @@ public abstract class AbstractRoomChangeApplicationEditUIBean extends com.kingde
         sic.add(new SelectorItemInfo("entrys.checkoutDate"));
         sic.add(new SelectorItemInfo("entrys.oldOccupants.*"));
         sic.add(new SelectorItemInfo("entrys.occupants.*"));
+        sic.add(new SelectorItemInfo("entrys.oldCheckoutDate"));
         sic.add(new SelectorItemInfo("managementNotes"));
 	
 		return sic;

+ 1 - 0
websrc/com/kingdee/eas/custom/dormitorysystem/application/web/RoomChangeApplicationEditUIBean_l1.properties

@@ -18,5 +18,6 @@ btnSave.label=
 contHandler.caption=\u7ECF\u624B\u4EBA
 btnRemove.label=
 contAuditor.caption=\u5BA1\u6838\u4EBA
+oldCheckoutDateColumn.header=\u539F\u9000\u5BBF\u65E5\u671F
 contBizDate.caption=\u4E1A\u52A1\u65E5\u671F
 btnSubmit.label=

+ 1 - 0
websrc/com/kingdee/eas/custom/dormitorysystem/application/web/RoomChangeApplicationEditUIBean_l2.properties

@@ -18,5 +18,6 @@ btnSave.label=\u4FDD\u5B58
 contHandler.caption=\u7ECF\u624B\u4EBA
 btnRemove.label=\u5220\u9664
 contAuditor.caption=\u5BA1\u6838\u4EBA
+oldCheckoutDateColumn.header=\u539F\u9000\u5BBF\u65E5\u671F
 contBizDate.caption=\u4E1A\u52A1\u65E5\u671F
 btnSubmit.label=\u63D0\u4EA4

+ 1 - 0
websrc/com/kingdee/eas/custom/dormitorysystem/application/web/RoomChangeApplicationEditUIBean_l3.properties

@@ -18,5 +18,6 @@ btnSave.label=\u4FDD\u5B58
 contHandler.caption=\u7D93\u624B\u4EBA
 btnRemove.label=\u522A\u9664
 contAuditor.caption=\u5BE9\u6838\u4EBA
+oldCheckoutDateColumn.header=\u539F\u9000\u5BBF\u65E5\u671F
 contBizDate.caption=\u696D\u52D9\u65E5\u671F
 btnSubmit.label=\u63D0\u4EA4

+ 1 - 0
websrc/com/kingdee/eas/custom/dormitorysystem/application/web/RoomChangeApplicationListUIBean_l1.properties

@@ -27,3 +27,4 @@ btnEdit.label=
 auditor_numberColumn.header=\u5BA1\u6838\u4EBA\u7F16\u7801
 entrys_checkInDateColumn.header=\u5165\u4F4F\u65E5\u671F
 descriptionColumn.header=\u53C2\u8003\u4FE1\u606F
+entrys_oldCheckoutDateColumn.header=\u539F\u9000\u5BBF\u65E5\u671F

+ 1 - 0
websrc/com/kingdee/eas/custom/dormitorysystem/application/web/RoomChangeApplicationListUIBean_l2.properties

@@ -27,3 +27,4 @@ btnEdit.label=\u7F16\u8F91
 auditor_numberColumn.header=\u5BA1\u6838\u4EBA\u7F16\u7801
 entrys_checkInDateColumn.header=\u5165\u4F4F\u65E5\u671F
 descriptionColumn.header=\u53C2\u8003\u4FE1\u606F
+entrys_oldCheckoutDateColumn.header=\u539F\u9000\u5BBF\u65E5\u671F

+ 1 - 0
websrc/com/kingdee/eas/custom/dormitorysystem/application/web/RoomChangeApplicationListUIBean_l3.properties

@@ -27,3 +27,4 @@ btnEdit.label=\u7DE8\u8F2F
 auditor_numberColumn.header=\u5BE9\u6838\u4EBA\u7DE8\u78BC
 entrys_checkInDateColumn.header=\u5165\u4F4F\u65E5\u671F
 descriptionColumn.header=\u53C3\u8003\u4FE1\u606F
+entrys_oldCheckoutDateColumn.header=\u539F\u9000\u5BBF\u65E5\u671F

이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.