package com.stylefeng.guns.modular.huifu.controller; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.huifu.bspay.sdk.opps.core.utils.RsaUtils; import com.stylefeng.guns.modular.huifu.properties.HuiFuProperties; import com.stylefeng.guns.modular.system.model.TCompanyWithdraw; import com.stylefeng.guns.modular.system.model.TDriver; import com.stylefeng.guns.modular.system.model.TEnterpriseWithdrawal; import com.stylefeng.guns.modular.system.model.TOrderCrossCity; import com.stylefeng.guns.modular.system.model.TOrderLogistics; import com.stylefeng.guns.modular.system.model.TPubWithdrawal; import com.stylefeng.guns.modular.system.model.TUser; import com.stylefeng.guns.modular.system.service.ITCompanyWithdrawService; import com.stylefeng.guns.modular.system.service.ITDriverService; import com.stylefeng.guns.modular.system.service.ITEnterpriseWithdrawalService; import com.stylefeng.guns.modular.system.service.ITOrderCrossCityService; import com.stylefeng.guns.modular.system.service.ITOrderLogisticsService; import com.stylefeng.guns.modular.system.service.ITPubWithdrawalService; import com.stylefeng.guns.modular.system.service.ITUserService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.math.BigDecimal; import java.util.Objects; /** * @author mitao * @date 2025/11/21 */ @Slf4j @RestController @RequestMapping("/base/dougong") public class DouGongNotifyController { @Autowired private HuiFuProperties huiFuProperties; @Autowired private ITCompanyWithdrawService companyWithdrawService; @Autowired private ITPubWithdrawalService pubWithdrawalService; @Autowired private ITOrderCrossCityService orderCrossCityService; @Autowired private ITOrderLogisticsService orderLogisticsService; @Autowired private ITUserService userService; @Autowired private ITDriverService driverService; /** * 斗拱主动取现接口企业回调 * @param request * @param response */ @PostMapping("/ent/encashment") public void entEncashment(HttpServletRequest request, HttpServletResponse response) { String sign =request.getParameter("sign"); String resp_data = request.getParameter("resp_data"); log.info("斗拱企业提现回调响应内容:{}", resp_data); // 使用汇付公钥验签 resp_data = resp_data.replaceAll("& #40;", "(").replaceAll("& #41;",")"); boolean verify = RsaUtils.verify(resp_data, huiFuProperties.getRsaPublicKey(), sign); if(verify){ JSONObject respDataJson = JSONObject.parseObject(resp_data); String reqSeqId = respDataJson.getString("req_seq_id"); String hfSeqId = respDataJson.getString("hf_seq_id"); String transStat = respDataJson.getString("trans_stat");//S:成功 F:失败 P:处理中;示例值:S TCompanyWithdraw companyWithdraw = companyWithdrawService.selectOne(new EntityWrapper().eq("reqSeqId", reqSeqId).or().eq("hfSeqId", hfSeqId).last("limit 1")); if (Objects.isNull(companyWithdraw)) { return; } if ("S".equalsIgnoreCase(transStat)) { companyWithdraw.setStatus(1); } else if ("F".equalsIgnoreCase(transStat)) { companyWithdraw.setStatus(2); } companyWithdrawService.updateById(companyWithdraw); log.info("更新企业提现记录成功,更新内容“{}", JSONObject.toJSON(companyWithdraw)); PrintWriter writer = null; try { writer = response.getWriter(); } catch (IOException e) { throw new RuntimeException(e); } writer.print("200"); writer.close(); } } /** * 斗拱主动取现接口回调 * @param request * @param response */ @PostMapping("/user/encashment") public void userEncashment(HttpServletRequest request, HttpServletResponse response) { String sign =request.getParameter("sign"); String resp_data = request.getParameter("resp_data"); log.info("斗拱用户提现回调响应内容:{}", resp_data); // 使用汇付公钥验签 resp_data = resp_data.replaceAll("& #40;", "(").replaceAll("& #41;",")"); boolean verify = RsaUtils.verify(resp_data, huiFuProperties.getRsaPublicKey(), sign); if(verify){ JSONObject respDataJson = JSONObject.parseObject(resp_data); String reqSeqId = respDataJson.getString("req_seq_id"); String hfSeqId = respDataJson.getString("hf_seq_id"); String transStat = respDataJson.getString("trans_stat");//S:成功 F:失败 P:处理中;示例值:S TPubWithdrawal pubWithdrawal = pubWithdrawalService.selectOne(new EntityWrapper().eq("reqSeqId", reqSeqId).or().eq("hfSeqId", hfSeqId).last("limit 1")); if (Objects.isNull(pubWithdrawal)) { return; } if ("S".equalsIgnoreCase(transStat)) { pubWithdrawal.setState(2); } else if ("F".equalsIgnoreCase(transStat)) { pubWithdrawal.setState(3); if (pubWithdrawal.getUserType() == 1) { TUser tUser = userService.selectById(pubWithdrawal.getUserId()); tUser.setBalance(tUser.getBalance().add(pubWithdrawal.getMoney())); userService.updateById(tUser); } else { TDriver driver = driverService.selectById(pubWithdrawal.getUserId()); driver.setLaveBusinessMoney(new BigDecimal(driver.getLaveBusinessMoney()).add(pubWithdrawal.getMoney()).doubleValue()); driverService.updateById(driver); } } pubWithdrawalService.updateById(pubWithdrawal); log.info("更新用户/司机提现记录成功,更新内容“{}", JSONObject.toJSON(pubWithdrawal)); PrintWriter writer = null; try { writer = response.getWriter(); } catch (IOException e) { throw new RuntimeException(e); } writer.print("200"); writer.close(); } } /** * 斗拱主动取现接口回调 * @param request * @param response */ @PostMapping("/refund-logistics") public void refundLogistics(HttpServletRequest request, HttpServletResponse response) { String sign =request.getParameter("sign"); String resp_data = request.getParameter("resp_data"); log.info("斗拱用户提现回调响应内容:{}", resp_data); // 使用汇付公钥验签 resp_data = resp_data.replaceAll("& #40;", "(").replaceAll("& #41;",")"); boolean verify = RsaUtils.verify(resp_data, huiFuProperties.getRsaPublicKey(), sign); if(verify){ JSONObject respDataJson = JSONObject.parseObject(resp_data); String reqSeqId = respDataJson.getString("req_seq_id"); String orgReqSeqId = respDataJson.getString("org_req_seq_id"); String transStat = respDataJson.getString("trans_stat");//S:成功 F:失败 P:处理中;示例值:S TOrderLogistics orderLogistics = orderLogisticsService.selectOne(new EntityWrapper() .eq("refundReqSeqId", reqSeqId).or().eq("outTradeNo", orgReqSeqId).last("limit 1")); if (Objects.isNull(orderLogistics)) { return; } if ("S".equalsIgnoreCase(transStat)) { orderLogistics.setState(10); } orderLogisticsService.updateById(orderLogistics); log.info("更新小件物流取消订单状态成功,更新内容“{}", JSONObject.toJSON(orderLogistics)); PrintWriter writer = null; try { writer = response.getWriter(); } catch (IOException e) { throw new RuntimeException(e); } writer.print("200"); writer.close(); } } /** * 斗拱主动取现接口回调 * @param request * @param response */ @PostMapping("/refund-crosscity") public void refundCrossCity(HttpServletRequest request, HttpServletResponse response) { String sign =request.getParameter("sign"); String resp_data = request.getParameter("resp_data"); log.info("斗拱用户提现回调响应内容:{}", resp_data); // 使用汇付公钥验签 resp_data = resp_data.replaceAll("& #40;", "(").replaceAll("& #41;",")"); boolean verify = RsaUtils.verify(resp_data, huiFuProperties.getRsaPublicKey(), sign); if(verify){ JSONObject respDataJson = JSONObject.parseObject(resp_data); String reqSeqId = respDataJson.getString("req_seq_id"); String orgReqSeqId = respDataJson.getString("org_req_seq_id"); String transStat = respDataJson.getString("trans_stat");//S:成功 F:失败 P:处理中;示例值:S TOrderCrossCity orderCrossCity = orderCrossCityService.selectOne(new EntityWrapper() .eq("refundReqSeqId", reqSeqId).or().eq("outTradeNo", orgReqSeqId).last("limit 1")); if (Objects.isNull(orderCrossCity)) { return; } if ("S".equalsIgnoreCase(transStat)) { orderCrossCity.setState(10); } orderCrossCityService.updateById(orderCrossCity); log.info("更新跨城订单取消订单状态成功,更新内容“{}", JSONObject.toJSON(orderCrossCity)); PrintWriter writer = null; try { writer = response.getWriter(); } catch (IOException e) { throw new RuntimeException(e); } writer.print("200"); writer.close(); } } }