|
|
@@ -1299,46 +1299,88 @@ public class OrderServiceImpl extends ServiceImpl<AppOrderMapper, AppOrder> impl
|
|
|
appIsinMapper.insert(appIsin);
|
|
|
}
|
|
|
if (Objects.equals(appOrderProInfo.getType(), CommonConstant.ORDER_PRO_INFO_TYPE_0)) {
|
|
|
+ log.info("========== 场地订单门禁设置开始 ==========");
|
|
|
+ log.info("订单ID: {}, 用户: {}, useDateStr: {}, frameTimeStr: {}",
|
|
|
+ appOrderProInfo.getId(), appOrderProInfo.getUserName(),
|
|
|
+ appOrderProInfo.getUseDateStr(), appOrderProInfo.getFrameTimeStr());
|
|
|
+
|
|
|
FamilyMembers familyMembers = familyMembersMapper.selectById(appOrderProInfo.getFamilyUserId());
|
|
|
- AppOrderProInfo proInfo1 = appOrderProInfoMapper.selectOne(Wrappers.<AppOrderProInfo>lambdaQuery()
|
|
|
+ // 查询该用户所有待使用的场地订单,找出最早和最晚的使用日期
|
|
|
+ List<AppOrderProInfo> allFieldOrders = appOrderProInfoMapper.selectList(Wrappers.<AppOrderProInfo>lambdaQuery()
|
|
|
.eq(AppOrderProInfo::getFamilyUserId, appOrderProInfo.getFamilyUserId())
|
|
|
.eq(AppOrderProInfo::getOrderStatus, 1)
|
|
|
.eq(AppOrderProInfo::getType, 0)
|
|
|
- .orderByDesc(AppOrderProInfo::getExpireTime)
|
|
|
- .last("limit 1"));
|
|
|
- AppOrderProInfo proInfo2 = appOrderProInfoMapper.selectOne(Wrappers.<AppOrderProInfo>lambdaQuery()
|
|
|
- .eq(AppOrderProInfo::getFamilyUserId, appOrderProInfo.getFamilyUserId())
|
|
|
- .eq(AppOrderProInfo::getOrderStatus, 1)
|
|
|
- .eq(AppOrderProInfo::getType, 0)
|
|
|
- .orderByAsc(AppOrderProInfo::getExpireTime)
|
|
|
- .last("limit 1"));
|
|
|
- for (AppDevice appDevice : appDeviceMapper.selectList(Wrappers.<AppDevice>lambdaQuery().eq(AppDevice::getOrgCode, appOrder.getOrgCode()))) {
|
|
|
- if(proInfo1 != null && proInfo2 != null){
|
|
|
- // 场地预约订单:使用最早和最晚的过期时间,并传入frameTimeStr指定每日时间段
|
|
|
- String addUser = addUser(new DateTime(proInfo2.getExpireTime()),
|
|
|
- appDevice.getDeviceSerial(),
|
|
|
- appOrderProInfo.getUserName(),
|
|
|
- familyMembers.getId(), new DateTime(proInfo1.getExpireTime()), appOrderProInfo.getFrameTimeStr());
|
|
|
- String addFace = addFace(appDevice.getDeviceSerial(), familyMembers.getId(),
|
|
|
- familyMembers.getRealNameImg());
|
|
|
- JsonObject addUserJson = JsonParser.parseString(addUser).getAsJsonObject();
|
|
|
- JsonObject addFaceJson = JsonParser.parseString(addFace).getAsJsonObject();
|
|
|
- if (addUserJson.get("code").getAsInt() != 0 && addFaceJson.get("code").getAsInt() != 0)
|
|
|
- throw new JeecgBootException("设备录入用户信息失败!请联系管理员");
|
|
|
- }else {
|
|
|
- // 只有单个订单:使用开始销售日期,并传入frameTimeStr
|
|
|
- String addUser = addUser(appSitePriceRulesMapper.selectById(appOrderProInfo.getProductId()).getDateOfSale(),
|
|
|
- appDevice.getDeviceSerial(),
|
|
|
- appOrderProInfo.getUserName(),
|
|
|
- familyMembers.getId(), null, appOrderProInfo.getFrameTimeStr());
|
|
|
- String addFace = addFace(appDevice.getDeviceSerial(), familyMembers.getId(),
|
|
|
- familyMembers.getRealNameImg());
|
|
|
- JsonObject addUserJson = JsonParser.parseString(addUser).getAsJsonObject();
|
|
|
- JsonObject addFaceJson = JsonParser.parseString(addFace).getAsJsonObject();
|
|
|
- if (addUserJson.get("code").getAsInt() != 0 && addFaceJson.get("code").getAsInt() != 0)
|
|
|
- throw new JeecgBootException("设备录入用户信息失败!请联系管理员");
|
|
|
+ .isNotNull(AppOrderProInfo::getUseDateStr));
|
|
|
+
|
|
|
+ log.info("查询到用户 {} 的场地订单数量: {}", familyMembers.getFullName(), allFieldOrders.size());
|
|
|
+
|
|
|
+ if (CollUtil.isNotEmpty(allFieldOrders)) {
|
|
|
+ // 解析所有订单的useDateStr,找出最早和最晚的日期
|
|
|
+ LocalDate earliestDate = null;
|
|
|
+ LocalDate latestDate = null;
|
|
|
+
|
|
|
+ for (AppOrderProInfo fieldOrder : allFieldOrders) {
|
|
|
+ String useDateStr = fieldOrder.getUseDateStr();
|
|
|
+ if (useDateStr != null && !useDateStr.isEmpty()) {
|
|
|
+ try {
|
|
|
+ // 解析日期 "yyyy-MM-dd"
|
|
|
+ LocalDate useDate = LocalDate.parse(useDateStr);
|
|
|
+ log.info(" 订单 {} 的useDateStr: {} -> 解析为: {}",
|
|
|
+ fieldOrder.getId(), useDateStr, useDate);
|
|
|
+
|
|
|
+ // 找出最早的日期
|
|
|
+ if (earliestDate == null || useDate.isBefore(earliestDate)) {
|
|
|
+ earliestDate = useDate;
|
|
|
+ }
|
|
|
+ // 找出最晚的日期
|
|
|
+ if (latestDate == null || useDate.isAfter(latestDate)) {
|
|
|
+ latestDate = useDate;
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ // 解析失败,跳过该订单
|
|
|
+ log.error("解析场地订单useDateStr失败: {}", useDateStr, e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ log.info("日期范围统计 - 最早: {}, 最晚: {}", earliestDate, latestDate);
|
|
|
+
|
|
|
+ // 使用解析到的日期范围更新门禁权限
|
|
|
+ if (earliestDate != null && latestDate != null) {
|
|
|
+ for (AppDevice appDevice : appDeviceMapper.selectList(Wrappers.<AppDevice>lambdaQuery().eq(AppDevice::getOrgCode, appOrder.getOrgCode()))) {
|
|
|
+ if (null != appDevice) {
|
|
|
+ // 将LocalDate转换为Date类型,使用正午12:00避免时区问题
|
|
|
+ Date startDate = Date.from(earliestDate.atTime(12, 0).atZone(ZoneId.systemDefault()).toInstant());
|
|
|
+ Date endDate = Date.from(latestDate.atTime(12, 0).atZone(ZoneId.systemDefault()).toInstant());
|
|
|
+
|
|
|
+ log.info("转换为Date - startDate: {}, endDate: {}", startDate, endDate);
|
|
|
+ log.info("准备调用addUser - deviceSerial: {}, employeeNo: {}, frameTimeStr: {}",
|
|
|
+ appDevice.getDeviceSerial(), familyMembers.getId(), appOrderProInfo.getFrameTimeStr());
|
|
|
+
|
|
|
+ String addUser = addUser(
|
|
|
+ startDate, // 使用最早的使用日期
|
|
|
+ appDevice.getDeviceSerial(),
|
|
|
+ appOrderProInfo.getUserName(),
|
|
|
+ familyMembers.getId(),
|
|
|
+ endDate, // 使用最晚的使用日期
|
|
|
+ appOrderProInfo.getFrameTimeStr()); // 传入时间段
|
|
|
+
|
|
|
+ log.info("addUser返回结果: {}", addUser);
|
|
|
+
|
|
|
+ String addFace = addFace(appDevice.getDeviceSerial(), familyMembers.getId(),
|
|
|
+ familyMembers.getRealNameImg());
|
|
|
+
|
|
|
+ log.info("addFace返回结果: {}", addFace);
|
|
|
+
|
|
|
+ JsonObject addUserJson = JsonParser.parseString(addUser).getAsJsonObject();
|
|
|
+ JsonObject addFaceJson = JsonParser.parseString(addFace).getAsJsonObject();
|
|
|
+ if (addUserJson.get("code").getAsInt() != 0 && addFaceJson.get("code").getAsInt() != 0)
|
|
|
+ throw new JeecgBootException("设备录入用户信息失败!请联系管理员");
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
+ log.info("========== 场地订单门禁设置结束 ==========");
|
|
|
}
|
|
|
}
|
|
|
|