package com.stylefeng.guns.modular.system.controller.general; import cn.hutool.core.codec.Base64; import cn.hutool.core.util.ZipUtil; import cn.hutool.crypto.SecureUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.mapper.Wrapper; import com.stylefeng.guns.core.base.controller.BaseController; import com.stylefeng.guns.core.base.tips.SuccessTip; import com.stylefeng.guns.core.common.constant.state.ManagerStatus; import com.stylefeng.guns.core.exception.GunsException; import com.stylefeng.guns.core.exception.ServiceExceptionEnum; import com.stylefeng.guns.core.shiro.ShiroKit; import com.stylefeng.guns.core.shiro.ShiroUser; import com.stylefeng.guns.core.util.DateUtil; import com.stylefeng.guns.core.util.ToolUtil; import com.stylefeng.guns.modular.system.controller.resp.TAgentResp; import com.stylefeng.guns.modular.system.controller.util.ExcelUtil; import com.stylefeng.guns.modular.system.controller.util.UUIDUtil; import com.stylefeng.guns.modular.system.enums.OrderStateEnum; import com.stylefeng.guns.modular.system.enums.PayStatusEnum; import com.stylefeng.guns.modular.system.enums.UserTypeEnum; import com.stylefeng.guns.modular.system.model.*; import com.stylefeng.guns.modular.system.service.*; import com.stylefeng.guns.modular.system.util.MallBook.model.*; import com.stylefeng.guns.modular.system.util.MallBook.util.TrhRequest; import com.stylefeng.guns.modular.system.util.RedisUtil; import com.stylefeng.guns.modular.system.util.ResultUtil; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.apache.poi.hdf.extractor.TC; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import org.springframework.ui.Model; import org.springframework.beans.factory.annotation.Autowired; import com.stylefeng.guns.core.log.LogObjectHolder; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.math.BigDecimal; import java.net.InetAddress; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; /** * 控制器 * * @author fengshuonan * @Date 2023-02-20 09:18:08 */ @Controller @RequestMapping("/tAgent") public class TAgentController extends BaseController { private String PREFIX = "/system/tAgent/"; @Autowired private ITAgentService tAgentService; @Autowired private ITRegionService tRegionService; @Autowired private ITDriverService tDriverService; @Autowired private ITDriverWorkService tDriverWorkService; @Autowired private IUserService userService; @Autowired private RedisUtil redisUtil; @Autowired private ISettlementRecordService settlementRecordService; @Autowired private IRechargeRecordService rechargeRecordService; @Value("${callbackPath}") private String callbackPath; /** * 跳转到首页 */ @RequestMapping("") public String index(Model model) { model.addAttribute("userType", Objects.requireNonNull(ShiroKit.getUser()).getRoleType()); return PREFIX + "tAgent.html"; } /** * 跳转到添加 */ @RequestMapping("/tAgent_add") public String tAgentAdd() { return PREFIX + "tAgent_add.html"; } /** * 跳转到修改 */ @RequestMapping("/tAgent_update/{tAgentId}") public String tAgentUpdate(@PathVariable Integer tAgentId, Model model) { TAgent tAgent = tAgentService.selectById(tAgentId); model.addAttribute("item",tAgent); LogObjectHolder.me().set(tAgent); return PREFIX + "tAgent_edit.html"; } /** * 跳转详情页面 */ @RequestMapping("/agentDetail") public String agentDetail(Integer agentId, Model model) { tAgentService.detail(agentId,model); return PREFIX + "tAgentDetail.html"; } /** * 跳转区域页面 */ @RequestMapping("/areaDetail") public String areaDetail(String area,String areaId,Model model) { String[] split1 = areaId.split("/"); List tRegions = tRegionService.selectList(new EntityWrapper().eq("parent_id", 0)); model.addAttribute("province",tRegions); List provinceIds = tRegions.stream().map(TRegion::getId).collect(Collectors.toList()); // 查询市 List tRegions1 = tRegionService.selectList(new EntityWrapper().eq("parent_id", split1[0])); model.addAttribute("cityList",tRegions1); if(StringUtils.hasLength(area) && StringUtils.hasLength(areaId)){ String[] split = area.split("/"); model.addAttribute("provinceName",split[0]); model.addAttribute("cityName",split[1]); model.addAttribute("provinceId",split1[0]); model.addAttribute("cityId",split1[1]); }else { model.addAttribute("provinceName",""); model.addAttribute("cityName",""); model.addAttribute("provinceId",""); model.addAttribute("cityId",""); } return PREFIX + "tAgentArea.html"; } /** * 获取列表 */ @RequestMapping(value = "/list") @ResponseBody public Object list(String principal,String principalPhone,String createTime,Integer status) { EntityWrapper wrapper = tAgentService.getAgentWrapper(principal,principalPhone,createTime,status); List tAgents = tAgentService.selectList(wrapper); // 代理商列表数据封装(导出共用) return tAgentService.getAgentResp(tAgents); } /** * 获取列表 */ @RequestMapping(value = "/list-back") @ResponseBody public Object listBack(String condition) { return tAgentService.selectList(null); } /** * 新增 */ @RequestMapping(value = "/add") @ResponseBody @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRES_NEW) public Object add(TAgent tAgent) { String[] split1 = tAgent.getArea().split("/"); int count = tAgentService.selectCount(new EntityWrapper().eq("provinceName", split1[0]).eq("cityName",split1[1])); if(count>0){ return new SuccessTip(500,"该代理商已存在!"); } int count1 = userService.selectCount(new EntityWrapper().eq("account", tAgent.getAccount())); if (count1 > 0){ return new SuccessTip(500,"该账号已存在!"); } tAgent.setPrincipal(tAgent.getPrincipal().replace(" ","")); String[] split = tAgent.getAreaId().split("/"); // 查询省市 // 黑龙江省/大兴安岭地区 // 702/852 TRegion province = tRegionService.selectById(split[0]); tAgent.setProvinceName(province.getName()); tAgent.setProvinceCode(province.getCode()); TRegion city = tRegionService.selectById(split[1]); if(Objects.isNull(city)){ city = tRegionService.selectOne(new EntityWrapper() .eq("name",split[1]) .last("LIMIT 1")); } tAgent.setCityName(city.getName()); tAgent.setCityCode(city.getCode()); tAgentService.insert(tAgent); //添加User对象 User user = new User(); user.setAccount(tAgent.getAccount()); user.setSalt(ShiroKit.getRandomSalt(5)); user.setPassword(ShiroKit.md5(tAgent.getPassword(), user.getSalt())); user.setStatus(ManagerStatus.OK.getCode()); user.setRoleid("2"); user.setDeptid(25); user.setCreatetime(new Date()); user.setRoleType(3); user.setObjectId(tAgent.getId()); user.setName(tAgent.getPrincipal()); user.setSex(1); userService.insert(user); new Thread(new Runnable() { @Override public void run() { registeredMerchant(tAgent); } }).start(); return SUCCESS_TIP; } public void registeredMerchant(TAgent tAgent){ if(tAgent.getUserType() == 0){ Register registerVO = new Register(); registerVO.setMerUserId("agent_" + tAgent.getId()); registerVO.setPhone(tAgent.getPrincipalPhone()); registerVO.setUserType("0"); registerVO.setUserName(tAgent.getMerchantName()); registerVO.setCertId(tAgent.getMerchantIDCode()); registerVO.setNotifyUrl(callbackPath + "/base/driver/microenterpriseCallback"); TrhRequest request = new TrhRequest(); InterfaceResponse execute = request.execute(registerVO, Register.SERVICE_CODE); if("0000".equals(execute.getCode())){ JSONObject jsonObject = JSON.parseObject(execute.getResult()); String status = jsonObject.getString("status"); if("2".equals(status)){ tAgent.setMerchantStatus(2); tAgentService.updateById(tAgent); System.err.println("注册代理商子商户失败"); } if("0".equals(status)){ tAgent.setMerchantStatus(0); tAgentService.updateById(tAgent); System.err.println("注册代理商子商户处理中"); } if("1".equals(status)){ String userId = jsonObject.getString("userId"); tAgent.setMerchantNumber(userId); tAgent.setMerchantStatus(1); tAgentService.updateById(tAgent); BindAccount bindAccount = new BindAccount(); bindAccount.setUserId(tAgent.getMerchantNumber()); bindAccount.setCertId(tAgent.getMerchantIDCode()); bindAccount.setCardName(tAgent.getCardName()); bindAccount.setCardNo(tAgent.getCardNo()); bindAccount.setBankAcctType(tAgent.getBankAcctType().toString()); bindAccount.setPhone(tAgent.getPhone()); TrhRequest request1 = new TrhRequest(); InterfaceResponse execute1 = request1.execute(bindAccount, BindAccount.SERVICE_CODE); if("0000".equals(execute1.getCode())){ JSONObject jsonObject1 = JSON.parseObject(execute1.getResult()); String status1 = jsonObject1.getString("status"); if("2".equals(status1)){ tAgent.setBankStatus(2); tAgentService.updateById(tAgent); System.err.println("绑定结算账户失败" ); } if("1".equals(status1)){ tAgent.setBankStatus(1); tAgentService.updateById(tAgent); System.err.println("绑定结算账户成功"); } if("0".equals(status1)){ tAgent.setBankStatus(0); tAgentService.updateById(tAgent); System.err.println("绑定结算账户处理中"); } }else{ System.err.println("绑定结算账户失败:" + execute.getMsg()); } } }else{ System.err.println("注册代理商子商户异常:" + execute.getMsg()); } }else{ Register registerVO = new Register(); registerVO.setMerUserId("agent_" + tAgent.getId()); registerVO.setPhone(tAgent.getPrincipalPhone()); registerVO.setUserType(tAgent.getUserType().toString()); registerVO.setUserName(tAgent.getMerchantName()); registerVO.setCertId(tAgent.getMerchantIDCode()); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); registerVO.setCertIdExpires(sdf.format(tAgent.getCertIdExpires())); registerVO.setBusinessScope(tAgent.getBusinessScope()); registerVO.setSocialCreditCode(tAgent.getSocialCreditCode()); registerVO.setSocialCreditCodeExpires(sdf.format(tAgent.getSocialCreditCodeExpires())); registerVO.setLegalPhone(tAgent.getLegalPhone()); registerVO.setLegalPerson(tAgent.getLegalPerson()); registerVO.setAddress(tAgent.getAddress()); /** * 省份编码(子商户类型非小微必填) 字段长度最长:4位 */ registerVO.setProvCode("0035"); /** * 地区编码(子商户类型非小微必填) 字段长度最长:4位 */ registerVO.setAreaCode("3501"); registerVO.setFileNo(tAgent.getFileNo()); registerVO.setNotifyUrl(callbackPath + "/base/driver/microenterpriseCallback"); registerVO.setParameter1(tAgent.getId().toString()); TrhRequest request = new TrhRequest(); InterfaceResponse response = request.execute(registerVO, Register.SERVICE_CODE); if("0000".equals(response.getCode())){ JSONObject jsonObject = JSON.parseObject(response.getResult()); String status = jsonObject.getString("status"); if("2".equals(status)){ tAgent.setMerchantStatus(2); tAgentService.updateById(tAgent); System.err.println("注册代理商子商户失败"); } if("0".equals(status)){ tAgent.setMerchantStatus(0); tAgentService.updateById(tAgent); System.err.println("注册代理商子商户处理中"); } if("1".equals(status)){ String userId = jsonObject.getString("userId"); tAgent.setMerchantNumber(userId); tAgent.setMerchantStatus(1); tAgentService.updateById(tAgent); //开始绑定结算账户 BindAccount bindAccount = new BindAccount(); bindAccount.setUserId(tAgent.getMerchantNumber()); bindAccount.setCertId(tAgent.getMerchantIDCode()); bindAccount.setCardName(tAgent.getCardName()); bindAccount.setCardNo(tAgent.getCardNo()); bindAccount.setBankAcctType(tAgent.getBankAcctType().toString()); bindAccount.setPhone(tAgent.getPhone()); bindAccount.setBankCode(tAgent.getBankCode()); /** * 省份编码 */ bindAccount.setProvCode("0035"); /** * 地区编码 */ bindAccount.setAreaCode("3501"); TrhRequest request1 = new TrhRequest(); InterfaceResponse execute = request1.execute(bindAccount, BindAccount.SERVICE_CODE); if("0000".equals(execute.getCode())){ JSONObject jsonObject1 = JSON.parseObject(execute.getResult()); String status1 = jsonObject1.getString("status"); if("2".equals(status1)){ tAgent.setBankStatus(2); tAgentService.updateById(tAgent); System.err.println("绑定结算账户失败" ); } if("1".equals(status1)){ tAgent.setBankStatus(1); tAgentService.updateById(tAgent); System.err.println("绑定结算账户成功"); } if("0".equals(status1)){ tAgent.setBankStatus(0); tAgentService.updateById(tAgent); System.err.println("绑定结算账户处理中"); } }else{ System.err.println("绑定结算账户失败:" + execute.getMsg()); } } }else{ System.err.println("注册代理商子商户异常:" + response.getMsg()); } } } /** * 删除 */ @RequestMapping(value = "/delete") @ResponseBody public Object delete(@RequestParam Integer tAgentId) { tAgentService.deleteById(tAgentId); return SUCCESS_TIP; } /** * 修改用户状态 */ @RequestMapping(value = "/update-status") @ResponseBody public Object updateStatus(Integer id,Integer status) { TAgent tAgent = tAgentService.selectById(id); if(1 == status){ tAgent.setStatus(2); } if(2 == status){ tAgent.setStatus(1); } tAgentService.updateById(tAgent); // 冻结下面所有的司机 List list = tDriverService.selectList(new EntityWrapper() .eq("agentId", id)); for (TDriver tDriver : list) { if(1 == status){ tDriver.setStatus(2); String value = redisUtil.getValue("DRIVER_" + tDriver.getPhone()); redisUtil.remove(value); redisUtil.remove("DRIVER_" + tDriver.getPhone()); TDriverWork tDriverWork = tDriverWorkService.selectOne(new EntityWrapper() .eq("driverId", tDriver.getId()) .eq("status", 1) .orderBy("workTime", false) .last("LIMIT 1")); if(Objects.nonNull(tDriverWork)){ tDriverWork.setStatus(2); tDriverWork.setOffWorkTime(new Date()); tDriverWorkService.updateById(tDriverWork); } } if(2 == status){ tDriver.setStatus(1); } } if(!CollectionUtils.isEmpty(list)){ tDriverService.updateBatchById(list); } return SUCCESS_TIP; } /** * 修改 */ @RequestMapping(value = "/update") @ResponseBody public Object update(TAgent tAgent) { tAgent.setPrincipal(tAgent.getPrincipal().replace(" ","")); tAgentService.updateById(tAgent); return SUCCESS_TIP; } /** * 详情 */ @RequestMapping(value = "/detail/{tAgentId}") @ResponseBody public Object detail(@PathVariable("tAgentId") Integer tAgentId) { return tAgentService.selectById(tAgentId); } @ApiOperation(value = "省市区查询",notes="省市区查询") @RequestMapping(value = "/area") @ResponseBody public Object area() { return tRegionService.getAreaList(); } @ApiOperation(value = "省查询",notes="省查询") @RequestMapping(value = "/areaProvince") @ResponseBody public Object areaProvince(Model model) { return tRegionService.selectList(new EntityWrapper().eq("parent_id", 0)); } @ApiOperation(value = "市区查询",notes="市区查询") @RequestMapping(value = "/areaCity") @ResponseBody public Object areaCity(Integer parentId) { return tRegionService.selectList(new EntityWrapper().eq("parent_id",parentId)); } @ApiOperation(value = "导出代理商列表",notes="导出代理商列表") @RequestMapping(value = "/export") @ResponseBody public void export(String principal,String principalPhone,Integer status,String createTime, HttpServletResponse response) { try { Date date = new Date(); DateFormat format = new SimpleDateFormat("yyyyMMdd"); String time1 = format.format(date); String fileName = "Agent"+time1+".xls"; String[] title = new String[] {"时间","姓名","联系电话","代理区域","客服电话","订单数量", "有效订单","已发放优惠券","已使用优惠券","累计优惠券金额","司机充值","司机数","状态"}; EntityWrapper wrapper = tAgentService.getAgentWrapper(principal,principalPhone,createTime,status); // 是否异常 List list = tAgentService.selectList(wrapper); List agentResp = tAgentService.getAgentResp(list); String[][] values = new String[agentResp.size()][]; for (int i = 0; i < agentResp.size(); i++) { TAgentResp d = agentResp.get(i); values[i] = new String[title.length]; values[i][0] = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(d.getCreateTime()); values[i][1] = d.getPrincipal(); values[i][2] = d.getPrincipalPhone(); values[i][3] = d.getProvinceName()+d.getCityName(); values[i][4] = StringUtils.hasLength(d.getServiceCalls())?d.getServiceCalls():""; values[i][5] = String.valueOf(d.getOrderSum()); values[i][6] = String.valueOf(d.getValidOrder()); values[i][7] = String.valueOf(d.getIssuedCoupon()); values[i][8] = String.valueOf(d.getUsedCoupon()); values[i][9] = String.valueOf(d.getCouponPriceSum()); values[i][10] = String.valueOf(d.getDriverRecharge() == null ? "0":d.getDriverRecharge()); values[i][11] = String.valueOf(d.getDriverCount()); Integer status1 = d.getStatus(); if(1 == status1){ values[i][12] = "正常"; }else if(2 == status1){ values[i][12] = "冻结"; }else { values[i][12] = "删除"; } } HSSFWorkbook wb = ExcelUtil.getHSSFWorkbook("Variance"+time1, title, values, null); ExcelUtil.setResponseHeader(response, fileName); OutputStream os = response.getOutputStream(); wb.write(os); os.flush(); os.close(); } catch (Exception e) { e.printStackTrace(); } } @ResponseBody @RequestMapping(value = "/uploadFile") public String uploadFile(MultipartFile file){ File srcFile = null; String originalFilename = file.getOriginalFilename(); String substring = originalFilename.substring(originalFilename.lastIndexOf(".")); String fileName = ""; try { fileName = UUIDUtil.getRandomCode(28) + ".png"; srcFile = multipartFileToFile(file, fileName); } catch (Exception e) { e.printStackTrace(); } ImageUpload imageUpload = new ImageUpload(); imageUpload.setMerUserId("33567678901213221"); File zip = ZipUtil.zip(srcFile); imageUpload.setName(zip.getName()); imageUpload.setFile(Base64.encode(zip)); TrhRequest request = new TrhRequest(); InterfaceResponse execute = request.execute(imageUpload, ImageUpload.SERVICE_CODE); if(execute.getCode().equals("0000")){ JSONObject jsonObject = JSON.parseObject(execute.getResult()); return jsonObject.getString("fileNo"); } return ""; } public File multipartFileToFile(MultipartFile file, String fileName) throws Exception { File toFile = null; if (file.equals("") || file.getSize() <= 0) { file = null; } else { InputStream ins = null; ins = file.getInputStream(); toFile = new File("D:\\logs\\" + fileName); inputStreamToFile(ins, toFile); ins.close(); } return toFile; } private static void inputStreamToFile(InputStream ins, File file) { try { OutputStream os = new FileOutputStream(file); int bytesRead = 0; byte[] buffer = new byte[8192]; while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) { os.write(buffer, 0, bytesRead); } os.close(); ins.close(); } catch (Exception e) { e.printStackTrace(); } } /** * 跳转到企业信息页 * @return */ @GetMapping("/showEnterprisePage") public String showEnterprisePage(Model model){ ShiroUser user = ShiroKit.getUser(); Integer objectId = user.getObjectId(); Integer roleType = user.getRoleType(); User user1 = userService.selectById(user.getId()); TAgent tAgent = new TAgent(); if(roleType == 1){//平台 tAgent.setPrincipal(user1.getName()); tAgent.setPrincipalPhone(user1.getPhone()); tAgent.setEmail(user1.getEmail()); tAgent.setMerchantNumber("553021440975"); } if(roleType == 3){//代理商 tAgent = tAgentService.selectById(objectId); } model.addAttribute("roleType", roleType); model.addAttribute("item", tAgent); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); model.addAttribute("socialCreditCodeExpires", roleType == 1 ? "" : sdf.format(tAgent.getSocialCreditCodeExpires())); model.addAttribute("certIdExpires", roleType == 1 ? "" : sdf.format(tAgent.getCertIdExpires())); Wrapper settlementRecordWrapper = new EntityWrapper().eq("type", roleType == 1 ? 1 : 2); if(roleType == 2){ settlementRecordWrapper.eq("objectId", objectId); } List settlementRecords = settlementRecordService.selectList(settlementRecordWrapper.isNotNull("arrivalTime").orderBy("insertTime desc")); model.addAttribute("settlementRecords", settlementRecords); QueryBalance queryBalance = new QueryBalance(); queryBalance.setUserId(tAgent.getMerchantNumber()); TrhRequest request = new TrhRequest(); InterfaceResponse execute = request.execute(queryBalance, QueryBalance.SERVICE_CODE); model.addAttribute("balance", 0); model.addAttribute("marketingAmount", 0); if("0000".equals(execute.getCode())){ JSONObject jsonObject = JSON.parseObject(execute.getResult()); model.addAttribute("balance", jsonObject.getDoubleValue("settledAmount") / 100); if(roleType == 1){ model.addAttribute("marketingAmount", jsonObject.getDoubleValue("marketingAmount") / 100); } } return PREFIX + "enterprisePage.html"; } /** * 提现申请 * @return */ @ResponseBody @PostMapping("/withdrawCash") public ResultUtil withdrawCash(){ ShiroUser user = ShiroKit.getUser(); Integer objectId = user.getObjectId(); Integer roleType = user.getRoleType(); User user1 = userService.selectById(user.getId()); TAgent tAgent = new TAgent(); if(roleType == 1){//平台 tAgent.setLegalPerson(user1.getName()); tAgent.setLegalPhone(user1.getPhone()); tAgent.setEmail(user1.getEmail()); tAgent.setMerchantNumber("553021440975"); } if(roleType == 3){//代理商 tAgent = tAgentService.selectById(objectId); } QueryBalance queryBalance = new QueryBalance(); queryBalance.setUserId(tAgent.getMerchantNumber()); TrhRequest request = new TrhRequest(); InterfaceResponse execute = request.execute(queryBalance, QueryBalance.SERVICE_CODE); if("0000".equals(execute.getCode())){ JSONObject jsonObject = JSON.parseObject(execute.getResult()); double settledAmount = jsonObject.getDoubleValue("settledAmount"); if(0 == settledAmount){ return ResultUtil.error("余额不足"); } SettlementRecord settlementRecord = new SettlementRecord(); settlementRecord.setType(roleType == 1 ? 1 : 2); if(roleType == 3){ settlementRecord.setObjectId(tAgent.getId()); } settlementRecord.setAmount(settledAmount); settlementRecord.setInsertTime(new Date()); settlementRecordService.insert(settlementRecord); Withdraw withdraw = new Withdraw(); withdraw.setUserId(tAgent.getMerchantNumber()); withdraw.setAmount(settledAmount + ""); withdraw.setOrderName("账户余额提现"); withdraw.setRemark("账户余额提现"); withdraw.setNotifyUrl(callbackPath + "/tAgent/withdrawCashCallback"); withdraw.setParameter1(settlementRecord.getId().toString()); TrhRequest request1 = new TrhRequest(); InterfaceResponse execute1 = request1.execute(withdraw, Withdraw.SERVICE_CODE);//结算(提现) if("0000".equals(execute1.getCode())){ JSONObject jsonObject1 = JSON.parseObject(execute1.getResult()); String merOrderId1 = jsonObject1.getString("merOrderId"); Integer status = jsonObject1.getInteger("status");//0:待处理;1:成功;2:失败 if(0 == status){ return ResultUtil.error("申请处理中"); } if(1 == status){ settlementRecord.setOrderNumber(merOrderId1); settlementRecord.setArrivalTime(new Date()); settlementRecordService.updateById(settlementRecord); return ResultUtil.success(); } if(2 == status){ return ResultUtil.error("结算接口异常【提现】:" + jsonObject1.getString("statusMsg")); } }else{ return ResultUtil.error("结算接口异常【提现】:" + execute.getMsg()); } }else{ return ResultUtil.error(execute.getMsg()); } return ResultUtil.error("未知异常"); } /** * 提现回调 * @param interfaceResponse */ @ResponseBody @PostMapping("/withdrawCashCallback") public void withdrawCashCallback(@RequestBody InterfaceResponse interfaceResponse) { if("0000".equals(interfaceResponse.getCode())){ JSONObject jsonObject1 = JSON.parseObject(interfaceResponse.getResult()); String merOrderId1 = jsonObject1.getString("merOrderId"); Integer status = jsonObject1.getInteger("status");//0:待处理;1:成功;2:失败 if(1 == status){ String parameter1 = jsonObject1.getString("parameter1"); SettlementRecord settlementRecord = settlementRecordService.selectById(parameter1); settlementRecord.setOrderNumber(merOrderId1); settlementRecord.setArrivalTime(new Date()); settlementRecordService.updateById(settlementRecord); } if(2 == status){ System.err.println("结算接口异常【提现】:" + jsonObject1.getString("statusMsg")); } }else{ System.err.println("结算接口异常【提现】:" + interfaceResponse.getMsg()); } } /** * 充值补贴金额 * @param amount * @return */ @ResponseBody @PostMapping("/accountRecharge") public ResultUtil accountRecharge(Double amount){ try { SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); String out_trade_no = sdf.format(new Date()) + UUIDUtil.getNumberRandom(3); RechargeRecord rechargeRecord = new RechargeRecord(); rechargeRecord.setCode(out_trade_no); rechargeRecord.setType(4); rechargeRecord.setAmount(amount); rechargeRecord.setPayType(2); rechargeRecord.setPayStatus(1); rechargeRecord.setCreateTime(new Date()); rechargeRecordService.insert(rechargeRecord); Deposit deposit = new Deposit(); deposit.setAmount(String.valueOf(Double.valueOf(amount * 100).intValue())); deposit.setOrderName("补贴充值"); deposit.setPayType("ALI_CB"); deposit.setTerminalIp(InetAddress.getLocalHost().getHostAddress()); deposit.setFrontUrl(callbackPath + "/tAgent/accountRechargeCallback"); deposit.setNotifyUrl(callbackPath + "/tAgent/accountRechargeCallback"); deposit.setParameter1(rechargeRecord.getId().toString()); TrhRequest request = new TrhRequest(); InterfaceResponse execute = request.execute(deposit, Deposit.SERVICE_CODE); if("0000".equals(execute.getCode())){ JSONObject jsonObject = JSON.parseObject(execute.getResult()); Integer status = jsonObject.getInteger("status"); if(2 == status){ return ResultUtil.error("支付异常"); } String merOrderId = jsonObject.getString("merOrderId"); String payCode = jsonObject.getString("payCode"); if(ToolUtil.isNotEmpty(payCode)){ new Thread(new Runnable() { @Override public void run() { try { int num = 1; int wait = 0; while (num <= 10){ int min = 5000; wait += (min * num); RechargeRecord rechargeRecord1 = rechargeRecordService.selectById(rechargeRecord.getId()); if(rechargeRecord1.getPayStatus() != 1){ return; } QueryOrder queryOrder = new QueryOrder(); queryOrder.setOriginalMerOrderId(merOrderId); /** * 1:支付查询 2:退款查询 3:确认收货查询 4:结算查询 5:充值查询 6:转账查询 7:异步分账查询(必填) 字段长度最长:1位 */ queryOrder.setQueryType("5"); TrhRequest request = new TrhRequest(); InterfaceResponse execute1 = request.execute(queryOrder, QueryOrder.SERVICE_CODE); if("0000".equals(execute1.getCode())){ JSONObject jsonObject1 = JSON.parseObject(execute1.getResult()); String status1 = jsonObject1.getString("status"); if("0".equals(status1)){//待处理 Thread.sleep(wait); num++; } if("1".equals(status1)){//成功 String merOrderId = jsonObject1.getString("merOrderId"); rechargeRecord1.setPayTime(new Date()); rechargeRecord1.setPayStatus(2); rechargeRecord1.setOrderNumber(merOrderId); rechargeRecord1.setSurplusDividedAmount(rechargeRecord1.getAmount()); rechargeRecordService.updateById(rechargeRecord1); break; } if("2".equals(status1) || 10 == num){//失败 rechargeRecordService.deleteById(rechargeRecord1.getId()); break; } }else{ Thread.sleep(wait); num++; } } }catch (Exception e){ e.printStackTrace(); } } }).start(); } return ResultUtil.success(payCode); }else{ return ResultUtil.error(execute.getMsg()); } }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } /** * 补贴金额充值回调 * @param interfaceResponse */ @ResponseBody @PostMapping("/accountRechargeCallback") public void accountRechargeCallback(@RequestBody InterfaceResponse interfaceResponse){ if("0000".equals(interfaceResponse.getCode())){ JSONObject jsonObject = JSON.parseObject(interfaceResponse.getResult()); Integer status = jsonObject.getInteger("status"); if(2 == status){ System.err.println("支付异常"); return; } if(1 == status){ String parameter1 = jsonObject.getString("parameter1"); RechargeRecord rechargeRecord = rechargeRecordService.selectById(parameter1); rechargeRecord.setPayStatus(2); rechargeRecord.setPayTime(new Date()); rechargeRecord.setOrderNumber(jsonObject.getString("merOrderId")); rechargeRecord.setSurplusDividedAmount(rechargeRecord.getAmount()); rechargeRecordService.updateById(rechargeRecord); } }else{ System.err.println(interfaceResponse.getMsg()); } } }