package com.java110.fee.cmd.fee;
|
|
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONObject;
|
import com.java110.core.annotation.Java110Cmd;
|
import com.java110.core.annotation.Java110Transactional;
|
import com.java110.core.context.ICmdDataFlowContext;
|
import com.java110.core.event.cmd.Cmd;
|
import com.java110.core.event.cmd.CmdEvent;
|
import com.java110.core.factory.GenerateCodeFactory;
|
import com.java110.dto.account.AccountDto;
|
import com.java110.dto.app.AppDto;
|
import com.java110.dto.coupon.CouponUserDto;
|
import com.java110.dto.fee.FeeAttrDto;
|
import com.java110.dto.fee.FeeConfigDto;
|
import com.java110.dto.fee.FeeDetailDto;
|
import com.java110.dto.fee.FeeDto;
|
import com.java110.dto.fee.ComputeDiscountDto;
|
import com.java110.dto.owner.OwnerCarDto;
|
import com.java110.dto.parking.ParkingSpaceApplyDto;
|
import com.java110.dto.repair.RepairDto;
|
import com.java110.dto.repair.RepairUserDto;
|
import com.java110.fee.bmo.fee.IFeeBMO;
|
import com.java110.fee.bmo.fee.IFinishFeeNotify;
|
import com.java110.intf.acct.IAccountInnerServiceSMO;
|
import com.java110.intf.acct.ICouponUserDetailV1InnerServiceSMO;
|
import com.java110.intf.acct.ICouponUserV1InnerServiceSMO;
|
import com.java110.intf.community.*;
|
import com.java110.intf.fee.*;
|
import com.java110.intf.user.IOwnerCarInnerServiceSMO;
|
import com.java110.po.account.AccountDetailPo;
|
import com.java110.po.room.ApplyRoomDiscountPo;
|
import com.java110.po.car.OwnerCarPo;
|
import com.java110.po.coupon.CouponUserPo;
|
import com.java110.po.coupon.CouponUserDetailPo;
|
import com.java110.po.fee.FeeAccountDetailPo;
|
import com.java110.po.owner.RepairPoolPo;
|
import com.java110.po.owner.RepairUserPo;
|
import com.java110.po.parking.ParkingSpaceApplyPo;
|
import com.java110.po.payFee.PayFeeDetailDiscountPo;
|
import com.java110.utils.cache.CommonCache;
|
import com.java110.utils.exception.CmdException;
|
import com.java110.utils.util.*;
|
import com.java110.vo.ResultVo;
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import java.math.BigDecimal;
|
import java.text.DecimalFormat;
|
import java.util.Calendar;
|
import java.util.Date;
|
import java.util.List;
|
|
@Java110Cmd(serviceCode = "fee.payFeeConfirm")
|
public class PayFeeConfirmCmd extends Cmd {
|
|
@Autowired
|
private IFeeBMO feeBMOImpl;
|
|
@Autowired
|
private IFeeInnerServiceSMO feeInnerServiceSMOImpl;
|
|
@Autowired
|
private IRoomInnerServiceSMO roomInnerServiceSMOImpl;
|
|
@Autowired
|
private IFeeConfigInnerServiceSMO feeConfigInnerServiceSMOImpl;
|
|
@Autowired
|
private IFeeDiscountInnerServiceSMO feeDiscountInnerServiceSMOImpl;
|
|
@Autowired
|
private IFeeAttrInnerServiceSMO feeAttrInnerServiceSMOImpl;
|
|
@Autowired
|
private IRepairUserInnerServiceSMO repairUserInnerServiceSMO;
|
|
@Autowired
|
private IOwnerCarInnerServiceSMO ownerCarInnerServiceSMOImpl;
|
|
@Autowired
|
private IOwnerCarNewV1InnerServiceSMO ownerCarNewV1InnerServiceSMOImpl;
|
|
@Autowired
|
private IApplyRoomDiscountInnerServiceSMO applyRoomDiscountInnerServiceSMOImpl;
|
|
@Autowired
|
private IFeeDetailInnerServiceSMO iFeeDetailInnerServiceSMO;
|
@Autowired
|
private IPayFeeDetailDiscountInnerServiceSMO payFeeDetailDiscountInnerServiceSMOImpl;
|
@Autowired
|
private IPayFeeDetailDiscountNewV1InnerServiceSMO payFeeDetailDiscountNewV1InnerServiceSMOImpl;
|
@Autowired
|
private IRepairPoolV1InnerServiceSMO repairPoolNewV1InnerServiceSMOImpl;
|
@Autowired
|
private IRepairUserV1InnerServiceSMO repairUserNewV1InnerServiceSMOImpl;
|
@Autowired
|
private ICouponUserV1InnerServiceSMO couponUserV1InnerServiceSMOImpl;
|
@Autowired
|
private ICouponUserDetailV1InnerServiceSMO couponUserDetailV1InnerServiceSMOImpl;
|
@Autowired
|
private IParkingSpaceApplyV1InnerServiceSMO parkingSpaceApplyV1InnerServiceSMOImpl;
|
@Autowired
|
private IAccountInnerServiceSMO accountInnerServiceSMOImpl;
|
|
@Autowired
|
private IFeeAccountDetailServiceSMO feeAccountDetailServiceSMOImpl;
|
|
@Autowired
|
private IFinishFeeNotify finishFeeNotifyImpl;
|
|
//默认序列
|
protected static final int DEFAULT_SEQ = 1;
|
|
@Override
|
public void validate(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) {
|
Assert.hasKeyAndValue(reqJson, "oId", "是否包含订单信息");
|
}
|
|
@Override
|
@Java110Transactional
|
public void doCmd(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) throws CmdException {
|
String paramIn = CommonCache.getAndRemoveValue("payFeePre" + reqJson.getString("oId"));
|
JSONObject paramObj = JSONObject.parseObject(paramIn);
|
String appId = paramObj.getString("appId");
|
if (reqJson.containsKey("custEndTimeUse")){
|
paramObj.put("custEndTimeUse",reqJson.getString("custEndTimeUse"));
|
}
|
if (reqJson.containsKey("receivedAmount")){
|
paramObj.put("receivedAmount",reqJson.getString("receivedAmount"));
|
}
|
if (reqJson.containsKey("remark")){
|
paramObj.put("primeRate", "6");
|
paramObj.put("remark", reqJson.getString("remark"));
|
} else if (AppDto.WECHAT_MINA_OWNER_APP_ID.equals(appId)) { //微信小程序支付
|
paramObj.put("primeRate", "6");
|
paramObj.put("remark", "线上小程序支付");
|
} else if (AppDto.WECHAT_OWNER_APP_ID.equals(appId)) { //微信公众号支付
|
paramObj.put("primeRate", "5");
|
paramObj.put("remark", "线上公众号支付");
|
} else {
|
paramObj.put("primeRate", "6");
|
paramObj.put("remark", "线上小程序支付");
|
}
|
paramObj.put("detailId", GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_detailId));
|
|
//处理现金账户
|
dealAccount(paramObj);
|
|
|
//处理 优惠折扣
|
addDiscount(paramObj);
|
|
//修改已使用优惠卷信息
|
modifyCouponUser(paramObj);
|
|
//添加单元信息
|
feeBMOImpl.addFeePreDetail(paramObj);
|
feeBMOImpl.modifyPreFee(paramObj);
|
|
//todo 为停车费单独处理
|
finishFeeNotifyImpl.updateCarEndTime(paramObj.getString("feeId"), paramObj.getString("communityId"));
|
|
//todo 修改报修单
|
finishFeeNotifyImpl.updateRepair(paramObj.getString("feeId"), paramObj.getString("communityId"), paramObj.getString("receivedAmount"));
|
|
//todo 租金延期房屋结束时间
|
finishFeeNotifyImpl.updateRoomEndTime(paramObj.getString("feeId"), paramObj.getString("communityId"));
|
|
//查询 pay_fee_detail 是否缴费
|
FeeDetailDto feeDetailDto = new FeeDetailDto();
|
feeDetailDto.setDetailId(paramObj.getString("detailId"));
|
List<FeeDetailDto> feeDetailDtoList = iFeeDetailInnerServiceSMO.queryBusinessFeeDetails(feeDetailDto);
|
if (feeDetailDtoList != null && feeDetailDtoList.size() == 1) {
|
//获取bId
|
String bId = feeDetailDtoList.get(0).getbId();
|
//获取优惠
|
//List<ComputeDiscountDto> computeDiscountDtos = (List<ComputeDiscountDto>) paramObj.get("computeDiscountDtos");
|
JSONArray computeDiscountDtos = paramObj.getJSONArray("computeDiscountDtos");
|
ComputeDiscountDto computeDiscountDto = null;
|
if (!ListUtil.isNull(computeDiscountDtos)) {
|
for (int accountIndex = 0; accountIndex < computeDiscountDtos.size(); accountIndex++) {
|
computeDiscountDto = BeanConvertUtil.covertBean(computeDiscountDtos.getJSONObject(accountIndex), ComputeDiscountDto.class);
|
if (!StringUtil.isEmpty(computeDiscountDto.getArdId())) {
|
ApplyRoomDiscountPo applyRoomDiscountPo = new ApplyRoomDiscountPo();
|
//将业务id更新到空置房优惠里面
|
applyRoomDiscountPo.setbId(bId);
|
applyRoomDiscountPo.setArdId(computeDiscountDto.getArdId());
|
int flag = applyRoomDiscountInnerServiceSMOImpl.updateApplyRoomDiscount(applyRoomDiscountPo);
|
if (flag < 1) {
|
throw new CmdException("更新微信派单池信息失败");
|
}
|
}
|
}
|
}
|
}
|
//回调判断 车位申请表是否有数据,有数据则刷新申请表状态为 3003 完成状态即可
|
//判断车辆是否已经有申请单
|
ParkingSpaceApplyDto parkingSpaceApplyDto = new ParkingSpaceApplyDto();
|
parkingSpaceApplyDto.setFeeId(paramObj.getString("feeId"));
|
parkingSpaceApplyDto.setState("2002");//审核中
|
List<ParkingSpaceApplyDto> parkingSpaceApplyDtos = parkingSpaceApplyV1InnerServiceSMOImpl.queryParkingSpaceApplys(parkingSpaceApplyDto);
|
if (!ListUtil.isNull(parkingSpaceApplyDtos)) {
|
ParkingSpaceApplyPo parkingSpaceApplyPo = new ParkingSpaceApplyPo();
|
parkingSpaceApplyPo.setApplyId(parkingSpaceApplyDtos.get(0).getApplyId());
|
parkingSpaceApplyPo.setState("3003");
|
int flag = parkingSpaceApplyV1InnerServiceSMOImpl.updateParkingSpaceApply(parkingSpaceApplyPo);
|
if (flag < 1) {
|
throw new CmdException("更新车位申请表状态失败");
|
}
|
}
|
cmdDataFlowContext.setResponseEntity(ResultVo.success());
|
}
|
|
private void dealAccount(JSONObject paramObj) {
|
JSONArray accountDtos = paramObj.getJSONArray("selectUserAccount");
|
if(ListUtil.isNull(accountDtos)){
|
return;
|
}
|
AccountDto accountDto = null;
|
String accountRemark = "";
|
String pointRemark = "";
|
for (int accountIndex = 0; accountIndex < accountDtos.size(); accountIndex++) {
|
accountDto = BeanConvertUtil.covertBean(accountDtos.getJSONObject(accountIndex), AccountDto.class);
|
if (!StringUtil.isEmpty(accountDto.getAcctType()) && accountDto.getAcctType().equals("2003")) { //2003 现金账户 2004 积分账户
|
//获取现金账户抵扣金额
|
BigDecimal cashMoney = new BigDecimal(0.0);
|
if (!StringUtil.isEmpty(paramObj.getString("cashMoney"))) {
|
String cashMoney1 = paramObj.getString("cashMoney");
|
cashMoney = new BigDecimal(cashMoney1);
|
if (cashMoney.compareTo(BigDecimal.ZERO) > 0) {
|
accountRemark = "现金账户抵扣" + String.format("%.2f", cashMoney) + "元";
|
}
|
}
|
int i = cashMoney.compareTo(BigDecimal.ZERO);
|
if (i > 0) {
|
BigDecimal amount = new BigDecimal(Double.parseDouble(accountDto.getAmount())); //现金账户余额
|
AccountDetailPo accountDetailPo = new AccountDetailPo();
|
accountDetailPo.setAcctId(accountDto.getAcctId());
|
accountDetailPo.setObjId(accountDto.getObjId());
|
accountDetailPo.setObjType(accountDto.getObjType());
|
accountDetailPo.setAmount(String.valueOf(cashMoney));
|
int flag = accountInnerServiceSMOImpl.withholdAccount(accountDetailPo);
|
if (flag < 1) {
|
throw new CmdException("现金账户扣款失败!");
|
}
|
// 现金账户扣款记录,生成抵扣明细记录
|
FeeAccountDetailPo feeAccountDetailPo = new FeeAccountDetailPo();
|
feeAccountDetailPo.setFadId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_fadId));
|
feeAccountDetailPo.setDetailId(paramObj.getString("detailId"));
|
feeAccountDetailPo.setCommunityId(paramObj.getString("communityId"));
|
feeAccountDetailPo.setState("1002"); //1001 无抵扣 1002 现金账户抵扣 1003 积分账户抵扣 1004 优惠券抵扣
|
feeAccountDetailPo.setAmount(String.valueOf(cashMoney)); //现金抵扣金额
|
feeAccountDetailServiceSMOImpl.saveFeeAccountDetail(feeAccountDetailPo);
|
}
|
|
} else if (!StringUtil.isEmpty(accountDto.getAcctType()) && accountDto.getAcctType().equals("2004")) { //积分账户
|
//获取积分账户抵扣的积分数
|
BigDecimal pointsMoney = new BigDecimal(0.0);
|
BigDecimal pointsMoneyNow = new BigDecimal(0.0);
|
if (!StringUtil.isEmpty(paramObj.getString("pointsMoney"))) {
|
String pointsMoney1 = paramObj.getString("pointsMoney");
|
pointsMoney = new BigDecimal(pointsMoney1);
|
String pointsMoneyNow1 = paramObj.getString("pointsMoneyNow");
|
pointsMoneyNow = new BigDecimal(pointsMoneyNow1);
|
if (pointsMoneyNow.compareTo(BigDecimal.ZERO) > 0) {
|
pointRemark = "积分账户抵扣" + String.format("%.2f", pointsMoneyNow) + "元";
|
}
|
|
}
|
int i = pointsMoney.compareTo(BigDecimal.ZERO);
|
if (i > 0) {
|
BigDecimal amount = new BigDecimal(Double.parseDouble(accountDto.getAmount())); //积分账户积分数
|
AccountDetailPo accountDetailPo = new AccountDetailPo();
|
accountDetailPo.setAcctId(accountDto.getAcctId());
|
accountDetailPo.setObjId(accountDto.getObjId());
|
accountDetailPo.setObjType(accountDto.getObjType());
|
accountDetailPo.setAmount(String.valueOf(pointsMoney));
|
int flag = accountInnerServiceSMOImpl.withholdAccount(accountDetailPo);
|
if (flag < 1) {
|
throw new CmdException("积分账户扣款失败!");
|
}
|
|
// 积分账户扣款记录,生成抵扣明细记录
|
FeeAccountDetailPo feeAccountDetailPo = new FeeAccountDetailPo();
|
feeAccountDetailPo.setFadId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_fadId));
|
feeAccountDetailPo.setDetailId(paramObj.getString("detailId"));
|
feeAccountDetailPo.setCommunityId(paramObj.getString("communityId"));
|
feeAccountDetailPo.setState("1003"); //1001 无抵扣 1002 现金账户抵扣 1003 积分账户抵扣 1004 优惠券抵扣
|
|
feeAccountDetailPo.setAmount(String.valueOf(paramObj.getString("pointsMoneyNow"))); //现金抵扣金额
|
feeAccountDetailServiceSMOImpl.saveFeeAccountDetail(feeAccountDetailPo);
|
}
|
}
|
}
|
if (!StringUtil.isEmpty(accountRemark) && !StringUtil.isEmpty(pointRemark)) {
|
paramObj.put("remark", paramObj.getString("remark") + "," + accountRemark + "," + pointRemark);
|
} else {
|
paramObj.put("remark", paramObj.getString("remark") + "," + accountRemark + pointRemark);
|
}
|
|
}
|
|
private void modifyCouponUser(JSONObject paramObj) {
|
if (!paramObj.containsKey("couponPrice") || paramObj.getDouble("couponPrice") <= 0) {
|
return;
|
}
|
//FeeDto feeInfo = (FeeDto) paramObj.get("feeInfo");
|
CouponUserDto couponUserDto = null;
|
JSONArray couponUserDtos = paramObj.getJSONArray("couponUserDtos");
|
if(ListUtil.isNull(couponUserDtos)){
|
return ;
|
}
|
CouponUserDto couponUser = null;
|
for (int accountIndex = 0; accountIndex < couponUserDtos.size(); accountIndex++) {
|
couponUser = BeanConvertUtil.covertBean(couponUserDtos.getJSONObject(accountIndex), CouponUserDto.class);
|
couponUserDto = new CouponUserDto();
|
couponUserDto.setCouponId(couponUser.getCouponId());
|
couponUserDto.setState(CouponUserDto.COUPON_STATE_RUN);
|
List<CouponUserDto> couponUserDtos1 = couponUserV1InnerServiceSMOImpl.queryCouponUsers(couponUserDto);
|
if (couponUserDtos1 == null || couponUserDtos1.size() < 1) {
|
throw new CmdException("优惠券被使用");
|
}
|
CouponUserPo couponUserPo = new CouponUserPo();
|
couponUserPo.setState(CouponUserDto.COUPON_STATE_STOP);
|
couponUserPo.setCouponId(couponUser.getCouponId());
|
int fage = couponUserV1InnerServiceSMOImpl.updateCouponUser(couponUserPo);
|
if (fage < 1) {
|
throw new CmdException("更新优惠卷信息失败");
|
}
|
CouponUserDetailPo couponUserDetailPo = new CouponUserDetailPo();
|
couponUserDetailPo.setUoId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_usId));
|
couponUserDetailPo.setCouponId(couponUser.getCouponId());
|
couponUserDetailPo.setUserId(couponUser.getUserId());
|
couponUserDetailPo.setCouponName(couponUser.getCouponName());
|
couponUserDetailPo.setUserName(couponUser.getUserName());
|
couponUserDetailPo.setObjId(paramObj.getString("feeId"));
|
couponUserDetailPo.setObjType(paramObj.getString("feeTypeCd"));
|
couponUserDetailPo.setOrderId(paramObj.getString("oId"));
|
fage = couponUserDetailV1InnerServiceSMOImpl.saveCouponUserDetail(couponUserDetailPo);
|
if (fage < 1) {
|
throw new CmdException("新增优惠卷使用记录信息失败");
|
}
|
}
|
|
paramObj.put("remark", paramObj.getString("remark") + "-优惠劵抵扣" + paramObj.getDouble("couponPrice") + "元");
|
|
}
|
|
private void addDiscount(JSONObject paramObj) {
|
|
if (!paramObj.containsKey("discountPrice") || paramObj.getDouble("discountPrice") <= 0) {
|
return;
|
}
|
JSONArray computeDiscountDtos = paramObj.getJSONArray("computeDiscountDtos");
|
if(ListUtil.isNull(computeDiscountDtos)){
|
return;
|
}
|
ComputeDiscountDto computeDiscountDto = null;
|
for (int accountIndex = 0; accountIndex < computeDiscountDtos.size(); accountIndex++) {
|
computeDiscountDto = BeanConvertUtil.covertBean(computeDiscountDtos.getJSONObject(accountIndex), ComputeDiscountDto.class);
|
if (computeDiscountDto.getDiscountPrice() <= 0) {
|
continue;
|
}
|
JSONObject businessFee = new JSONObject();
|
businessFee.put("discountPrice", computeDiscountDto.getDiscountPrice());
|
businessFee.put("discountId", computeDiscountDto.getDiscountId());
|
businessFee.put("detailId", paramObj.getString("detailId"));
|
businessFee.put("communityId", paramObj.getString("communityId"));
|
businessFee.put("feeId", paramObj.getString("feeId"));
|
|
PayFeeDetailDiscountPo payFeeDetailDiscount = BeanConvertUtil.covertBean(businessFee, PayFeeDetailDiscountPo.class);
|
payFeeDetailDiscount.setbId("-1");
|
payFeeDetailDiscount.setDetailDiscountId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_dataId));
|
int fage = payFeeDetailDiscountNewV1InnerServiceSMOImpl.savePayFeeDetailDiscountNew(payFeeDetailDiscount);
|
|
if (fage < 1) {
|
throw new CmdException("更新费用信息失败");
|
}
|
}
|
}
|
|
|
}
|