|
@@ -11,10 +11,7 @@ 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.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.application.*;
|
|
|
import com.kingdee.eas.custom.dormitorysystem.dormitory.DormitoryCollection;
|
|
|
import com.kingdee.eas.custom.dormitorysystem.dormitory.DormitoryFactory;
|
|
|
import com.kingdee.eas.custom.dormitorysystem.dormitory.DormitoryInfo;
|
|
@@ -75,20 +72,30 @@ public class GetOptionalRoomIdsService implements IHRMsfService {
|
|
|
sic.add("name");
|
|
|
PersonInfo personInfo = iPerson.getPersonInfo(new ObjectUuidPK(personId), sic);
|
|
|
Genders gender = personInfo.getGender();
|
|
|
+ if (gender == null) {
|
|
|
+ throw new BOSException("员工[" + personInfo.getName() + "]的性别为空,请及时维护!");
|
|
|
+ }
|
|
|
//人员类型
|
|
|
PersonDormitoryTypeInfo personType = (PersonDormitoryTypeInfo) personInfo.get("personType");
|
|
|
if (personType == null) {
|
|
|
- throw new ShrWebBizException("员工[" + personInfo.getName() + "]的人员类别为空,请及时维护!");
|
|
|
+ throw new BOSException("员工[" + personInfo.getName() + "]的人员类别为空,请及时维护!");
|
|
|
}
|
|
|
String personTypeId = personType.getId().toString();
|
|
|
Map<String, Map<String, Object>> dormitoryMap = new HashMap<>();
|
|
|
+ //存放已累加的人员入住信息数据id,避免重复累加
|
|
|
//1.根据性别查询所有可住房间信息
|
|
|
List<DormitoryInfo> dormitoryInfoList = getDormitoryInfos(ctx, gender, dormitoryIdSet);
|
|
|
+ if (dormitoryIdSet.isEmpty()) {
|
|
|
+ //没有可住房间信息
|
|
|
+ return "''";
|
|
|
+ }
|
|
|
//2.根据入住日期和退宿日期算出入住信息每个房间已住人数
|
|
|
getCheckInInfoByOccupants(ctx, checkInDate, checkoutDate, dormitoryMap, dormitoryIdSet);
|
|
|
//3.根据入住日期和退宿日期算出入住申请单状态为申请中的已住人数
|
|
|
getCheckInInfoByCheckInApplication(ctx, checkInDate, checkoutDate, dormitoryMap, dormitoryIdSet);
|
|
|
- //4.算出房间剩余可住人数: 可住人数 - 已住人数
|
|
|
+ //4.根据入住日期和退宿日期算出换宿申请单状态为申请中的已住人数
|
|
|
+ getRoomChangeInfoByRoomChangeApplication(ctx, checkInDate, checkoutDate, dormitoryMap, dormitoryIdSet);
|
|
|
+ //5.算出房间剩余可住人数: 可住人数 - 已住人数
|
|
|
for (int i = 0; i < dormitoryInfoList.size(); i++) {
|
|
|
DormitoryInfo dormitoryInfo = dormitoryInfoList.get(i);
|
|
|
String dormitoryId = dormitoryInfo.getId().toString();
|
|
@@ -126,6 +133,79 @@ public class GetOptionalRoomIdsService implements IHRMsfService {
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据入住日期和退宿日期算出换宿申请单状态为申请中的已住人数
|
|
|
+ *
|
|
|
+ * @param ctx
|
|
|
+ * @param checkInDate 入住日期
|
|
|
+ * @param checkoutDate 退宿日期
|
|
|
+ * @param dormitoryMap
|
|
|
+ * @param dormitoryIdSet 房间ids
|
|
|
+ * @throws BOSException
|
|
|
+ */
|
|
|
+ private void getRoomChangeInfoByRoomChangeApplication(
|
|
|
+ Context ctx,
|
|
|
+ Date checkInDate,
|
|
|
+ Date checkoutDate,
|
|
|
+ Map<String, Map<String, Object>> dormitoryMap,
|
|
|
+ Set<String> dormitoryIdSet
|
|
|
+ ) throws BOSException {
|
|
|
+ IRoomChangeApplicationEntry iRoomChangeApplicationEntry = RoomChangeApplicationEntryFactory.getLocalInstance(ctx);
|
|
|
+ FilterInfo filterInfo = new FilterInfo();
|
|
|
+ FilterItemCollection filterItems = filterInfo.getFilterItems();
|
|
|
+ //调整房间
|
|
|
+ filterItems.add(new FilterItemInfo("adjustRoom", dormitoryIdSet, 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("parent.billState", "1,2", CompareType.INCLUDE));
|
|
|
+ filterInfo.setMaskString("#0 and ((#1 and #2) or (#3 and #4)) and #5");
|
|
|
+ SelectorItemCollection sic = new SelectorItemCollection();
|
|
|
+ sic.add("checkInRoom.id");
|
|
|
+ sic.add("person.personType.id");
|
|
|
+ sic.add("person.personType.name");
|
|
|
+ sic.add("person.name");
|
|
|
+ sic.add("occupants.id");
|
|
|
+ sic.add("adjustRoom.id");
|
|
|
+ sic.add("parent.number");
|
|
|
+ EntityViewInfo viewInfo = EntityViewInfo.getInstance(filterInfo, sic, null);
|
|
|
+ RoomChangeApplicationEntryCollection roomChangeApplicationEntryCol = iRoomChangeApplicationEntry.getRoomChangeApplicationEntryCollection(viewInfo);
|
|
|
+ for (int i = 0; i < roomChangeApplicationEntryCol.size(); i++) {
|
|
|
+ RoomChangeApplicationEntryInfo roomChangeApplicationEntryInfo = roomChangeApplicationEntryCol.get(i);
|
|
|
+ //房间
|
|
|
+ PersonInfo person = roomChangeApplicationEntryInfo.getPerson();
|
|
|
+ String personName = person.getName();
|
|
|
+ //调整房间
|
|
|
+ DormitoryInfo adjustRoom = roomChangeApplicationEntryInfo.getAdjustRoom();
|
|
|
+ if (adjustRoom == null) {
|
|
|
+ String number = roomChangeApplicationEntryInfo.getParent().getNumber();
|
|
|
+ throw new BOSException("换宿单编码[" + number + "]中存在调整房间为空的数据,请检查换宿单数据正确性!");
|
|
|
+ }
|
|
|
+ String dormitoryId = adjustRoom.getId().toString();
|
|
|
+ //人员类型
|
|
|
+ PersonDormitoryTypeInfo personDormitoryType = (PersonDormitoryTypeInfo) person.get("personType");
|
|
|
+ if (personDormitoryType == null) {
|
|
|
+ throw new BOSException("员工[" + personName + "]的人员类别为空,请及时维护!");
|
|
|
+ }
|
|
|
+ if (dormitoryMap.containsKey(dormitoryId)) {
|
|
|
+ Map<String, Object> map = dormitoryMap.get(dormitoryId);
|
|
|
+ //累计已住人数
|
|
|
+ int count = (int) map.getOrDefault("count", 0);
|
|
|
+ map.put("count", count + 1);
|
|
|
+ } else {
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ map.put("count", 1);
|
|
|
+ map.put("personDormitoryTypeId", personDormitoryType.getId().toString());
|
|
|
+ dormitoryMap.put(dormitoryId, map);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 根据入住日期和退宿日期算出入住申请单状态为申请中的已住人数
|
|
|
*
|
|
@@ -140,7 +220,8 @@ public class GetOptionalRoomIdsService implements IHRMsfService {
|
|
|
Date checkInDate,
|
|
|
Date checkoutDate,
|
|
|
Map<String, Map<String, Object>> dormitoryMap,
|
|
|
- Set<String> dormitoryIdSet) throws BOSException, ShrWebBizException {
|
|
|
+ Set<String> dormitoryIdSet
|
|
|
+ ) throws BOSException {
|
|
|
ICheckInApplicationEntry iCheckInApplicationEntry = CheckInApplicationEntryFactory.getLocalInstance(ctx);
|
|
|
FilterInfo filterInfo = new FilterInfo();
|
|
|
FilterItemCollection filterItems = filterInfo.getFilterItems();
|
|
@@ -152,9 +233,11 @@ public class GetOptionalRoomIdsService implements IHRMsfService {
|
|
|
//入住日期在申请入住日期和申请退宿日期之间
|
|
|
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", CompareType.INCLUDE));
|
|
|
//单据状态等于审批中
|
|
|
//filterItems.add(new FilterItemInfo("parent.billState", "3"));
|
|
|
- filterInfo.setMaskString("#0 and ((#1 and #2) or (#3 and #4)) ");
|
|
|
+ filterInfo.setMaskString("#0 and ((#1 and #2) or (#3 and #4)) and #5 ");
|
|
|
//filterInfo.setMaskString("#0 and ((#1 and #2) or (#3 and #4)) and #5 ");
|
|
|
SelectorItemCollection sic = new SelectorItemCollection();
|
|
|
sic.add("checkInRoom.id");
|
|
@@ -171,7 +254,7 @@ public class GetOptionalRoomIdsService implements IHRMsfService {
|
|
|
//人员类型
|
|
|
PersonDormitoryTypeInfo personDormitoryType = (PersonDormitoryTypeInfo) person.get("personType");
|
|
|
if (personDormitoryType == null) {
|
|
|
- throw new ShrWebBizException("员工[" + personName + "]的人员类别为空,请及时维护!");
|
|
|
+ throw new BOSException("员工[" + personName + "]的人员类别为空,请及时维护!");
|
|
|
}
|
|
|
if (dormitoryMap.containsKey(dormitoryId)) {
|
|
|
Map<String, Object> map = dormitoryMap.get(dormitoryId);
|
|
@@ -219,6 +302,7 @@ public class GetOptionalRoomIdsService implements IHRMsfService {
|
|
|
SelectorItemCollection sic = new SelectorItemCollection();
|
|
|
sic.add("Dormitory.id");
|
|
|
sic.add("PersonDormitoryType.id");
|
|
|
+ sic.add("person.personType.id");
|
|
|
EntityViewInfo viewInfo = EntityViewInfo.getInstance(filterInfo, sic, null);
|
|
|
OccupantsCollection occupantsCollection = iOccupants.getOccupantsCollection(viewInfo);
|
|
|
for (int i = 0; i < occupantsCollection.size(); i++) {
|
|
@@ -227,7 +311,7 @@ public class GetOptionalRoomIdsService implements IHRMsfService {
|
|
|
DormitoryInfo dormitory = occupantsInfo.getDormitory();
|
|
|
String dormitoryId = dormitory.getId().toString();
|
|
|
//人员宿舍分类
|
|
|
- PersonDormitoryTypeInfo personDormitoryType = occupantsInfo.getPersonDormitoryType();
|
|
|
+ PersonDormitoryTypeInfo personDormitoryType = (PersonDormitoryTypeInfo) occupantsInfo.getPerson().get("personType");
|
|
|
if (dormitoryMap.containsKey(dormitoryId)) {
|
|
|
Map<String, Object> map = dormitoryMap.get(dormitoryId);
|
|
|
//累计已住人数
|