|
|
@@ -1,25 +1,32 @@
|
|
|
package org.dromara.backstage.business.errfill;
|
|
|
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
import cn.hutool.json.JSONUtil;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import org.dromara.backstage.basics.domain.vo.PtMealTypeVo;
|
|
|
import org.dromara.backstage.basics.service.IPtMealtypeService;
|
|
|
import org.dromara.backstage.cardCenter.domain.vo.PtCardVo;
|
|
|
import org.dromara.backstage.cardCenter.service.IPtCardService;
|
|
|
-import org.dromara.backstage.consumption.domain.XfConsumeDetail;
|
|
|
import org.dromara.backstage.consumption.domain.bo.ConsumptionBo;
|
|
|
import org.dromara.backstage.consumption.domain.bo.XfConsumeDetailBo;
|
|
|
+import org.dromara.backstage.consumption.domain.bo.XfTermTotalBo;
|
|
|
+import org.dromara.backstage.consumption.domain.bo.XfUserTotalBo;
|
|
|
import org.dromara.backstage.consumption.domain.vo.XfConsumeDetailVo;
|
|
|
+import org.dromara.backstage.consumption.domain.vo.XfTermTotalVo;
|
|
|
import org.dromara.backstage.consumption.domain.vo.XfTermVo;
|
|
|
+import org.dromara.backstage.consumption.domain.vo.XfUserTotalVo;
|
|
|
import org.dromara.backstage.consumption.service.IXfConsumeDetailService;
|
|
|
import org.dromara.backstage.consumption.service.IXfTermService;
|
|
|
+import org.dromara.backstage.consumption.service.IXfTermTotalService;
|
|
|
+import org.dromara.backstage.consumption.service.IXfUserTotalService;
|
|
|
import org.dromara.backstage.payment.domain.bo.PtBagBo;
|
|
|
import org.dromara.backstage.payment.domain.vo.PtBagVo;
|
|
|
import org.dromara.backstage.payment.domain.vo.PtUserAccountVo;
|
|
|
import org.dromara.backstage.payment.service.IPtBagService;
|
|
|
import org.dromara.backstage.payment.service.IPtUserAccountService;
|
|
|
import org.dromara.common.core.enums.BalanceUpdateEnum;
|
|
|
+import org.dromara.common.core.enums.SystemUseTypeEnum;
|
|
|
import org.dromara.common.core.exception.consume.BagException;
|
|
|
import org.dromara.common.core.exception.consume.ConsumeException;
|
|
|
import org.dromara.common.core.utils.RecordIdUtils;
|
|
|
@@ -55,7 +62,10 @@ public class ErrFillBusiness {
|
|
|
private final IPtBagService bagService;
|
|
|
private final IPtMealtypeService mealTypeService;
|
|
|
private final IXfConsumeDetailService consumeDetailService;
|
|
|
+ private final IXfUserTotalService userTotalService;
|
|
|
+ private final IXfTermTotalService termTotalService;
|
|
|
|
|
|
+ @Transactional(rollbackFor = ConsumeException.class)
|
|
|
public PtBagVo createErrFillRecord(ConsumptionBo bo) {
|
|
|
String message;
|
|
|
//1.处理入账需要的其它信息
|
|
|
@@ -68,18 +78,29 @@ public class ErrFillBusiness {
|
|
|
PtMealTypeVo mealTypeVo = list.get(4) == null ? new PtMealTypeVo() : (PtMealTypeVo) list.get(4);
|
|
|
|
|
|
log.info("[验证通过,开始写入消费明细数据]-[{}]", JSONUtil.toJsonStr(bo));
|
|
|
- XfConsumeDetailVo consumeDetailVo = createConsumeRecord(bo, userAccountVo, cardVo, bagVo, termVo, mealTypeVo);
|
|
|
+ String remark = MessageFormat.format("[错误补款]-[{0}]", JSONUtil.toJsonStr(bo));
|
|
|
+ XfConsumeDetailVo consumeDetailVo = createConsumeRecord(bo, userAccountVo, cardVo, bagVo, termVo, mealTypeVo,remark);
|
|
|
if (consumeDetailVo == null) {
|
|
|
- message = MessageFormat.format("[错扣补款写消费明细表失败]-[{0}]", JSONUtil.toJsonStr(bo));
|
|
|
+ message = MessageFormat.format("[错扣补款]->[写消费明细表失败]-[{0}]", JSONUtil.toJsonStr(bo));
|
|
|
log.error(message);
|
|
|
throw new ConsumeException("consumption.consumeDetail.failure", "错扣补款");
|
|
|
}
|
|
|
- // TODO 2024-09-04 23:36:42 luoyibo 写个人日统计表
|
|
|
+
|
|
|
log.info("[消费明细处理完毕,开始更新人员日统计表]-[{}]", JSONUtil.toJsonStr(bo));
|
|
|
+ XfUserTotalVo userTotalVo = createOrUpdateUserTotal(bo, userAccountVo, cardVo);
|
|
|
+ if (userTotalVo == null) {
|
|
|
+ message = MessageFormat.format("[错扣补款]->[更新人员日统计表失败]-[{0}]", JSONUtil.toJsonStr(bo));
|
|
|
+ log.error(message);
|
|
|
+ throw new ConsumeException("consumption.userTotal.failure", "错扣补款");
|
|
|
+ }
|
|
|
|
|
|
- // TODO 2024-09-04 23:37:35 luoyibo 更新设备的按日统计
|
|
|
log.info("[人员日统计表更新完毕,开始更新设备日统计表]-[{}]", JSONUtil.toJsonStr(bo));
|
|
|
-
|
|
|
+ XfTermTotalVo termTotalVo = createOrUpdateTermTotal(bo, termVo, mealTypeVo);
|
|
|
+ if (termTotalVo == null) {
|
|
|
+ message = MessageFormat.format("[错扣补款]->[更新设备日统计表失败]-[{0}]", JSONUtil.toJsonStr(bo));
|
|
|
+ log.error(message);
|
|
|
+ throw new ConsumeException("consumption.termTotal.failure", "错扣补款");
|
|
|
+ }
|
|
|
log.info("[设备日统计表更新完毕,开始更新钱包余额]-[{}]", JSONUtil.toJsonStr(bo));
|
|
|
PtBagVo resultVo = updateBalance(bo, bagVo);
|
|
|
if (resultVo == null) {
|
|
|
@@ -92,7 +113,17 @@ public class ErrFillBusiness {
|
|
|
return resultVo;
|
|
|
}
|
|
|
|
|
|
- private XfConsumeDetailVo createConsumeRecord(ConsumptionBo bo, PtUserAccountVo userAccountVo, PtCardVo cardVo, PtBagVo bagVo, XfTermVo termVo, PtMealTypeVo mealTypeVo) {
|
|
|
+ /**
|
|
|
+ * 创建一条消费明细记录
|
|
|
+ * @param bo 消费业务对象
|
|
|
+ * @param userAccountVo 账户对象视图
|
|
|
+ * @param cardVo 账户卡片视图
|
|
|
+ * @param bagVo 账户钱包视图
|
|
|
+ * @param termVo 消费设备视图
|
|
|
+ * @param mealTypeVo 消费餐类视图
|
|
|
+ * @return 消费明细视图
|
|
|
+ */
|
|
|
+ private XfConsumeDetailVo createConsumeRecord(ConsumptionBo bo, PtUserAccountVo userAccountVo, PtCardVo cardVo, PtBagVo bagVo, XfTermVo termVo, PtMealTypeVo mealTypeVo,String remark) {
|
|
|
String recordId = getRecordKeyId(bo, userAccountVo, bagVo);
|
|
|
XfConsumeDetailBo consumeDetailBo = new XfConsumeDetailBo();
|
|
|
BeanUtil.copyProperties(bo, consumeDetailBo);
|
|
|
@@ -117,24 +148,70 @@ public class ErrFillBusiness {
|
|
|
consumeDetailBo.setMealName(mealTypeVo.getMealName());
|
|
|
//设置钱包信息
|
|
|
consumeDetailBo.setBagType(bagVo.getBagCode());
|
|
|
+ consumeDetailBo.setRemark(remark);
|
|
|
|
|
|
return consumeDetailService.createConsumeDetailRecord(consumeDetailBo);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 创建或更新人员日统计表
|
|
|
+ * @param bo 消费业务对象
|
|
|
+ * @param accountVo 人员账户视图
|
|
|
+ * @param cardVo 账户卡片视图
|
|
|
+ * @return 更新后的人员日统计表
|
|
|
+ */
|
|
|
+ private XfUserTotalVo createOrUpdateUserTotal(ConsumptionBo bo, PtUserAccountVo accountVo, PtCardVo cardVo) {
|
|
|
+ XfUserTotalBo xfUserTotalBo = new XfUserTotalBo();
|
|
|
+ xfUserTotalBo.setUserId(accountVo.getUserId());
|
|
|
+ xfUserTotalBo.setUserNumb(accountVo.getUserNumb());
|
|
|
+ xfUserTotalBo.setRealName(accountVo.getRealName());
|
|
|
+ xfUserTotalBo.setDeptName(accountVo.getDeptName());
|
|
|
+ xfUserTotalBo.setCardNo(cardVo.getCardNo());
|
|
|
+ xfUserTotalBo.setDateDay(DateUtil.format(new Date(), "yyyy-MM-dd"));
|
|
|
+ xfUserTotalBo.setUseType(bo.getUseType().code());
|
|
|
+ xfUserTotalBo.setConsumeMoney(bo.getOperatorMoney().negate());
|
|
|
+
|
|
|
+ return userTotalService.createOrUpdateUserTotal(xfUserTotalBo);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 创建或更新设备日统计
|
|
|
+ * @param bo 消费业务对象
|
|
|
+ * @param termVo 设备视图
|
|
|
+ * @param mealTypeVo 餐类视图
|
|
|
+ * @return 日统计视图
|
|
|
+ */
|
|
|
+ private XfTermTotalVo createOrUpdateTermTotal(ConsumptionBo bo,XfTermVo termVo, PtMealTypeVo mealTypeVo){
|
|
|
+ XfTermTotalBo termTotalBo = new XfTermTotalBo();
|
|
|
+ BeanUtil.copyProperties(termVo, termTotalBo);
|
|
|
+ termTotalBo.setDateDay(DateUtil.format(new Date(), "yyyy-MM-dd"));
|
|
|
+ termTotalBo.setMealType(Long.valueOf(mealTypeVo.getTypeId()));
|
|
|
+ termTotalBo.setErrFillCount(1L);
|
|
|
+ termTotalBo.setErrFillMoney(bo.getOperatorMoney());
|
|
|
+ termTotalBo.setUseType(SystemUseTypeEnum.CONSUME.code());
|
|
|
+
|
|
|
+ return termTotalService.createOrUpdateTermTotal(termTotalBo);
|
|
|
+ }
|
|
|
/**
|
|
|
* 更新消费明细表的卡余信息
|
|
|
*
|
|
|
* @param consumeId 消费明细Id
|
|
|
- * @param balance 卡余
|
|
|
- * @return 更新结果
|
|
|
+ * @param balance 卡余
|
|
|
*/
|
|
|
- private boolean updateConsumeRecordBalance(String consumeId, BigDecimal balance){
|
|
|
+ private void updateConsumeRecordBalance(String consumeId, BigDecimal balance){
|
|
|
XfConsumeDetailBo consumeDetailBo = new XfConsumeDetailBo();
|
|
|
consumeDetailBo.setConsumeId(consumeId);
|
|
|
consumeDetailBo.setCardValue(balance);
|
|
|
|
|
|
- return consumeDetailService.updateByBoId(consumeDetailBo);
|
|
|
+ consumeDetailService.updateByBoId(consumeDetailBo);
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 更新账户钱包余额
|
|
|
+ * @param bo 消费业务对象
|
|
|
+ * @param bagVo 账户钱包视图
|
|
|
+ * @return 更新后的账户钱包
|
|
|
+ */
|
|
|
private PtBagVo updateBalance(ConsumptionBo bo, PtBagVo bagVo) {
|
|
|
PtBagBo bagBo = new PtBagBo();
|
|
|
bagBo.setUserId(bo.getUserId());
|