package com.zteits.ipay.biz; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.clouds.common.utils.DateUtil; import com.clouds.common.utils.SequenceUtil; import com.zteits.clouds.api.apibase.bean.BizResult; import com.zteits.clouds.api.apibase.constants.*; import com.zteits.clouds.api.apibase.exception.BizException; import com.zteits.clouds.api.dto.business.param.TdCBusinessAcctSourceRequest; import com.zteits.clouds.api.dto.order.payorder.dto.BarcodePayResultDTO; import com.zteits.clouds.api.dto.order.payorder.dto.PayOrderDTO; import com.zteits.clouds.api.dto.pay.AcctPersonDTO; import com.zteits.clouds.api.dto.pay.param.*; import com.zteits.clouds.api.dto.pda.param.AccountRechargeByBarCodeRequest; import com.zteits.clouds.api.dto.sys.SysOrgAppIdDTO; import com.zteits.clouds.api.dto.sys.param.SysOrgAppIdQueryRequest; import com.zteits.clouds.api.service.order.acct.AcctService; import com.zteits.clouds.api.service.pay.TdCAcctPersonService; import com.zteits.clouds.api.service.pay.TdCAcctSourceService; import com.zteits.clouds.api.service.sys.SysOrgAppIdService; import com.zteits.ipay.service.apppubpay.aliwxinpay.base.AliWxinPayInnerRouteService; import com.zteits.ipay.service.apppubpay.aliwxinpay.param.BarcodePayReq; import com.zteits.ipay.service.apppubpay.aliwxinpay.param.BarcodePayRes; import com.zteits.order.dao.payorder.PayOrderBarcodeDao; import com.zteits.order.dao.payorder.PayOrderDao; import com.zteits.order.dao.rechargeorder.OrderRechargeDao; import com.zteits.order.domain.OrderRecharge; import com.zteits.order.domain.PayOrder; import com.zteits.order.domain.PayOrderBarcode; import com.zteits.order.service.payorder.oper.PubPayOrderOperInnerService; import com.zteits.order.service.rechargeorder.oper.RechargeOrderOperInnerService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * Copyright: Copyright (c) 2018 zteits * * @Description: * @version: v1.0.0 * @author: xiejianpeng * @date: 2018/9/13 17 * Modification History: * Date Author Version Description * ---------------------------------------------------------* * 2018/9/13 xiejianpeng v1.0.0 创建 */ @Service("com.zteits.ipay.biz.AcctServiceImpl") public class AcctServiceImpl implements AcctService { private static final Logger logger = LoggerFactory.getLogger(NoPassPayServiceImpl.class); @Autowired private OrderRechargeDao orderRechargeDao; @Autowired private TdCAcctPersonService tdCAcctPersonService; @Autowired private TdCAcctSourceService tdCAcctSourceService; @Autowired private AliWxinPayInnerRouteService aliWxinPayInnerRouteService; @Autowired private PayOrderDao payOrderDao; @Autowired private PayOrderBarcodeDao payOrderBarcodeDao; @Autowired private PubPayOrderOperInnerService pubPayOrderOperInnerService; @Autowired private SysOrgAppIdService sysOrgAppIdService; @Autowired private RechargeOrderOperInnerService rechargeOrderOperInnerService; @Transactional @Override public BizResult accountEmployeeRechargeByXJ(AccountRechargeForEmployeeRequest request) { logger.info("收费员账户充值入参:"+ JSON.toJSONString(request)); /**1.通过停车订单ID 查询停车订单信息**/ OrderRecharge orderRecharge = new OrderRecharge(); orderRecharge.setOrderId(SequenceUtil.getNextId(SequenceTypeEnum.ORDER_ACC_RECHARGE)); orderRecharge.setOrderType(PayOrderTypeEnum.BALANCE_PAY.value()); orderRecharge.setOrderState(OrderStateEnum.PAYED.value()); orderRecharge.setOrderDicountFee(0L); orderRecharge.setOrderActFee(request.getRechargeFee().longValue()); orderRecharge.setOrderTotalFee(request.getRechargeFee().longValue()); orderRecharge.setCustType(CustTypeEnum.PERSON_CUST.value()); orderRecharge.setTerminalSource(TerminalSourceEnum.CloudsPlatform.value()); orderRecharge.setAcctType(AccountTypeEnum.ACCT_EMPLOYEE_RECHARGE.value()); orderRecharge.setDataState(DataStatusEnum.DATA_STATUS_VALID.value()); orderRecharge.setCreateDate(DateUtil.getDateTime()); orderRecharge.setModfiyDate(DateUtil.getDateTime()); orderRecharge.setCreateEmpId(request.getCreateEmpid()); orderRecharge.setCreateEmpName(request.getCreateEmpName()); /**2.通过收费员编号查询账户信息**/ AcctPersonRequest acctPersonRequest = new AcctPersonRequest(); acctPersonRequest.setCustId(request.getCustId()); acctPersonRequest.setAcctType(AccountTypeEnum.ACCT_EMPLOYEE_RECHARGE.value()); acctPersonRequest.setOrgId(request.getOrgId()); acctPersonRequest.setSysCode(BasicEnum.SYS_CODE.getValue()); BizResult rsAccPerson = tdCAcctPersonService.getAcctPerson(acctPersonRequest); if(!rsAccPerson.isSuccess() || rsAccPerson.getData().getAcctId()==null) { throw new BizException(ErrorType.ACCOUNT_NO_FIND); } AcctPersonDTO acctPersonDTO = rsAccPerson.getData(); String acctId = acctPersonDTO.getAcctId(); orderRecharge.setAcctId(acctId); orderRecharge.setCustId(request.getCustId()); orderRecharge.setOrgId(request.getOrgId()); orderRechargeDao.insertOrderRecharge(orderRecharge); /**3.创建支付单**/ logger.info("创建支付单:paySrcType{}" + PayOrderTypeEnum.BALANCE_PAY.value()); PayOrder payOrder = new PayOrder(); payOrder.setOrderBigType(OrderBigTypeEnum.RECHARGE_ORDER.value()); //支付单类型 payOrder.setPayOrderType(PayOrderTypeEnum.BALANCE_PAY.value()); payOrder.setRltOrderId(orderRecharge.getOrderId()); //支付方式--1:支付宝 2:微信 3:银联 4:微信公众号 6:现金 7:IC卡 */ payOrder.setPayType(PayTypeEnum.XIANJIN.getValue()); payOrder.setTerminalSource(TerminalSourceEnum.CloudsPlatform.value()); payOrder.setOrderActFee(request.getRechargeFee().longValue()); payOrder.setOrderDicountFee(0L); payOrder.setOrderTotalFee(request.getRechargeFee().longValue()); payOrder.setAppId("no_app_id"); payOrder.setPlNo(""); payOrder.setCreateEmpId(request.getCreateEmpid()); payOrder.setCreateEmpName(request.getCreateEmpName()); payOrder.setOrgId(request.getOrgId()); pubPayOrderOperInnerService.createPaySuccessOrder(payOrder); /**4.收费员账户充值**/ // 通过Custid 和 acctType 获取 账户person信息 acctPersonRequest.setAcctBalance(acctPersonDTO.getAcctBalance().add(request.getRechargeFee())); acctPersonRequest.setDataState(DataStatusEnum.DATA_STATUS_VALID.value()); acctPersonRequest.setModfiyEmpid(request.getCreateEmpid()); acctPersonRequest.setModfiyDate(new Date()); tdCAcctPersonService.updateAcctPerson(acctPersonRequest); AcctSourceRequest acctSourceRequest =new AcctSourceRequest(); acctSourceRequest.setAcctId(acctPersonDTO.getAcctId()); acctSourceRequest.setCustId(acctPersonDTO.getCustId()); acctSourceRequest.setTerminalSource(TerminalSourceEnum.CloudsPlatform.value()); acctSourceRequest.setRechargeType(payOrder.getPayType()); acctSourceRequest.setRechargeRemark(request.getRechargeRemark()); acctSourceRequest.setRechargeFee(request.getRechargeFee()); acctSourceRequest.setRechargeBalance(acctPersonRequest.getAcctBalance()); acctSourceRequest.setRechargeId(request.getCreateEmpid()); acctSourceRequest.setRechargeName(request.getCreateEmpName()); acctSourceRequest.setRechargeTime(request.getRechargeTime()); acctSourceRequest.setRltPayorderId(payOrder.getPayOrderId()); // 账户更新状态 ??? 默认为 1 acctSourceRequest.setAcctUptState(1); acctSourceRequest.setDataState(DataStatusEnum.DATA_STATUS_VALID.value()); acctSourceRequest.setAcctType(acctPersonDTO.getAcctType()); acctSourceRequest.setCreateEmpid(request.getCreateEmpid()); acctSourceRequest.setCreateDate(request.getRechargeTime()); acctSourceRequest.setSysCode(BasicEnum.SYS_CODE.getValue()); acctSourceRequest.setOrgId(request.getOrgId()); BizResult booleanBizResult= tdCAcctSourceService.insertAcctSource(acctSourceRequest); return booleanBizResult; } /** * 客户账户现金充值 * 步骤: * 1.根据 custId查询个人账户(没有账户则创建账户) * 2.生成充值订单、支付单 * 3.给用户账户及赠送账号增加金额 * 4.给充值来源表增加记录(td_c_acct_source) * @param * @return * @Author: wangfs * @Date: 2020-03-10 * */ @Transactional(rollbackFor = Exception.class) @Override public BizResult accountCustRechargeByXJ(AccountRechargeForCustRequest request) { Boolean flg = false; /** *1.根据 custId查询个人账户(没有账户则创建账户) */ QueryAcctPersonByCustIdsAndAcctTypeReq acctPersonRequest = new QueryAcctPersonByCustIdsAndAcctTypeReq(); List acctTypeList = new ArrayList<>(); acctTypeList.add(AccountTypeEnum.ACCT_RECHARGE.value()); acctTypeList.add(AccountTypeEnum.ACCT_SEND_RECHARGE.value()); acctPersonRequest.setCustId(request.getCustId()); acctPersonRequest.setAcctTypeList(acctTypeList); BizResult> acctPersonResult = tdCAcctPersonService.queryAcctPersonByCustIdAndAcctType(acctPersonRequest); if(null == acctPersonResult || CollectionUtils.isEmpty(acctPersonResult.getData()) || acctPersonResult.getData().size() ==1){ this.checkCustAcctIsHas(acctPersonResult,request.getCustId(),request.getOrgId()); //因为账户不存在,所以再次查询一遍 acctPersonResult = tdCAcctPersonService.queryAcctPersonByCustIdAndAcctType(acctPersonRequest); } /** * 2.生成充值订单、支付单 */ String rechargeOrderId = SequenceUtil.getNextId(SequenceTypeEnum.ORDER_ACC_RECHARGE); OrderRecharge orderRecharge = new OrderRecharge(); orderRecharge.setOrderId(rechargeOrderId); orderRecharge.setOrderType(PayOrderTypeEnum.BALANCE_PAY.value()); orderRecharge.setOrderState(OrderStateEnum.PAYED.value()); orderRecharge.setOrderDicountFee(request.getAcctGiveFee() * 100); orderRecharge.setOrderActFee(request.getRechargeFee() * 100); orderRecharge.setOrderTotalFee(request.getRechargeFee() * 100 +request.getAcctGiveFee() * 100); orderRecharge.setCustType(CustTypeEnum.PERSON_CUST.value()); orderRecharge.setTerminalSource(TerminalSourceEnum.CloudsPlatform.value()); orderRecharge.setAcctType(AccountTypeEnum.ACCT_RECHARGE.value()); orderRecharge.setInvoiceState(0); orderRecharge.setDataState(DataStatusEnum.DATA_STATUS_VALID.value()); orderRecharge.setCreateEmpId(request.getCreateEmpid()); orderRecharge.setCreateEmpName(request.getCreateEmpName()); orderRecharge.setCreateDate(DateUtil.getDateTime()); for(AcctPersonDTO acctPersonDTO: acctPersonResult.getData()){ if(null == acctPersonDTO && acctPersonDTO.getAcctType().equals(AccountTypeEnum.ACCT_SEND_RECHARGE)){ continue; } orderRecharge.setAcctId(acctPersonDTO.getAcctId()); orderRecharge.setCustId(request.getCustId()); orderRecharge.setOrgId(request.getOrgId()); } if(StringUtils.isEmpty(orderRecharge.getAcctId())){ throw new BizException(ErrorType.BIZ_ERROR,"获取用户账户ID 失败!"); } int i = orderRechargeDao.insertOrderRecharge(orderRecharge); flg = i>0; logger.info("保存充值订单成功,插入数据条数={}",i); //创建支付单 logger.info("创建支付单:paySrcType{}" + PayOrderTypeEnum.BALANCE_PAY.value()); PayOrder payOrder = new PayOrder(); payOrder.setPayOrderId(SequenceUtil.getNextId(SequenceTypeEnum.ORDER_PAY_XIANJIN)); payOrder.setOrderBigType(OrderBigTypeEnum.RECHARGE_ORDER.value()); payOrder.setPayOrderType(PayOrderTypeEnum.BALANCE_PAY.value()); payOrder.setRltOrderId(rechargeOrderId); payOrder.setPayType(PayTypeEnum.XIANJIN.getValue()); payOrder.setTerminalSource(TerminalSourceEnum.CloudsPlatform.value()); payOrder.setPayOrderState(OrderStateEnum.PAYED.value()); payOrder.setPayFinishTime(new Date()); payOrder.setOrderActFee(request.getRechargeFee()*100); payOrder.setOrderDicountFee(request.getAcctGiveFee()*100); payOrder.setOrderTotalFee(request.getRechargeFee() * 100 +request.getAcctGiveFee() * 100); payOrder.setAppId("no_app_id"); payOrder.setPlNo(""); payOrder.setCreateEmpId(request.getCreateEmpid()); payOrder.setCreateEmpName(request.getCreateEmpName()); payOrder.setOrgId(request.getOrgId()); PayOrder paySuccessOrder = pubPayOrderOperInnerService.createPaySuccessOrder(payOrder); logger.info("创建支付单成功,结果={}",JSONObject.toJSON(paySuccessOrder)); /** * 3.给用户账户及赠送账号增加金额 */ logger.info("begin给用户账户及赠送账号增加金额..."); for(AcctPersonDTO acctPersonDTO: acctPersonResult.getData()){ if(null == acctPersonDTO || null == acctPersonDTO.getAcctType()){ continue; } AcctPersonRequest updateAcctPersonRequest = new AcctPersonRequest(); updateAcctPersonRequest.setAcctId(acctPersonDTO.getAcctId()); updateAcctPersonRequest.setCustId(acctPersonDTO.getCustId()); updateAcctPersonRequest.setOrgId(acctPersonDTO.getOrgId()); if(acctPersonDTO.getAcctType().equals(AccountTypeEnum.ACCT_RECHARGE.value())){ updateAcctPersonRequest.setAcctBalance(acctPersonDTO.getAcctBalance().add(new BigDecimal(request.getRechargeFee() * 100))); }else{ updateAcctPersonRequest.setAcctBalance(acctPersonDTO.getAcctBalance().add(new BigDecimal(request.getAcctGiveFee() * 100))); } updateAcctPersonRequest.setDataState(DataStatusEnum.DATA_STATUS_VALID.value()); updateAcctPersonRequest.setModfiyEmpid(request.getCreateEmpid()); updateAcctPersonRequest.setModfiyDate(new Date()); BizResult booleanBizResult = tdCAcctPersonService.updateAcctPerson(updateAcctPersonRequest); logger.info("end更新用户账户金额,账户ID={},账户类型={},充值前金额={},本次充值金额={},更新结果={}",acctPersonDTO.getAcctId(),acctPersonDTO.getAcctType() ,acctPersonDTO.getAcctBalance(),(AccountTypeEnum.ACCT_RECHARGE.value().equals(1))? request.getRechargeFee() :request.getAcctGiveFee(),JSONObject.toJSON(booleanBizResult)); if(null != booleanBizResult && booleanBizResult.getData()){ flg = booleanBizResult.getData(); } /** * 4.给充值来源表增加记录(td_c_acct_source) */ logger.info("begin给充值来源表增加记录(td_c_acct_source).."); AcctSourceRequest acctSourceRequest =new AcctSourceRequest(); acctSourceRequest.setAcctId(acctPersonDTO.getAcctId()); acctSourceRequest.setCustId(acctPersonDTO.getCustId()); acctSourceRequest.setTerminalSource(TerminalSourceEnum.CloudsPlatform.value()); acctSourceRequest.setRechargeType(payOrder.getPayType()); acctSourceRequest.setRechargeRemark("企业云给用户线下充值"); //充值账户 if(acctPersonDTO.getAcctType().equals(AccountTypeEnum.ACCT_RECHARGE.value())){ acctSourceRequest.setRechargeFee(new BigDecimal(request.getRechargeFee() * 100)); acctSourceRequest.setRechargeBalance(acctPersonDTO.getAcctBalance().add(new BigDecimal(request.getRechargeFee() * 100))); }else{ acctSourceRequest.setRechargeFee(new BigDecimal(request.getAcctGiveFee() * 100)); acctSourceRequest.setRechargeBalance(acctPersonDTO.getAcctBalance().add(new BigDecimal(request.getAcctGiveFee() * 100))); } acctSourceRequest.setRltPayorderId(payOrder.getPayOrderId()); acctSourceRequest.setRltOrderId(payOrder.getRltOrderId()); acctSourceRequest.setRechargeTime(payOrder.getPayFinishTime()); acctSourceRequest.setPlNo(""); acctSourceRequest.setRechargeId(request.getCreateEmpid()); acctSourceRequest.setRechargeName(request.getCreateEmpName()); acctSourceRequest.setRechargeTime(request.getRechargeTime()); // 账户更新状态 ??? 默认为 1 acctSourceRequest.setAcctUptState(1); acctSourceRequest.setDataState(DataStatusEnum.DATA_STATUS_VALID.value()); acctSourceRequest.setAcctType(acctPersonDTO.getAcctType()); acctSourceRequest.setCreateEmpid(request.getCreateEmpid()); acctSourceRequest.setCreateDate(request.getRechargeTime()); acctSourceRequest.setSysCode(BasicEnum.SYS_CODE.getValue()); acctSourceRequest.setOrgId(request.getOrgId()); BizResult acctSoureResult= tdCAcctSourceService.insertAcctSource(acctSourceRequest); logger.info("end 插入充值来源结果,账户ID={},账户类型={},充值前金额={},本次充值金额={},更新结果={}",acctPersonDTO.getAcctId(),acctPersonDTO.getAcctType() ,acctPersonDTO.getAcctBalance(),(AccountTypeEnum.ACCT_RECHARGE.value().equals(1))? request.getRechargeFee() :request.getAcctGiveFee(),JSONObject.toJSON(acctSoureResult)); } return new BizResult(flg) ; } /** * 判断用户的账户是否存在不存在则创建 * @Auther: wangfs * @param * @return */ private void checkCustAcctIsHas(BizResult> acctPersonResult,String custId,Long orgId){ if(null == acctPersonResult || CollectionUtils.isEmpty(acctPersonResult.getData())){ logger.info("custId={},的客户还没有创建个人账户,开始创建个人账户..."); //1.创建用户充值账户 AcctPersonRequest acctPersonRequest = new AcctPersonRequest(); acctPersonRequest.setAcctId(SequenceUtil.getNextId(SequenceTypeEnum.ACCOUNT_ID_P_SQE)); acctPersonRequest.setCustId(custId); acctPersonRequest.setOrgId(orgId); acctPersonRequest.setAcctType(AccountTypeEnum.ACCT_RECHARGE.value()); acctPersonRequest.setAcctOrder(1); acctPersonRequest.setMainFlg(1); acctPersonRequest.setAcctBalance(new BigDecimal(0)); acctPersonRequest.setDataState(DataStatusEnum.DATA_STATUS_VALID.value()); acctPersonRequest.setCreateDate(DateUtil.getSysDate()); acctPersonRequest.setModfiyDate(DateUtil.getSysDate()); BizResult booleanBizResult = tdCAcctPersonService.saveAcctPerson(acctPersonRequest); logger.info("创建充值账户结果={}",JSONObject.toJSON(booleanBizResult)); //2.创建赠送账号 AcctPersonRequest acctPersonRequestTwo = new AcctPersonRequest(); acctPersonRequestTwo.setAcctId(SequenceUtil.getNextId(SequenceTypeEnum.ACCOUNT_ID_P_SQE)); acctPersonRequestTwo.setCustId(custId); acctPersonRequestTwo.setOrgId(orgId); acctPersonRequestTwo.setAcctType(AccountTypeEnum.ACCT_SEND_RECHARGE.value()); acctPersonRequestTwo.setAcctOrder(2); acctPersonRequestTwo.setMainFlg(0); acctPersonRequestTwo.setAcctBalance(new BigDecimal(0)); acctPersonRequestTwo.setDataState(DataStatusEnum.DATA_STATUS_VALID.value()); acctPersonRequestTwo.setCreateDate(DateUtil.getSysDate()); acctPersonRequestTwo.setModfiyDate(DateUtil.getSysDate()); BizResult booleanBizResultTwo = tdCAcctPersonService.saveAcctPerson(acctPersonRequestTwo); logger.info("创建赠送账号户结果={}",JSONObject.toJSON(booleanBizResultTwo)); }else{ if(!CollectionUtils.isEmpty(acctPersonResult.getData()) && acctPersonResult.getData().size() == 1){ for(AcctPersonDTO acctPersonDTO :acctPersonResult.getData()){ //1.创建用户充值账户、赠送账户 AcctPersonRequest acctPersonRequest = new AcctPersonRequest(); acctPersonRequest.setAcctId(SequenceUtil.getNextId(SequenceTypeEnum.ACCOUNT_ID_P_SQE)); acctPersonRequest.setCustId(custId); acctPersonRequest.setOrgId(orgId); if(AccountTypeEnum.ACCT_RECHARGE.value().equals(acctPersonDTO.getAcctType())){ acctPersonRequest.setAcctType(AccountTypeEnum.ACCT_SEND_RECHARGE.value()); acctPersonRequest.setAcctOrder(2); acctPersonRequest.setMainFlg(0); }else{ acctPersonRequest.setAcctType(AccountTypeEnum.ACCT_RECHARGE.value()); acctPersonRequest.setAcctOrder(1); acctPersonRequest.setMainFlg(1); } acctPersonRequest.setAcctBalance(new BigDecimal(0)); acctPersonRequest.setDataState(DataStatusEnum.DATA_STATUS_VALID.value()); acctPersonRequest.setCreateDate(DateUtil.getSysDate()); acctPersonRequest.setModfiyDate(DateUtil.getSysDate()); BizResult booleanBizResult = tdCAcctPersonService.saveAcctPerson(acctPersonRequest); logger.info("创建充值账其中一个户结果={}",JSONObject.toJSON(booleanBizResult)); } } } } @Transactional @Override public BizResult accountStoreCarRechargeByXJ(AccountRechargeForEmployeeRequest request) { logger.info("储值车账户充值入参:"+ JSON.toJSONString(request)); /**1.通过停车订单ID 查询停车订单信息**/ OrderRecharge orderRecharge = new OrderRecharge(); orderRecharge.setOrderId(SequenceUtil.getNextId(SequenceTypeEnum.ORDER_ACC_RECHARGE)); orderRecharge.setOrderType(PayOrderTypeEnum.BALANCE_PAY.value()); orderRecharge.setOrderState(OrderStateEnum.PAYED.value()); orderRecharge.setOrderDicountFee(0L); orderRecharge.setOrderActFee(request.getRechargeFee().longValue()); orderRecharge.setOrderTotalFee(request.getRechargeFee().longValue()); orderRecharge.setCustType(CustTypeEnum.PERSON_CUST.value()); orderRecharge.setTerminalSource(TerminalSourceEnum.CloudsPlatform.value()); orderRecharge.setAcctType(AccountTypeEnum.ACCT_STORE_CAR.value()); orderRecharge.setDataState(DataStatusEnum.DATA_STATUS_VALID.value()); orderRecharge.setCreateDate(DateUtil.getDateTime()); orderRecharge.setModfiyDate(DateUtil.getDateTime()); orderRecharge.setCreateEmpId(request.getCreateEmpid()); orderRecharge.setCreateEmpName(request.getCreateEmpName()); /**2.通过储值车编号查询账户信息**/ AcctPersonRequest acctPersonRequest = new AcctPersonRequest(); acctPersonRequest.setCustId(request.getCustId()); acctPersonRequest.setAcctType(AccountTypeEnum.ACCT_STORE_CAR.value()); acctPersonRequest.setOrgId(request.getOrgId()); acctPersonRequest.setSysCode(BasicEnum.SYS_CODE.getValue()); BizResult rsAccPerson = tdCAcctPersonService.getAcctPerson(acctPersonRequest); if(!rsAccPerson.isSuccess() || rsAccPerson.getData().getAcctId()==null) { throw new BizException(ErrorType.ACCOUNT_NO_FIND); } AcctPersonDTO acctPersonDTO = rsAccPerson.getData(); String acctId = acctPersonDTO.getAcctId(); orderRecharge.setAcctId(acctId); orderRecharge.setCustId(request.getCustId()); orderRecharge.setOrgId(request.getOrgId()); orderRechargeDao.insertOrderRecharge(orderRecharge); /**3.创建支付单**/ logger.info("创建支付单:paySrcType{}" + PayOrderTypeEnum.BALANCE_PAY.value()); PayOrder payOrder = new PayOrder(); payOrder.setOrderBigType(OrderBigTypeEnum.RECHARGE_ORDER.value()); //支付单类型 payOrder.setPayOrderType(PayOrderTypeEnum.BALANCE_PAY.value()); payOrder.setRltOrderId(orderRecharge.getOrderId()); //支付方式--1:支付宝 2:微信 3:银联 4:微信公众号 6:现金 7:IC卡 */ payOrder.setPayType(PayTypeEnum.XIANJIN.getValue()); payOrder.setTerminalSource(TerminalSourceEnum.CloudsPlatform.value()); payOrder.setOrderActFee(request.getRechargeFee().longValue()); payOrder.setOrderDicountFee(0L); payOrder.setOrderTotalFee(request.getRechargeFee().longValue()); payOrder.setAppId("no_app_id"); payOrder.setPlNo(""); payOrder.setCreateEmpId(request.getCreateEmpid()); payOrder.setCreateEmpName(request.getCreateEmpName()); payOrder.setOrgId(request.getOrgId()); pubPayOrderOperInnerService.createPaySuccessOrder(payOrder); /**4.储值车账户充值**/ // 通过Custid 和 acctType 获取 账户person信息 acctPersonRequest.setAcctBalance(acctPersonDTO.getAcctBalance().add(request.getRechargeFee())); acctPersonRequest.setDataState(DataStatusEnum.DATA_STATUS_VALID.value()); acctPersonRequest.setModfiyEmpid(request.getCreateEmpid()); acctPersonRequest.setModfiyDate(new Date()); tdCAcctPersonService.updateAcctPerson(acctPersonRequest); AcctSourceRequest acctSourceRequest =new AcctSourceRequest(); acctSourceRequest.setAcctId(acctPersonDTO.getAcctId()); acctSourceRequest.setCustId(acctPersonDTO.getCustId()); acctSourceRequest.setTerminalSource(TerminalSourceEnum.CloudsPlatform.value()); acctSourceRequest.setRechargeType(payOrder.getPayType()); acctSourceRequest.setRechargeRemark(request.getRechargeRemark()); acctSourceRequest.setRechargeFee(request.getRechargeFee()); acctSourceRequest.setRechargeBalance(acctPersonRequest.getAcctBalance()); acctSourceRequest.setRechargeId(request.getCreateEmpid()); acctSourceRequest.setRechargeName(request.getCreateEmpName()); acctSourceRequest.setRechargeTime(request.getRechargeTime()); acctSourceRequest.setRltPayorderId(payOrder.getPayOrderId()); // 账户更新状态 ??? 默认为 1 acctSourceRequest.setAcctUptState(1); acctSourceRequest.setDataState(DataStatusEnum.DATA_STATUS_VALID.value()); acctSourceRequest.setAcctType(acctPersonDTO.getAcctType()); acctSourceRequest.setCreateEmpid(request.getCreateEmpid()); acctSourceRequest.setCreateDate(request.getRechargeTime()); acctSourceRequest.setSysCode(BasicEnum.SYS_CODE.getValue()); acctSourceRequest.setOrgId(request.getOrgId()); BizResult booleanBizResult= tdCAcctSourceService.insertAcctSource(acctSourceRequest); return booleanBizResult; } @Override public BizResult accountRechargeByBarcode(AccountRechargeByBarCodeRequest request) { logger.info("开始收费员充值-条码支付,请求参数:"+JSONObject.toJSONString(request, true)); /**插入充值订单*/ OrderRecharge orderRecharge = saveOrderRecharge(request); /**获取PDA对应的appId*/ String appId = getAppIdByOrgId(request.getOrgId(),request.getPayType().getValue()); /**创建待支付的充值支付单*/ PayOrder payOrder = this.createOrderRechargePayOrder(PayOrderTypeEnum.BALANCE_PAY, request.getPayType(), OrderStateEnum.WAIT_PAY, orderRecharge, null,appId,orderRecharge.getOrgId()); /**调用条码支付*/ BarcodePayRes barcodePayRes = this.realBarcodePay(request.getPayType(), request.getAuthCode(), request.getChargerName()+"账户充值", payOrder.getOrderActFee(), payOrder.getPayOrderId(),appId, request.getOrgId().toString()); logger.info("处理条码支付结果"); BarcodePayResultDTO payResultDTO = this.dealPayResultForRechargeByBarcodePay(payOrder, barcodePayRes); return new BizResult(payResultDTO); } @Override public BizResult accountBusinessByXJ(TdCBusinessAcctSourceRequest request) { OrderRecharge orderRecharge = new OrderRecharge(); orderRecharge.setOrderId(SequenceUtil.getNextId(SequenceTypeEnum.ORDER_ACC_RECHARGE)); orderRecharge.setOrderType(PayOrderTypeEnum.BALANCE_BUSINESS.value()); orderRecharge.setOrderState(OrderStateEnum.PAYED.value()); orderRecharge.setOrderDicountFee(0L); orderRecharge.setOrderActFee(request.getRechargeFee().longValue()); orderRecharge.setOrderTotalFee(request.getRechargeFee().longValue()); orderRecharge.setCustType(CustTypeEnum.ENTERPRISE_CUST.value()); orderRecharge.setTerminalSource(TerminalSourceEnum.CloudsPlatform.value()); orderRecharge.setAcctType(AccountTypeEnum.ACCT_RECHARGE.value()); orderRecharge.setDataState(DataStatusEnum.DATA_STATUS_VALID.value()); orderRecharge.setCreateDate(DateUtil.getDateTime()); orderRecharge.setModfiyDate(DateUtil.getDateTime()); orderRecharge.setCreateEmpId(request.getModifyEmpId()); orderRecharge.setCreateEmpName(request.getModifyEmpName()); orderRecharge.setAcctId(request.getAcctId()); orderRecharge.setCustId(request.getBusinessId()); orderRecharge.setOrgId(request.getOrgId()); orderRechargeDao.insertOrderRecharge(orderRecharge); PayOrder payOrder = new PayOrder(); payOrder.setOrderBigType(OrderBigTypeEnum.RECHARGE_ORDER.value()); //支付单类型 payOrder.setPayOrderType(PayOrderTypeEnum.BALANCE_BUSINESS.value()); //20220808修改,改为对应orderRacharg的orderID // payOrder.setRltOrderId(request.getSourceBillId()); payOrder.setRltOrderId(orderRecharge.getOrderId()); //支付方式--1:支付宝 2:微信 3:银联 4:微信公众号 6:现金 7:IC卡 */ payOrder.setPayType(PayTypeEnum.XIANJIN.getValue()); payOrder.setTerminalSource(TerminalSourceEnum.CloudsPlatform.value()); payOrder.setOrderActFee(request.getRechargeFee().longValue()); payOrder.setOrderDicountFee(0L); payOrder.setOrderTotalFee(request.getRechargeFee().longValue()); payOrder.setAppId("no_app_id"); payOrder.setPlNo(""); payOrder.setCreateEmpId(request.getModifyEmpId()); payOrder.setCreateEmpName(request.getCreateEmpName()); payOrder.setOrgId(request.getOrgId()); PayOrder paySuccessOrder = pubPayOrderOperInnerService.createPaySuccessOrder(payOrder); PayOrderDTO payOrderDTO = new PayOrderDTO(); BeanUtils.copyProperties(paySuccessOrder,payOrderDTO); return new BizResult(payOrderDTO); } /*** * 插入充值订单 */ private OrderRecharge saveOrderRecharge(AccountRechargeByBarCodeRequest request){ /**2.通过收费员编号查询账户信息**/ AcctPersonRequest acctPersonRequest = new AcctPersonRequest(); acctPersonRequest.setCustId(request.getChargerCode()); acctPersonRequest.setAcctType(AccountTypeEnum.ACCT_EMPLOYEE_RECHARGE.value()); acctPersonRequest.setOrgId(request.getOrgId()); acctPersonRequest.setSysCode(BasicEnum.SYS_CODE.getValue()); BizResult rsAccPerson = tdCAcctPersonService.getAcctPerson(acctPersonRequest); if(!rsAccPerson.isSuccess() || rsAccPerson.getData().getAcctId()==null) { throw new BizException(ErrorType.ACCOUNT_NO_FIND); } AcctPersonDTO acctPersonDTO = rsAccPerson.getData(); String acctId = acctPersonDTO.getAcctId(); /**1.通过停车订单ID 查询停车订单信息**/ OrderRecharge orderRecharge = new OrderRecharge(); orderRecharge.setOrderId(SequenceUtil.getNextId(SequenceTypeEnum.ORDER_ACC_RECHARGE)); orderRecharge.setOrderType(PayOrderTypeEnum.BALANCE_PAY.value()); orderRecharge.setOrderState(OrderStateEnum.WAIT_PAY.value()); orderRecharge.setOrderDicountFee(0L); orderRecharge.setOrderActFee(request.getOrderActFee()); orderRecharge.setOrderTotalFee(request.getOrderActFee()); orderRecharge.setCustType(CustTypeEnum.PERSON_CUST.value()); orderRecharge.setTerminalSource(TerminalSourceEnum.PDA.value()); orderRecharge.setAcctType(AccountTypeEnum.ACCT_EMPLOYEE_RECHARGE.value()); orderRecharge.setDataState(DataStatusEnum.DATA_STATUS_VALID.value()); orderRecharge.setCreateDate(DateUtil.getDateTime()); orderRecharge.setModfiyDate(DateUtil.getDateTime()); orderRecharge.setCreateEmpId(request.getChargerCode()); orderRecharge.setCreateEmpName(request.getChargerName()); orderRecharge.setAcctId(acctId); orderRecharge.setCustId(request.getChargerCode()); orderRecharge.setOrgId(request.getOrgId()); orderRechargeDao.insertOrderRecharge(orderRecharge); return orderRecharge; } /** * * @param payOrderTypeEnum * @param payTypeEnum * @param orderStateEnum * @param payFinishTime * @return * 2018年3月19日 zhaowg */ private PayOrder createOrderRechargePayOrder(PayOrderTypeEnum payOrderTypeEnum,PayTypeEnum payTypeEnum,OrderStateEnum orderStateEnum, OrderRecharge orderRecharge,Date payFinishTime,String appId,Long orgId) { if(orderRecharge.getOrderActFee()==0){ logger.info("没有实际支付金额,无需生成支付单"); return null; } if(payFinishTime==null){ //设置为1970年 payFinishTime = new Date(); payFinishTime.setTime(0); } PayOrder payOrder = new PayOrder(); payOrder.setOrderBigType(OrderBigTypeEnum.RECHARGE_ORDER.value()); payOrder.setPayOrderType(payOrderTypeEnum.value()); payOrder.setRltOrderId(orderRecharge.getOrderId()); payOrder.setPayType(payTypeEnum.getValue()); payOrder.setTerminalSource(orderRecharge.getTerminalSource()); payOrder.setOrderTotalFee(orderRecharge.getOrderTotalFee()); payOrder.setOrderDicountFee(orderRecharge.getOrderDicountFee()); payOrder.setOrderActFee(orderRecharge.getOrderActFee()); payOrder.setPayFinishTime(payFinishTime); payOrder.setPayOrderState(orderStateEnum.value()); payOrder.setPlNo("002"); payOrder.setCreateEmpId(orderRecharge.getCreateEmpId()); payOrder.setCreateEmpName(orderRecharge.getCreateEmpName()); payOrder.setChargerName(orderRecharge.getCreateEmpName()); payOrder.setChargerCode(orderRecharge.getCreateEmpId()); payOrder.setAppId(appId); payOrder.setOrgId(orgId); payOrderDao.savePayOrder(payOrder ); return payOrder; } private BarcodePayResultDTO dealPayResultForRechargeByBarcodePay(PayOrder payOrder, BarcodePayRes barcodePayRes) { String orderId = payOrder.getRltOrderId(); PayResultEnum payResultEnum = null; if(barcodePayRes == null){ payResultEnum = PayResultEnum.PAY_NO_KNOW; }else{ payResultEnum = barcodePayRes.getPayResultEnum(); } //支付状态不明或用户正在支付中 if(payResultEnum == PayResultEnum.PAY_NO_KNOW || payResultEnum == PayResultEnum.PAY_USERPAYING){ //更新支付单 pubPayOrderOperInnerService.updatePayOrderByBarcode(payOrder.getPayOrderId(),barcodePayRes); logger.info("插入条码支付处理表,交由定时任务处理"); Date curDate = new Date(); PayOrderBarcode record = new PayOrderBarcode(); record.setCallNum(0); record.setCallTime(curDate); record.setCreateDate(new Date()); record.setCreateEmpId(payOrder.getCreateEmpId()); record.setCreateEmpName(payOrder.getCreateEmpName()); record.setDataState(DataStatusEnum.DATA_STATUS_VALID.value()); record.setOrderBigType(payOrder.getOrderBigType()); record.setPayOrderId(payOrder.getPayOrderId()); record.setPayOrderState(payResultEnum == PayResultEnum.PAY_NO_KNOW?OrderStateEnum.PAY_UNKNOW.value():OrderStateEnum.PAY_USERPAYING.value()); record.setPayOrderType(payOrder.getPayOrderType()); record.setRltOrderId(orderId); record.setPayType(payOrder.getPayType()); record.setErrorCode(barcodePayRes!=null?barcodePayRes.getErrCode():""); record.setErrorMsg(barcodePayRes!=null?barcodePayRes.getErrCode()+" "+barcodePayRes.getErrMsg():"barcodePayRes 返回为空,无法获取错误信息"); record.setAppId(barcodePayRes.getAppId()); payOrderBarcodeDao.insertSelective(record ); //支付成功或支付失败 }else if(payResultEnum == PayResultEnum.PAY_SUCCESS || payResultEnum == PayResultEnum.PAY_FAIL){ rechargeOrderOperInnerService.dealPaySuccessOrFailForRechargeByBarcodePay(payOrder,barcodePayRes); } return new BarcodePayResultDTO(payResultEnum, payOrder.getPayOrderId(),orderId); } /** * 条码支付 * @param authCode * @param title * @param actFee * @param payOrderId * @return * 2017年11月25日 zhaowg */ private BarcodePayRes realBarcodePay(PayTypeEnum payTypeEnum,String authCode,String title,Long actFee,String payOrderId,String appId){ logger.info("发起条码支付"); BarcodePayReq barcodeReq = new BarcodePayReq(); barcodeReq.setAuthCode(authCode); barcodeReq.setBody(title); barcodeReq.setOrderPayedFee(actFee); barcodeReq.setPayOrderId(payOrderId); barcodeReq.setPayTypeEnum(payTypeEnum); barcodeReq.setAppId(appId); BarcodePayRes barcodePayRes = aliWxinPayInnerRouteService.getRealService(payTypeEnum.getValue()).barcodePay(barcodeReq); return barcodePayRes; } /** * 条码支付 * @param authCode * @param title * @param actFee * @param payOrderId * @param orgId * @return * 2024年04月19日 wangxin 加上orgid */ private BarcodePayRes realBarcodePay(PayTypeEnum payTypeEnum,String authCode,String title,Long actFee,String payOrderId,String appId, String orgId){ logger.info("发起条码支付"); BarcodePayReq barcodeReq = new BarcodePayReq(); barcodeReq.setAuthCode(authCode); barcodeReq.setBody(title); barcodeReq.setOrderPayedFee(actFee); barcodeReq.setPayOrderId(payOrderId); barcodeReq.setPayTypeEnum(payTypeEnum); barcodeReq.setAppId(appId); barcodeReq.setOrgId(orgId); BarcodePayRes barcodePayRes = aliWxinPayInnerRouteService.getRealService(payTypeEnum.getValue()).barcodePay(barcodeReq); return barcodePayRes; } /**通过orgID查询APPID*/ public String getAppIdByOrgId(Long orgId,Integer payType){ SysOrgAppIdQueryRequest request = new SysOrgAppIdQueryRequest(); request.setOrgId(orgId); request.setPayType(payType); request.setSysCode(BasicEnum.SYS_CODE.getValue()); BizResult bizResult = sysOrgAppIdService.querySysOrgAppIdByOrgIdAndPayType(request); return bizResult.getData().getPayAppId(); } }