Skip to content

Commit d6b30c6

Browse files
committed
优化时间不对bug
1 parent 09095d6 commit d6b30c6

5 files changed

Lines changed: 61 additions & 101 deletions

File tree

java110-core/src/main/java/com/java110/core/smo/impl/ComputeFeeSMOImpl.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -762,16 +762,15 @@ public Date getFeeEndTimeByCycles(FeeDto feeDto, String cycles) {
762762
} else {
763763
endCalender.setTime(feeDto.getImportFeeEndTime());
764764
}
765-
} else if (FeeDto.FEE_FLAG_CYCLE_ONCE.equals(feeDto.getFeeFlag())) {
766-
if (feeDto.getDeadlineTime() == null) {
767-
throw new IllegalArgumentException("间接性费用未设置结束时间");
765+
} else {
766+
Date deadLineTime = feeDto.getDeadlineTime();
767+
if (deadLineTime == null) {
768+
deadLineTime = feeDto.getConfigEndTime();
768769
}
769-
if ((endCalender.getTime()).after(feeDto.getDeadlineTime())) {
770+
if ((endCalender.getTime()).after(deadLineTime)) {
770771
endCalender.setTime(feeDto.getDeadlineTime());
771-
}
772-
} else {
773-
if ((endCalender.getTime()).after(feeDto.getConfigEndTime())) {
774-
endCalender.setTime(feeDto.getConfigEndTime());
772+
} else {
773+
endCalender.add(Calendar.SECOND, -1);
775774
}
776775
}
777776

java110-utils/src/main/java/com/java110/utils/util/DateUtil.java

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -412,10 +412,10 @@ public static Date getNextMonthFirstDate(String curDate) {
412412

413413
public static Date getNextMonthFirstDate(Date curDate) {
414414

415-
return getNextMonthFirstDate(curDate,1);
415+
return getNextMonthFirstDate(curDate, 1);
416416
}
417417

418-
public static Date getNextMonthFirstDate(Date curDate,int monthCount) {
418+
public static Date getNextMonthFirstDate(Date curDate, int monthCount) {
419419

420420
Calendar curDateCal = Calendar.getInstance();
421421
curDateCal.setTime(curDate);
@@ -824,16 +824,16 @@ public static boolean sameMonthDay(Date startDate, Date endDate) {
824824
endCalender.setTime(endDate);
825825
if (
826826
startCalendar.get(Calendar.DAY_OF_MONTH) == endCalender.get(Calendar.DAY_OF_MONTH)
827-
&& startCalendar.get(Calendar.HOUR_OF_DAY) == endCalender.get(Calendar.HOUR_OF_DAY)
827+
&& startCalendar.get(Calendar.HOUR_OF_DAY) == endCalender.get(Calendar.HOUR_OF_DAY)
828828
) {
829829
return true;
830830
}
831831

832832
return false;
833833
}
834834

835-
public static double dayCompare(Date fromDate, Date toDate){
836-
return dayCompare(fromDate,toDate,false);
835+
public static double dayCompare(Date fromDate, Date toDate) {
836+
return dayCompare(fromDate, toDate, false);
837837
}
838838

839839
/**
@@ -845,12 +845,12 @@ public static double dayCompare(Date fromDate, Date toDate){
845845
* @param toDate
846846
* @return
847847
*/
848-
public static double dayCompare(Date fromDate, Date toDate,boolean plusOneSec) {
848+
public static double dayCompare(Date fromDate, Date toDate, boolean plusOneSec) {
849849

850-
if(plusOneSec){
850+
if (plusOneSec) {
851851
Calendar toD = Calendar.getInstance();
852852
toD.setTime(toDate);
853-
toD.add(Calendar.SECOND,1);
853+
toD.add(Calendar.SECOND, 1);
854854
toDate = toD.getTime();
855855
}
856856

@@ -866,8 +866,8 @@ public static double dayCompare(Date fromDate, Date toDate,boolean plusOneSec) {
866866
Calendar fromDateCal = Calendar.getInstance();
867867
fromDateCal.setTime(fromDate);
868868
fromDateCal.set(Calendar.DAY_OF_MONTH, 1);
869-
fromDateCal.set(Calendar.HOUR_OF_DAY,0);
870-
fromDateCal.set(Calendar.MINUTE,0);
869+
fromDateCal.set(Calendar.HOUR_OF_DAY, 0);
870+
fromDateCal.set(Calendar.MINUTE, 0);
871871
if (fromDate.getTime() > fromDateCal.getTime().getTime()) {
872872
fromDateCal.add(Calendar.MONTH, 1);
873873
firstDay = false;
@@ -878,8 +878,8 @@ public static double dayCompare(Date fromDate, Date toDate,boolean plusOneSec) {
878878
Calendar toDateCal = Calendar.getInstance();
879879
toDateCal.setTime(toDate);
880880
toDateCal.set(Calendar.DAY_OF_MONTH, 1);
881-
toDateCal.set(Calendar.HOUR_OF_DAY,0);
882-
toDateCal.set(Calendar.MINUTE,0);
881+
toDateCal.set(Calendar.HOUR_OF_DAY, 0);
882+
toDateCal.set(Calendar.MINUTE, 0);
883883

884884
if (toDate.getTime() > toDateCal.getTime().getTime()) {
885885
toDateFirstDate = toDateCal.getTime();
@@ -933,4 +933,16 @@ public static Date getTargetEndTime(double month, Date startDate) {
933933
endDate.add(Calendar.HOUR_OF_DAY, hour.intValue());
934934
return endDate.getTime();
935935
}
936+
937+
public static String getNextSecTime(String time) {
938+
Date tTime = getDateFromStringA(time);
939+
return getNextSecTime(tTime);
940+
}
941+
942+
public static String getNextSecTime(Date time) {
943+
Calendar calendar = Calendar.getInstance();
944+
calendar.setTime(time);
945+
calendar.add(Calendar.SECOND, 1);
946+
return getFormatTimeStringA(calendar.getTime());
947+
}
936948
}

service-fee/src/main/java/com/java110/fee/cmd/fee/PayBatchFeeCmd.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ public void validate(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSO
127127
}
128128
Date maxEndTime = feeDtos.get(0).getDeadlineTime();
129129
//周期性费用
130-
if (maxEndTime == null || FeeDto.FEE_FLAG_CYCLE.equals(feeConfigDtos.get(0).getFeeFlag())) {
130+
if (maxEndTime == null) {
131131
maxEndTime = DateUtil.getDateFromStringA(feeConfigDtos.get(0).getEndTime());
132132
}
133133

@@ -230,7 +230,7 @@ private void doPayFee(PayFeeDataDto payFeeDataDto, String receiptCode) {
230230

231231
PayFeePo payFeePo = new PayFeePo();
232232
payFeePo.setFeeId(payFeeDataDto.getFeeId());
233-
payFeePo.setEndTime(payFeeDetailPo.getEndTime());
233+
payFeePo.setEndTime(DateUtil.getNextSecTime(payFeeDetailPo.getEndTime()));
234234
payFeePo.setState(FeeDto.STATE_FINISH);
235235

236236
Date maxTime = payFeeDataDto.getFeeDto().getDeadlineTime();

service-fee/src/main/java/com/java110/fee/cmd/fee/PayFeeCmd.java

Lines changed: 22 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.alibaba.fastjson.JSONObject;
55
import com.java110.core.annotation.Java110Cmd;
66
import com.java110.core.annotation.Java110Transactional;
7+
import com.java110.core.context.CmdContextUtils;
78
import com.java110.core.context.ICmdDataFlowContext;
89
import com.java110.core.event.cmd.Cmd;
910
import com.java110.core.event.cmd.CmdEvent;
@@ -142,7 +143,7 @@ public void validate(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSO
142143
feeDto = feeDtos.get(0);
143144

144145
if (FeeDto.STATE_FINISH.equals(feeDto.getState())) {
145-
throw new IllegalArgumentException("收费已经结束,不能再缴费");
146+
throw new CmdException("收费已经结束,不能再缴费");
146147
}
147148

148149
Date endTime = feeDto.getEndTime();
@@ -151,22 +152,15 @@ public void validate(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSO
151152
feeConfigDto.setConfigId(feeDto.getConfigId());
152153
feeConfigDto.setCommunityId(reqJson.getString("communityId"));
153154
List<FeeConfigDto> feeConfigDtos = feeConfigInnerServiceSMOImpl.queryFeeConfigs(feeConfigDto);
154-
155-
if (feeConfigDtos == null || feeConfigDtos.size() != 1) {
156-
throw new IllegalArgumentException("费用项不存在");
155+
if (ListUtil.isNull(feeConfigDtos)) {
156+
throw new CmdException("费用项不存在");
157157
}
158-
//一次性费用 和间接性费用
158+
// 获取费用结束时间
159159
Date maxEndTime = feeDtos.get(0).getDeadlineTime();
160160
//周期性费用
161-
if (maxEndTime == null || FeeDto.FEE_FLAG_CYCLE.equals(feeConfigDtos.get(0).getFeeFlag())) {
161+
if (maxEndTime == null) {
162162
maxEndTime = DateUtil.getDateFromStringA(feeConfigDtos.get(0).getEndTime());
163163
}
164-
// Date maxEndTime = null;
165-
// if (!StringUtil.isEmpty(feeDto.getFeeFlag()) && feeDto.getFeeFlag().equals(FeeDto.FEE_FLAG_CYCLE)) { //周期性费用
166-
// maxEndTime = DateUtil.getDateFromStringA(feeConfigDtos.get(0).getEndTime());
167-
// } else { //一次性费用 和间接性费用
168-
// maxEndTime = feeDtos.get(0).getDeadlineTime();
169-
// }
170164

171165
if (maxEndTime != null && endTime != null && !FeeDto.FEE_FLAG_ONCE.equals(feeDtos.get(0).getFeeFlag())) {
172166
Date newDate = DateUtil.stepMonth(endTime, reqJson.getDouble("cycles").intValue());
@@ -179,17 +173,15 @@ public void validate(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSO
179173
for (int paramIndex = 0; paramIndex < selectUserAccount.size(); paramIndex++) {
180174
JSONObject param = selectUserAccount.getJSONObject(paramIndex);
181175
String maximumNumber = param.getString("maximumNumber");
182-
183176
}
184177

185178

186-
187179
//todo 是否按缴费时间段缴费
188180
validateIfPayFeeStartEndDate(reqJson, feeConfigDtos.get(0));
189181

190182
//todo 校验 优惠
191183
JSONArray selectDiscounts = reqJson.getJSONArray("selectDiscount");
192-
if(!ListUtil.isNull(selectDiscounts)) {
184+
if (!ListUtil.isNull(selectDiscounts)) {
193185
for (int discountIndex = 0; discountIndex < selectDiscounts.size(); discountIndex++) {
194186
JSONObject param = selectDiscounts.getJSONObject(discountIndex);
195187
Assert.hasKeyAndValue(param, "discountId", "未包含优惠ID");
@@ -205,7 +197,7 @@ public void doCmd(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONOb
205197
logger.debug("paramObj : {}", paramObj);
206198
String payOrderId = paramObj.getString("payOrderId");
207199

208-
String userId = cmdDataFlowContext.getReqHeaders().get("user-id");
200+
String userId = CmdContextUtils.getUserId(cmdDataFlowContext);
209201
UserDto userDto = new UserDto();
210202
userDto.setUserId(userId);
211203
List<UserDto> userDtos = userV1InnerServiceSMOImpl.queryUsers(userDto);
@@ -227,16 +219,18 @@ public void doCmd(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONOb
227219
FeeDto feeInfo = (FeeDto) paramObj.get("feeInfo");
228220
endTime = feeInfo.getEndTime();
229221
feeDetail.put("payableAmount", feeDetail.getString("receivableAmount"));
230-
//todo 封装 修改费用时间报文
231-
JSONObject fee = modifyFee(paramObj);
232-
payFeePo = BeanConvertUtil.covertBean(fee, PayFeePo.class);
222+
233223
PayFeeDetailPo payFeeDetailPo = BeanConvertUtil.covertBean(feeDetail, PayFeeDetailPo.class);
234224
payFeeDetailPo.setReceivableAmount(feeDetail.getString("totalFeePrice"));
235225
//todo 缓存收据编号
236226
CommonCache.setValue(payFeeDetailPo.getDetailId() + CommonCache.RECEIPT_CODE, receiptCode, CommonCache.DEFAULT_EXPIRETIME_TWO_MIN);
237227

228+
//todo 封装 修改费用时间报文
229+
JSONObject fee = modifyFee(paramObj, payFeeDetailPo);
230+
payFeePo = BeanConvertUtil.covertBean(fee, PayFeePo.class);
231+
238232
//todo 判断是否有折扣规则
239-
hasDiscount(paramObj, payFeePo, payFeeDetailPo,feeInfo);
233+
hasDiscount(paramObj, payFeePo, payFeeDetailPo, feeInfo);
240234

241235
// todo 处理用户账户
242236
dealUserAccount(paramObj, payFeeDetailPo);
@@ -450,7 +444,7 @@ private void dealUserAccount(JSONObject paramObj, PayFeeDetailPo payFeeDetailPo)
450444
* @param payFeeDetailPo
451445
* @throws ParseException
452446
*/
453-
private void hasDiscount(JSONObject paramObj, PayFeePo payFeePo, PayFeeDetailPo payFeeDetailPo,FeeDto feeDto) throws ParseException {
447+
private void hasDiscount(JSONObject paramObj, PayFeePo payFeePo, PayFeeDetailPo payFeeDetailPo, FeeDto feeDto) throws ParseException {
454448
if (!paramObj.containsKey("selectDiscount")) {
455449
return;
456450
}
@@ -596,7 +590,7 @@ private void updateCarEndTime(JSONObject paramObj) {
596590
feeDto.setCommunityId(paramObj.getString("communityId"));
597591
List<FeeDto> feeDtos = feeInnerServiceSMOImpl.queryFees(feeDto);
598592

599-
if (feeDtos == null || feeDtos.size() < 1) {
593+
if (ListUtil.isNull(feeDtos)) {
600594
return;
601595
}
602596
if (!FeeDto.PAYER_OBJ_TYPE_CAR.equals(feeDtos.get(0).getPayerObjType())) {
@@ -609,7 +603,7 @@ private void updateCarEndTime(JSONObject paramObj) {
609603
ownerCarDto.setCarTypeCd("1001"); //业主车辆
610604
List<OwnerCarDto> ownerCarDtos = ownerCarInnerServiceSMOImpl.queryOwnerCars(ownerCarDto);
611605

612-
if (ownerCarDtos == null || ownerCarDtos.size() < 1) {
606+
if (ListUtil.isNull(ownerCarDtos)) {
613607
return;
614608
}
615609
//获取车位id
@@ -778,7 +772,6 @@ public JSONObject addFeeDetail(JSONObject paramInJson) {
778772
}
779773
feeDto = feeDtos.get(0);
780774
businessFeeDetail.put("startTime", DateUtil.getFormatTimeStringA(feeDto.getEndTime()));
781-
int hours = 0;
782775
Date targetEndTime = null;
783776
BigDecimal cycles = null;
784777
Map feePriceAll = computeFeeSMOImpl.getFeePrice(feeDto);
@@ -871,60 +864,15 @@ public JSONObject addFeeDetail(JSONObject paramInJson) {
871864
return businessFeeDetail;
872865
}
873866

874-
public JSONObject modifyFee(JSONObject paramInJson) {
867+
public JSONObject modifyFee(JSONObject paramInJson, PayFeeDetailPo payFeeDetailPo) {
875868

876869
JSONObject businessFee = new JSONObject();
877870
FeeDto feeInfo = (FeeDto) paramInJson.get("feeInfo");
878-
Date endTime = feeInfo.getEndTime();
879-
Calendar endCalender = Calendar.getInstance();
880-
endCalender.setTime(endTime);
881-
int hours = 0;
882-
//-101自定义金额 -102自定义周期 -103 自定义结束时间
883-
if ("-101".equals(paramInJson.getString("cycles"))) {
884-
endCalender = getTargetEndTime(endCalender, Double.parseDouble(paramInJson.getString("tmpCycles")));
885-
} else if ("-103".equals(paramInJson.getString("cycles"))) {
886-
String custEndTime = paramInJson.getString("custEndTime");
887-
Date endDates = DateUtil.getDateFromStringB(custEndTime);
888-
Calendar c = Calendar.getInstance();
889-
c.setTime(endDates);
890-
c.add(Calendar.DAY_OF_MONTH, 1);
891-
endDates = c.getTime();//这是明天
892-
endCalender.setTime(endDates);
893-
} else if ("-105".equals(paramInJson.getString("cycles"))) {
894-
String customEndTime = paramInJson.getString("customEndTime");
895-
Date endDates = DateUtil.getDateFromStringB(customEndTime);
896-
Calendar c = Calendar.getInstance();
897-
c.setTime(endDates);
898-
c.add(Calendar.DAY_OF_MONTH, 1);
899-
endDates = c.getTime();//这是明天
900-
endCalender.setTime(endDates);
901-
} else {
902-
endCalender.add(Calendar.MONTH, Integer.parseInt(paramInJson.getString("cycles")));
903-
}
904-
if (FeeDto.FEE_FLAG_ONCE.equals(feeInfo.getFeeFlag())) {
905-
if (feeInfo.getDeadlineTime() != null) {
906-
endCalender.setTime(feeInfo.getDeadlineTime());
907-
} else if (!StringUtil.isEmpty(feeInfo.getCurDegrees())) {
908-
endCalender.setTime(feeInfo.getCurReadingTime());
909-
} else if (feeInfo.getImportFeeEndTime() == null) {
910-
endCalender.setTime(feeInfo.getConfigEndTime());
911-
} else {
912-
endCalender.setTime(feeInfo.getImportFeeEndTime());
913-
}
914-
//businessFee.put("state",FeeDto.STATE_FINISH);
915-
feeInfo.setState(FeeDto.STATE_FINISH);
916-
}
917-
feeInfo.setEndTime(endCalender.getTime());
918-
Date maxEndTime = feeInfo.getDeadlineTime();
919-
if (FeeDto.FEE_FLAG_CYCLE.equals(feeInfo.getFeeFlag())) {
920-
maxEndTime = feeInfo.getConfigEndTime();
921-
}
922871

923-
if (FeeDto.FEE_FLAG_CYCLE_ONCE.equals(feeInfo.getFeeFlag())) {
924-
maxEndTime = feeInfo.getMaxEndTime();
925-
}
872+
String endTime = DateUtil.getNextSecTime(payFeeDetailPo.getEndTime());
873+
feeInfo.setEndTime(DateUtil.getDateFromStringA(endTime));
926874

927-
//如果间歇性费用没有设置结束时间 则取费用项的
875+
Date maxEndTime = feeInfo.getMaxEndTime();
928876
if (maxEndTime == null) {
929877
maxEndTime = feeInfo.getConfigEndTime();
930878
}
@@ -965,7 +913,7 @@ public JSONObject modifyFee(JSONObject paramInJson) {
965913
public void dealAccount(JSONObject paramObj) {
966914
//判断选择的账号
967915
JSONArray jsonArray = paramObj.getJSONArray("selectUserAccount");
968-
if (jsonArray == null || jsonArray.size() < 1) {
916+
if (ListUtil.isNull(jsonArray)) {
969917
return;
970918
}
971919
List<AccountDto> accountDtos = new ArrayList<>();

service-fee/src/main/java/com/java110/fee/cmd/fee/PayOweFeeCmd.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.alibaba.fastjson.JSONObject;
55
import com.java110.core.annotation.Java110Cmd;
66
import com.java110.core.annotation.Java110Transactional;
7+
import com.java110.core.context.CmdContextUtils;
78
import com.java110.core.context.ICmdDataFlowContext;
89
import com.java110.core.event.cmd.Cmd;
910
import com.java110.core.event.cmd.CmdEvent;
@@ -145,7 +146,7 @@ public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject req
145146
@Java110Transactional
146147
public void doCmd(CmdEvent event, ICmdDataFlowContext dataFlowContext, JSONObject paramObj) throws CmdException, ParseException {
147148
logger.info("======欠费缴费返回======:" + JSONArray.toJSONString(paramObj));
148-
String userId = dataFlowContext.getReqHeaders().get("user-id");
149+
String userId = CmdContextUtils.getUserId(dataFlowContext);
149150
UserDto userDto = new UserDto();
150151
userDto.setUserId(userId);
151152
List<UserDto> userDtos = userV1InnerServiceSMOImpl.queryUsers(userDto);
@@ -223,15 +224,15 @@ public void modifyOweFee(JSONObject paramInJson, ICmdDataFlowContext dataFlowCon
223224
FeeDto feeInfo = (FeeDto) paramInJson.get("feeInfo");
224225
Map feeMap = BeanConvertUtil.beanCovertMap(feeInfo);
225226
feeMap.put("startTime", DateUtil.getFormatTimeString(feeInfo.getStartTime(), DateUtil.DATE_FORMATE_STRING_A));
226-
feeMap.put("endTime", paramInJson.getString("endTime"));
227+
feeMap.put("endTime", DateUtil.getNextSecTime(paramInJson.getString("endTime")));
227228
feeMap.put("cycles", paramInJson.getString("cycles"));
228229
feeMap.put("configEndTime", feeInfo.getConfigEndTime());
229230
if (FeeDto.FEE_FLAG_ONCE.equals(feeInfo.getFeeFlag())) { //缴费结束
230231
feeMap.put("state", FeeDto.STATE_FINISH);
231232
}
232-
Date maxEndTime = feeInfo.getConfigEndTime();
233-
if (!FeeDto.FEE_FLAG_CYCLE.equals(feeInfo.getFeeFlag())) {
234-
maxEndTime = feeInfo.getDeadlineTime();
233+
Date maxEndTime = feeInfo.getMaxEndTime();
234+
if (maxEndTime == null) {
235+
maxEndTime = feeInfo.getConfigEndTime();
235236
}
236237
if (maxEndTime != null) { //这里数据问题的情况下
237238
Date endTime = DateUtil.getDateFromStringA(paramInJson.getString("endTime"));

0 commit comments

Comments
 (0)