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.context.DataFlowContext; import com.java110.core.context.ICmdDataFlowContext; import com.java110.core.event.cmd.AbstractServiceCmdListener; import com.java110.core.event.cmd.CmdEvent; import com.java110.core.factory.GenerateCodeFactory; import com.java110.dto.app.AppDto; import com.java110.dto.couponUser.CouponUserDto; import com.java110.dto.fee.FeeAttrDto; import com.java110.dto.fee.FeeDetailDto; import com.java110.dto.fee.FeeDto; import com.java110.dto.feeDiscount.ComputeDiscountDto; import com.java110.dto.owner.OwnerCarDto; import com.java110.dto.payFeeDetailDiscount.PayFeeDetailDiscountDto; import com.java110.dto.repair.RepairDto; import com.java110.dto.repair.RepairUserDto; import com.java110.entity.order.Orders; import com.java110.fee.bmo.fee.IFeeBMO; import com.java110.intf.acct.ICouponUserDetailV1InnerServiceSMO; import com.java110.intf.acct.ICouponUserV1InnerServiceSMO; import com.java110.intf.community.IRepairUserInnerServiceSMO; import com.java110.intf.community.IRoomInnerServiceSMO; import com.java110.intf.fee.*; import com.java110.intf.user.IOwnerCarInnerServiceSMO; import com.java110.po.applyRoomDiscount.ApplyRoomDiscountPo; import com.java110.po.car.OwnerCarPo; import com.java110.po.couponUser.CouponUserPo; import com.java110.po.couponUserDetail.CouponUserDetailPo; import com.java110.po.owner.RepairPoolPo; import com.java110.po.owner.RepairUserPo; import com.java110.po.payFeeDetailDiscount.PayFeeDetailDiscountPo; import com.java110.utils.cache.CommonCache; import com.java110.utils.constant.BusinessTypeConstant; import com.java110.utils.constant.CommonConstant; import com.java110.utils.exception.CmdException; import com.java110.utils.util.Assert; import com.java110.utils.util.BeanConvertUtil; import com.java110.utils.util.DateUtil; import com.java110.utils.util.StringUtil; import com.java110.vo.ResultVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import java.math.BigDecimal; import java.text.DecimalFormat; import java.util.Date; import java.util.List; @Java110Cmd(serviceCode = "fee.payFeeConfirm") public class PayFeeConfirmCmd extends AbstractServiceCmdListener { @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 IRepairPoolNewV1InnerServiceSMO repairPoolNewV1InnerServiceSMOImpl; @Autowired private IRepairUserNewV1InnerServiceSMO repairUserNewV1InnerServiceSMOImpl; @Autowired private ICouponUserV1InnerServiceSMO couponUserV1InnerServiceSMOImpl; @Autowired private ICouponUserDetailV1InnerServiceSMO couponUserDetailV1InnerServiceSMOImpl; //默认序列 protected static final int DEFAULT_SEQ = 1; @Override public void validate(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) { Assert.hasKeyAndValue(reqJson, "oId", "是否包含订单信息"); } @Override 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 (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", "线上小程序支付"); } //添加单元信息 feeBMOImpl.addFeePreDetail(paramObj); feeBMOImpl.modifyPreFee(paramObj); double discountPrice = paramObj.getDouble("discountPrice"); if (discountPrice > 0) { addDiscount(paramObj); } dealOwnerCartEndTime(paramObj); //修改已使用优惠卷信息 modifyCouponUser(paramObj); //判断是否有派单属性ID FeeAttrDto feeAttrDto = new FeeAttrDto(); feeAttrDto.setCommunityId(paramObj.getString("communityId")); feeAttrDto.setFeeId(paramObj.getString("feeId")); feeAttrDto.setSpecCd(FeeAttrDto.SPEC_CD_REPAIR); List feeAttrDtos = feeAttrInnerServiceSMOImpl.queryFeeAttrs(feeAttrDto); //修改 派单状态 if (feeAttrDtos != null && feeAttrDtos.size() > 0) { RepairPoolPo repairPoolPo = new RepairPoolPo(); repairPoolPo.setRepairId(feeAttrDtos.get(0).getValue()); repairPoolPo.setCommunityId(paramObj.getString("communityId")); repairPoolPo.setState(RepairDto.STATE_APPRAISE); int flag = repairPoolNewV1InnerServiceSMOImpl.updateRepairPoolNew(repairPoolPo); if (flag < 1) { throw new CmdException("更新微信派单池信息失败"); } } //修改报修派单状态 if (feeAttrDtos != null && feeAttrDtos.size() > 0) { RepairUserDto repairUserDto = new RepairUserDto(); repairUserDto.setRepairId(feeAttrDtos.get(0).getValue()); repairUserDto.setState(RepairUserDto.STATE_PAY_FEE); //查询待支付状态的记录 List repairUserDtoList = repairUserInnerServiceSMO.queryRepairUsers(repairUserDto); Assert.listOnlyOne(repairUserDtoList, "信息错误!"); RepairUserPo repairUserPo = new RepairUserPo(); repairUserPo.setRuId(repairUserDtoList.get(0).getRuId()); repairUserPo.setState(RepairUserDto.STATE_FINISH_PAY_FEE); //如果是待评价状态,就更新结束时间 repairUserPo.setEndTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A)); DecimalFormat df = new DecimalFormat("0.00"); BigDecimal payment_amount = new BigDecimal(paramObj.getString("receivableAmount")); repairUserPo.setContext("已支付" + df.format(payment_amount) + "元"); int flag = repairUserNewV1InnerServiceSMOImpl.updateRepairUserNew(repairUserPo); if (flag < 1) { throw new CmdException("更新微信派单池信息失败"); } //新增待评价状态 RepairUserPo repairUser = new RepairUserPo(); repairUser.setRuId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_ruId)); repairUser.setStartTime(repairUserPo.getEndTime()); repairUser.setState(RepairUserDto.STATE_EVALUATE); repairUser.setContext("待评价"); repairUser.setCommunityId(paramObj.getString("communityId")); repairUser.setCreateTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A)); repairUser.setRepairId(repairUserDtoList.get(0).getRepairId()); repairUser.setStaffId(repairUserDtoList.get(0).getStaffId()); repairUser.setStaffName(repairUserDtoList.get(0).getStaffName()); repairUser.setPreStaffId(repairUserDtoList.get(0).getStaffId()); repairUser.setPreStaffName(repairUserDtoList.get(0).getStaffName()); repairUser.setPreRuId(repairUserDtoList.get(0).getRuId()); repairUser.setRepairEvent("auditUser"); repairUser.setbId("-1"); flag = repairUserNewV1InnerServiceSMOImpl.saveRepairUserNew(repairUser); if (flag < 1) { throw new CmdException("更新微信派单池信息失败"); } } //查询 pay_fee_detail 是否缴费 FeeDetailDto feeDetailDto = new FeeDetailDto(); feeDetailDto.setDetailId(paramObj.getString("detailId")); List feeDetailDtoList = iFeeDetailInnerServiceSMO.queryBusinessFeeDetails(feeDetailDto); if (feeDetailDtoList != null && feeDetailDtoList.size() == 1) { //获取bId String bId = feeDetailDtoList.get(0).getbId(); //获取优惠 List computeDiscountDtos = (List) paramObj.get("computeDiscountDtos"); if (computeDiscountDtos != null) { for (ComputeDiscountDto computeDiscountDto : computeDiscountDtos) { 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("更新微信派单池信息失败"); } } } } } cmdDataFlowContext.setResponseEntity(ResultVo.success()); } private void modifyCouponUser(JSONObject paramObj) { FeeDto feeInfo = (FeeDto) paramObj.get("feeInfo"); List couponUserDtos = (List) paramObj.get("couponUserDtos"); for (CouponUserDto couponUser : couponUserDtos) { 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(feeInfo.getFeeId()); couponUserDetailPo.setObjType(feeInfo.getFeeTypeCd()); couponUserDetailPo.setOrderId(paramObj.getString("oId")); fage = couponUserDetailV1InnerServiceSMOImpl.saveCouponUserDetail(couponUserDetailPo); if (fage < 1) { throw new CmdException("新增优惠卷使用记录信息失败"); } } } private void addDiscount(JSONObject paramObj) { List computeDiscountDtos = (List) paramObj.get("computeDiscountDtos"); for (ComputeDiscountDto computeDiscountDto : computeDiscountDtos) { 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("更新费用信息失败"); } } } private void dealOwnerCartEndTime(JSONObject paramObj) { //为停车费单独处理 if (paramObj.containsKey("carPayerObjType") && FeeDto.PAYER_OBJ_TYPE_CAR.equals(paramObj.getString("carPayerObjType"))) { Date feeEndTime = (Date) paramObj.get("carFeeEndTime"); OwnerCarDto ownerCarDto = new OwnerCarDto(); ownerCarDto.setCommunityId(paramObj.getString("communityId")); ownerCarDto.setCarId(paramObj.getString("carPayerObjId")); List ownerCarDtos = ownerCarInnerServiceSMOImpl.queryOwnerCars(ownerCarDto); //车位费用续租 if (ownerCarDtos != null) { for (OwnerCarDto tmpOwnerCarDto : ownerCarDtos) { if (tmpOwnerCarDto.getEndTime().getTime() < feeEndTime.getTime()) { OwnerCarPo ownerCarPo = new OwnerCarPo(); ownerCarPo.setMemberId(tmpOwnerCarDto.getMemberId()); ownerCarPo.setEndTime(DateUtil.getFormatTimeString(feeEndTime, DateUtil.DATE_FORMATE_STRING_A)); int fage = ownerCarNewV1InnerServiceSMOImpl.updateOwnerCarNew(ownerCarPo); if (fage < 1) { throw new CmdException("更新费用信息失败"); } } } } } } }