ruoyi-api/ruoyi-api-order/src/main/java/com/ruoyi/order/api/request/ChangeDispatchRequest.java
@@ -13,6 +13,7 @@ public class ChangeDispatchRequest { private String workerName; private String reservationName; private String orderNumber; @@ -25,5 +26,6 @@ private List<String> cityList; private String [] siteIds; private String reservationAddress; private String reservationPhone; } ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/GaoDeMapUtil.java
@@ -193,6 +193,8 @@ String queryResult = getResponse(queryUrl); GaoDeAddressInfoVO data = JSONObject.parseObject(queryResult, GaoDeAddressInfoVO.class); List<Geocodes> geocodes = data.getGeocodes(); if (geocodes==null||geocodes.isEmpty()) return Result.failed(null, "计算失败"); Geocodes info = geocodes.get(0); String adcode = info.getAdcode(); String city = info.getCity(); ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/ChangeDispatchController.java
@@ -61,13 +61,16 @@ @GetMapping(value = "/page") @ApiImplicitParams({ @ApiImplicitParam(value = "师傅名称", name = "workerName", dataType = "String"), @ApiImplicitParam(value = "预约人名称", name = "reservationName", dataType = "String"), @ApiImplicitParam(value = "订单编号", name = "orderNumber", dataType = "String"), @ApiImplicitParam(value = "下单用户名称", name = "userName", dataType = "String"), @ApiImplicitParam(value = "下单用户手机号", name = "reservationPhone", dataType = "String"), @ApiImplicitParam(value = "地址", name = "reservationAddress", dataType = "String"), @ApiImplicitParam(value = "页码", name = "pageNum", dataType = "Integer", required = true), @ApiImplicitParam(value = "每页条数", name = "pageSize", dataType = "Integer", required = true) }) public R<Page<ChangeDispatch>> queryPageList(String workerName, String orderNumber, String userName,String reservationAddress, String reservationName,String reservationPhone, @RequestParam(name = "pageNum", defaultValue = "1") Integer pageNum, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) { LoginUser loginUser = tokenService.getLoginUser(); @@ -83,7 +86,8 @@ changeDispatchRequest.setPageNum(pageNum); changeDispatchRequest.setPageSize(pageSize); changeDispatchRequest.setCityList(cityList); changeDispatchRequest.setReservationName(reservationName); changeDispatchRequest.setReservationPhone(reservationPhone); Integer franchiseeId = loginUser.getSysUser().getFranchiseeId(); if (franchiseeId!=null) { Franchisee byId = franchiseeService.getById(franchiseeId); @@ -163,10 +167,14 @@ @ApiOperation(value = "订单改派师傅", tags = {"后台-系统设置-订单改派管理"}) @GetMapping(value = "/changeWorker") @ApiImplicitParams({ @ApiImplicitParam(value = "改派订单id", name = "changeId", dataType = "Integer", required = true), @ApiImplicitParam(value = "师傅id", name = "workerId", dataType = "Integer", required = true) @ApiImplicitParam(value = "改派订单id", name = "changeId", dataType = "String", required = true), @ApiImplicitParam(value = "订单id", name = "orderId", dataType = "String", required = true), @ApiImplicitParam(value = "师傅id", name = "workerId", dataType = "Integer", required = true), @ApiImplicitParam(value = "时间", name = "arriveTime", dataType = "String", required = true), }) public R<String> changeWorker(@RequestParam String changeId, @RequestParam Integer workerId,@RequestParam String orderId,@RequestParam String reason, public R<String> changeWorker(@RequestParam String changeId, @RequestParam String orderId, @RequestParam Integer workerId, @RequestParam String arriveTime) { MasterWorker masterWorker = masterWorkerService.lambdaQuery() .eq(MasterWorker::getId, workerId).eq(MasterWorker::getIsDelete, 0).one(); @@ -184,7 +192,7 @@ NettyWebSocketController.sendMsgToClient(context, "您有一条新的订单,请注意查收!"); } dispatchClient.changeReason(orderId, reason); // dispatchClient.changeReason(orderId, reason); orderClient.updateArrivalTime(orderId,arriveTime); return R.ok(); // try { ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/FranchiseeController.java
@@ -9,6 +9,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.alipay.api.AlipayApiException; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -115,24 +116,50 @@ @ApiOperation(value = "加盟商列表余额", tags = {"后台2.0-加盟商列表余额"}) @PostMapping(value = "/recent/money") public R<RencentBalance> recentmoney() { @GetMapping(value = "/recent/money") @ApiImplicitParams({ @ApiImplicitParam(value = "加盟商名称", name = "name", dataType = "String"), @ApiImplicitParam(value = "管理员", name = "head", dataType = "String"), @ApiImplicitParam(value = "手机号码", name = "phone", dataType = "String"), @ApiImplicitParam(value = "管辖城市", name = "city", dataType = "String"), @ApiImplicitParam(value = "充值/扣款起始时间", name = "date1", dataType = "String"), @ApiImplicitParam(value = "充值/扣款结束时间", name = "date2", dataType = "String"), @ApiImplicitParam(value = "页码", name = "pageNum", dataType = "Integer", required = true), @ApiImplicitParam(value = "每页条数", name = "pageSize", dataType = "Integer", required = true) }) public R<RencentBalance> recentmoney(String name, String head, String phone, String city, String date1,String date2, @RequestParam(name = "pageNum", defaultValue = "1") Integer pageNum, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) { BigDecimal balance = new BigDecimal(0); List<Franchisee> list = franchiseeService.lambdaQuery().list(); LambdaQueryWrapper<Franchisee> franchiseeLambdaQueryWrapper = new LambdaQueryWrapper<>(); franchiseeLambdaQueryWrapper = StringUtils.isNotBlank(name) ? franchiseeLambdaQueryWrapper.like(Franchisee::getName, name) : franchiseeLambdaQueryWrapper; franchiseeLambdaQueryWrapper = StringUtils.isNotBlank(head) ? franchiseeLambdaQueryWrapper.like(Franchisee::getHead, head) : franchiseeLambdaQueryWrapper; franchiseeLambdaQueryWrapper = StringUtils.isNotBlank(phone) ? franchiseeLambdaQueryWrapper.like(Franchisee::getHeadPhone, phone) : franchiseeLambdaQueryWrapper; franchiseeLambdaQueryWrapper = StringUtils.isNotBlank(city) ? franchiseeLambdaQueryWrapper.like(Franchisee::getCity, city) : franchiseeLambdaQueryWrapper; List<Franchisee> list = franchiseeService.list(franchiseeLambdaQueryWrapper); List<Integer> collect = list.stream().map(Franchisee::getId).collect(Collectors.toList()); if (collect.isEmpty())collect.add(-1); for (Franchisee franchisee : list) { balance = balance.add(franchisee.getBalance()); } //充值的金额 BigDecimal balance1 = new BigDecimal(0); List<TFranchiseeBalanceChange> list1 = balanceChangeService.lambdaQuery().eq(TFranchiseeBalanceChange::getType, 1).list(); List<TFranchiseeBalanceChange> list1 = balanceChangeService.lambdaQuery() .in(TFranchiseeBalanceChange::getFranchiseeId,collect) .between(date1!=null,TFranchiseeBalanceChange::getCreateTime, date1, date2) .eq(TFranchiseeBalanceChange::getType, 1).list(); for (TFranchiseeBalanceChange franchiseeBalanceChange : list1) { balance1 = balance1.add(franchiseeBalanceChange.getAmount()); } //扣除的金额 BigDecimal balance2 = new BigDecimal(0); List<TFranchiseeBalanceChange> list2 = balanceChangeService.lambdaQuery().eq(TFranchiseeBalanceChange::getType, 2).list(); for (TFranchiseeBalanceChange franchiseeBalanceChange : list1) { List<TFranchiseeBalanceChange> list2 = balanceChangeService.lambdaQuery() .in(TFranchiseeBalanceChange::getFranchiseeId,collect) .eq(TFranchiseeBalanceChange::getType, 2) .between(date1!=null,TFranchiseeBalanceChange::getCreateTime, date1, date2) .eq(TFranchiseeBalanceChange::getIs_pay,1).list(); for (TFranchiseeBalanceChange franchiseeBalanceChange : list2) { balance2 = balance2.add(franchiseeBalanceChange.getAmount()); } @@ -144,24 +171,28 @@ return R.ok(balance3); } @ApiOperation(value = "详情",tags = {"师傅段2.0-统一充值扣款列表"}) @PostMapping(value = "/change/detail") public R<TFranchiseeBalanceChange> detail1(@RequestParam Integer id) throws AlipayApiException { TFranchiseeBalanceChange byId = balanceChangeService.getById(id); return R.ok(byId); TFranchiseeBalanceChange balanceChange = balanceChangeService.getById(id); if (balanceChange.getType()==2){ balanceChange.setPayStr("微信支付"); } return R.ok(balanceChange); } @ApiOperation(value = "扣款记录及充值记录", tags = {"后台2.0-统一充值扣款列表","师傅段2.0-统一充值扣款列表"}) @PostMapping(value = "/recent/money/list") public R<Page<TFranchiseeBalanceChange>> recentmoneylist(@RequestBody MoneyRecentQuery moneyRecentQuery) { Long userid = tokenService.getLoginUser().getUserid(); SysUser sysUser = sysUserService.getById(userid); Page<TFranchiseeBalanceChange> page = balanceChangeService.lambdaQuery().eq(moneyRecentQuery.getType() != null, TFranchiseeBalanceChange::getType, moneyRecentQuery.getType()) .eq(moneyRecentQuery.getFranchId() != null, TFranchiseeBalanceChange::getFranchiseeId, moneyRecentQuery.getFranchId()) .eq(moneyRecentQuery.getFranchName() != null && !"".equals(moneyRecentQuery.getFranchName()), TFranchiseeBalanceChange::getFranchiseeName, moneyRecentQuery.getFranchName()) .eq(sysUser.getFranchiseeId() != null, TFranchiseeBalanceChange::getFranchiseeId, sysUser.getFranchiseeId()) .like(moneyRecentQuery.getName() != null && !"".equals(moneyRecentQuery.getName()), TFranchiseeBalanceChange::getFranchiseeName, moneyRecentQuery.getName()) .ge(moneyRecentQuery.getDate1() != null, TFranchiseeBalanceChange::getCreateTime, moneyRecentQuery.getDate1()) .le(moneyRecentQuery.getDate2() != null, TFranchiseeBalanceChange::getCreateTime, moneyRecentQuery.getDate2()) .eq(moneyRecentQuery.getFranchId()!=null, TFranchiseeBalanceChange::getFranchiseeId, moneyRecentQuery.getFranchId()) .eq(TFranchiseeBalanceChange::getIs_pay,1) .orderByDesc(TFranchiseeBalanceChange::getCreateTime) .page(Page.of(moneyRecentQuery.getPageNum(), moneyRecentQuery.getPageSize())); @@ -173,12 +204,17 @@ String siteIds = franchisee.getSiteIds(); List<Site> list1 = siteService.lambdaQuery().in(Site::getId, siteIds.split(",")).list(); record.setList1(list1); } String cityCode = franchisee.getCityCode(); List<Region> list = regionService.lambdaQuery().in(Region::getCode, cityCode.split(",")).list(); record.setList(list); record.setFranchiseeName(franchisee.getName()); if (record.getType()==1){ record.setPayStr("扣除旧机款"); } if (record.getType()==2){ record.setPayStr("充值"); } } return R.ok(page); } @@ -186,14 +222,24 @@ @ApiOperation(value = "导出", tags = {"后台2.0-统一充值扣款列表"}) @PostMapping(value = "/recent/money/list/export") public R<Page<TFranchiseeBalanceChange>> export(@RequestBody MoneyRecentQuery moneyRecentQuery, HttpServletResponse response) { Long userid = tokenService.getLoginUser().getUserid(); SysUser sysUser = sysUserService.getById(userid); if (moneyRecentQuery.getType()==2) { List<TFranchiseeBalanceChange> page = balanceChangeService.lambdaQuery().eq(moneyRecentQuery.getType() != null, TFranchiseeBalanceChange::getType, moneyRecentQuery.getType()) .eq(moneyRecentQuery.getFranchId() != null, TFranchiseeBalanceChange::getFranchiseeId, moneyRecentQuery.getFranchId()) .eq(moneyRecentQuery.getFranchName() != null && !"".equals(moneyRecentQuery.getFranchName()), TFranchiseeBalanceChange::getFranchiseeName, moneyRecentQuery.getFranchName()) .eq(sysUser.getFranchiseeId() != null, TFranchiseeBalanceChange::getFranchiseeId, sysUser.getFranchiseeId()) .eq(moneyRecentQuery.getName() != null && !"".equals(moneyRecentQuery.getName()), TFranchiseeBalanceChange::getFranchiseeName, moneyRecentQuery.getName()) .ge(moneyRecentQuery.getDate1() != null, TFranchiseeBalanceChange::getCreateTime, moneyRecentQuery.getDate1()) .le(moneyRecentQuery.getDate2() != null, TFranchiseeBalanceChange::getCreateTime, moneyRecentQuery.getDate2()) .eq(moneyRecentQuery.getFranchId()!=null, TFranchiseeBalanceChange::getFranchiseeId, moneyRecentQuery.getFranchId()) .eq(TFranchiseeBalanceChange::getIs_pay,1) .orderByDesc(TFranchiseeBalanceChange::getCreateTime) .list(); for (TFranchiseeBalanceChange tFranchiseeBalanceChange : page) { tFranchiseeBalanceChange.setPayStr("微信支付"); LocalDateTime createTime = tFranchiseeBalanceChange.getCreateTime(); // 转化为String类型的格式字符串yyyy-MM-dd HH:mm:ss tFranchiseeBalanceChange.setCreateTimeStr(createTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); } try { response.setCharacterEncoding(Constants.UTF8); response.setContentType("application/vnd.ms-excel"); @@ -221,13 +267,17 @@ return R.ok(); }else { List<TFranchiseeBalanceChange> page = balanceChangeService.lambdaQuery().eq(moneyRecentQuery.getType() != null, TFranchiseeBalanceChange::getType, moneyRecentQuery.getType()) .eq(moneyRecentQuery.getFranchId() != null, TFranchiseeBalanceChange::getFranchiseeId, moneyRecentQuery.getFranchId()) .eq(moneyRecentQuery.getFranchName() != null && !"".equals(moneyRecentQuery.getFranchName()), TFranchiseeBalanceChange::getFranchiseeName, moneyRecentQuery.getFranchName()) .eq(sysUser.getFranchiseeId() != null, TFranchiseeBalanceChange::getFranchiseeId, sysUser.getFranchiseeId()) .eq(moneyRecentQuery.getName() != null && !"".equals(moneyRecentQuery.getName()), TFranchiseeBalanceChange::getFranchiseeName, moneyRecentQuery.getName()) .ge(moneyRecentQuery.getDate1() != null, TFranchiseeBalanceChange::getCreateTime, moneyRecentQuery.getDate1()) .le(moneyRecentQuery.getDate2() != null, TFranchiseeBalanceChange::getCreateTime, moneyRecentQuery.getDate2()) .orderByDesc(TFranchiseeBalanceChange::getCreateTime) .list(); for (TFranchiseeBalanceChange tFranchiseeBalanceChange : page) { LocalDateTime createTime = tFranchiseeBalanceChange.getCreateTime(); // 转化为String类型的格式字符串yyyy-MM-dd HH:mm:ss tFranchiseeBalanceChange.setCreateTimeStr(createTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); } try { response.setCharacterEncoding(Constants.UTF8); response.setContentType("application/vnd.ms-excel"); @@ -299,7 +349,7 @@ map.put("p4_Cur", "1"); /**交易币种 */ map.put("q5_OpenId", openId); map.put("p5_ProductName", "加盟商充值"); /** 商品名称 */ map.put("p9_NotifyUrl", "http://www.zhipingwang.com.cn:9100/admin/franchisee/callBack"); /** 服务器异步通知地址 */ map.put("p9_NotifyUrl", "https://v7ro848ar5jx.ngrok.xiaomiqiu123.top/admin/franchisee/callBack"); /** 服务器异步通知地址 */ map.put("q1_FrpCode", "WEIXIN_APP3"); /** 交易类型*/ map.put("q7_AppId", "wx1a4a7760be53a835"); /** 交易类型*/ map.put("qa_TradeMerchantNo", "777165000859101"); /** 777开头的报备商户号 必填!*/ @@ -357,6 +407,7 @@ tFranchiseeBalanceChange.setFranchiseeName(byId.getName()); tFranchiseeBalanceChange.setFranchiseeId(String.valueOf(byId.getId())); tFranchiseeBalanceChange.setType(2); tFranchiseeBalanceChange.setRemark("微信支付"); tFranchiseeBalanceChange.setCode(code); balanceChangeService.save(tFranchiseeBalanceChange); @@ -392,52 +443,86 @@ @ApiOperation(value = "扫码支付",tags = {"后台2.0-加盟商列表余额"}) @PostMapping(value = "/code/buy") public R buy(@RequestParam BigDecimal money) throws AlipayApiException { public R buy(@RequestParam BigDecimal money) throws AlipayApiException, IOException { Long userid = tokenService.getLoginUser().getUserid(); SysUser byId1 = sysUserService.getById(userid); Franchisee byId = franchiseeService.getById(byId1.getFranchiseeId()); String code = generateTradeNumber(); int i = money.multiply(BigDecimal.valueOf(100)).intValue(); com.wechat.pay.java.service.payments.nativepay.model.PrepayRequest prepayRequest = new com.wechat.pay.java.service.payments.nativepay.model.PrepayRequest(); prepayRequest.setAppid(weChatConfig.appId); prepayRequest.setMchid(weChatConfig.merchantId); prepayRequest.setOutTradeNo(code); prepayRequest.setDescription("购买资料"); prepayRequest.setNotifyUrl("http://www.zhipingwang.com.cn:9090/admin/franchisee/callBack"); com.wechat.pay.java.service.payments.nativepay.model.Amount amount = new com.wechat.pay.java.service.payments.nativepay.model.Amount(); amount.setTotal(i); prepayRequest.setAmount(amount); // 调用下单方法,得到应答 com.wechat.pay.java.service.partnerpayments.app.model.PrepayResponse response; try { com.wechat.pay.java.service.payments.nativepay.model.PrepayResponse prepay = nativePayService.prepay(prepayRequest); //预支付成功,创建预支付订单 TFranchiseeBalanceChange tFranchiseeBalanceChange = new TFranchiseeBalanceChange(); tFranchiseeBalanceChange.setAmount(money); tFranchiseeBalanceChange.setIs_pay(0); tFranchiseeBalanceChange.setFranchiseeName(byId.getName()); tFranchiseeBalanceChange.setFranchiseeId(String.valueOf(byId.getId())); tFranchiseeBalanceChange.setType(2); tFranchiseeBalanceChange.setCode(code); balanceChangeService.save(tFranchiseeBalanceChange); String key = "ad273ceb5e1b49e68d5c565d28d1d305";/** md5密钥商户后台-商户中心-商户设置-密钥管理获取 必填!*/ Map<String, String> map = new HashMap<String, String>(); map.put("p0_Version", "2.5");/** 版本号 */ map.put("p1_MerchantNo", "888122400007793");/** 商户编号 */ map.put("p2_OrderNo", code); /**商户订单号*/ map.put("p3_Amount", String.valueOf(money));/**订单金额*/ map.put("p4_Cur", "1"); /**交易币种 */ map.put("p5_ProductName", "充值"); /** 商品名称 */ map.put("p6_ProductDesc", "加盟商充值"); /** 商品名称 */ // map.put("p7_Mp", ""); /** 如果商户请求时传递了该参数,则返回给商户时会原值传 回。 */ map.put("p9_NotifyUrl", "https://v7ro848ar5jx.ngrok.xiaomiqiu123.top/admin/franchisee/callBack"); /** 服务器异步通知地址 */ map.put("q1_FrpCode", "WEIXIN_NATIVE"); /** 微信扫码(主扫)【注:此为用户主扫,商户被扫】*/ map.put("q4_IsShowPic", "1"); /** 是否展示二 维码图片 1表示输出*/ map.put("q7_AppId", "wx1a4a7760be53a835"); /** 交易类型*/ map.put("qa_TradeMerchantNo", "777165000859101"); /** 777开头的报备商户号 必填!*/ map.put("qi_FqSellerPercen", "0"); /** 卖家承担收 费比例 目前仅支持传入 0 ,即用户承 担手续费!*/ String Strmap = CreateLinkStringByGet1.createLinkStringByGet(map); // 签名 String sign = ""; sign = Md5_Sign.SignByMD5(Strmap, key); map.put("hmac", sign);/** 签名数据 */ System.out.println("发送:" + JSON.toJSONString(map).toString()); // post请求参数内容 HttpRequester hr = new HttpRequester(); HttpRespons HP = hr.sendPost("https://trade.joinpay.com/tradeRt/uniPay", map); System.out.println("接收返回参数:" + HP.getContent()); JSONObject jsonObject = JSONObject.parseObject(HP.getContent()); String rcResult = jsonObject.getString("rd_Pic"); Map<String, Object> map2 = new HashMap<>(); map2.put("rcResult", rcResult); // com.wechat.pay.java.service.payments.nativepay.model.PrepayRequest prepayRequest = new com.wechat.pay.java.service.payments.nativepay.model.PrepayRequest(); // prepayRequest.setAppid(weChatConfig.appId); // prepayRequest.setMchid(weChatConfig.merchantId); // prepayRequest.setOutTradeNo(code); // prepayRequest.setDescription("购买资料"); // prepayRequest.setNotifyUrl("http://www.zhipingwang.com.cn:9090/admin/franchisee/callBack"); // com.wechat.pay.java.service.payments.nativepay.model.Amount amount = new com.wechat.pay.java.service.payments.nativepay.model.Amount(); // amount.setTotal(i); // prepayRequest.setAmount(amount); // // 调用下单方法,得到应答 // com.wechat.pay.java.service.partnerpayments.app.model.PrepayResponse response; try { // com.wechat.pay.java.service.payments.nativepay.model.PrepayResponse prepay = nativePayService.prepay(prepayRequest); //预支付成功,创建预支付订单 TFranchiseeBalanceChange tFranchiseeBalanceChange = new TFranchiseeBalanceChange(); tFranchiseeBalanceChange.setAmount(money); tFranchiseeBalanceChange.setIs_pay(0); tFranchiseeBalanceChange.setFranchiseeName(byId.getName()); tFranchiseeBalanceChange.setFranchiseeId(String.valueOf(byId.getId())); tFranchiseeBalanceChange.setType(2); tFranchiseeBalanceChange.setCode(code); tFranchiseeBalanceChange.setRemark("加盟商扫码充值"); balanceChangeService.save(tFranchiseeBalanceChange); PayDto payDto = new PayDto(); payDto.setOrderId(tFranchiseeBalanceChange.getId()); payDto.setQrCode(prepay.getCodeUrl()); PayDto payDto = new PayDto(); payDto.setOrderId(tFranchiseeBalanceChange.getId()); payDto.setQrCode(rcResult); return R.ok(payDto); } catch (HttpException e) { // 发送HTTP请求失败 return R.ok(payDto); } catch (HttpException e) { // 发送HTTP请求失败 // log.error("发送HTTP请求失败: {}", e.getHttpRequest()); } catch (ServiceException e) { // 服务返回状态小于200或大于等于300,例如500 } catch (ServiceException e) { // 服务返回状态小于200或大于等于300,例如500 // log.error("服务返回状态异常: {}", e.getResponseBody()); } catch (MalformedMessageException e) { // 服务返回成功,返回体类型不合法,或者解析返回体失败 } catch (MalformedMessageException e) { // 服务返回成功,返回体类型不合法,或者解析返回体失败 // log.error("返回体类型不合法: {}", e.getMessage()); } catch (Exception e) { } catch (Exception e) { // log.error("预下单异常: {}", e.getMessage()); } return null; } return null; } @@ -461,6 +546,22 @@ public R payNotify(HttpServletRequest request,String r2_OrderNo) throws Exception{ System.err.println("======回调开始"); System.err.println("======回调开始"+r2_OrderNo); System.err.println("请求"+request.getParameterMap()); Map<String, String[]> parameterMap = request.getParameterMap(); String r6Status = request.getParameter("r6_Status"); if (org.springframework.util.StringUtils.hasLength(r6Status)){ if (r6Status.equals("101")){ return R.errorCode("支付失败"); } } // 循环打印 for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) { String key = entry.getKey(); String[] values = entry.getValue(); for (String value : values) { System.err.println("======回调开始"+key + ":" + value); } } // Transaction transaction; // transaction = notificationParser.parse(WeChatUtil.handleNodifyRequestParam(request), Transaction.class); // if (transaction.getTradeState() == Transaction.TradeStateEnum.SUCCESS) { @@ -473,11 +574,11 @@ franchiseeService.updateById(byId); one.setIs_pay(1); balanceChangeService.updateById(one); return R.ok(null,"success"); // } } return R.ok(null,"SUCCESS"); return R.ok(null,"error"); } public static String generateTradeNumber() { ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/OrderController.java
@@ -21,6 +21,7 @@ import com.ruoyi.common.core.constant.Constants; import com.ruoyi.common.core.domain.BaseEntity; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.DateUtils; import com.ruoyi.common.core.utils.GaoDeMapUtil; import com.ruoyi.common.core.utils.SnowflakeIdWorker; @@ -52,6 +53,7 @@ import java.net.URLEncoder; import java.nio.file.Files; import java.nio.file.Paths; import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; @@ -187,13 +189,13 @@ Page<Order> data = orderClient.queryPage(orderQueryRequest).getData(); List<MasterWorker> list = masterWorkerService.lambdaQuery() .eq(MasterWorker::getIsDelete, 0).list(); if (null != data) { for (Order record : data.getRecords()) { // 回收服务信息 Integer serverId = record.getServerId(); MasterWorker masterWorker = masterWorkerService.lambdaQuery() .eq(MasterWorker::getId, serverId) .eq(MasterWorker::getIsDelete, 0).one(); MasterWorker masterWorker = list.stream().filter(e -> e.getId().equals(serverId)).findFirst().orElse(null); if (null != masterWorker) { record.setServerName(masterWorker.getRealName()); record.setServerPhone(masterWorker.getPhone()); @@ -769,9 +771,7 @@ public R<String> importTemplate(HttpServletResponse response) throws Exception { List<FrozenBuckleImportDTO> list = new ArrayList<>(); FrozenBuckleImportDTO bean = new FrozenBuckleImportDTO(); list.add(bean); // 这里URLEncoder.encode可以防止中文乱码 String fileName = URLEncoder.encode("订单导入模板", "UTF-8"); response.setContentType("application/vnd.ms-excel"); @@ -841,8 +841,25 @@ String area = frozenBuckleImportDTO.getArea(); String address = frozenBuckleImportDTO.getReservationAddress(); String time = frozenBuckleImportDTO.getTime(); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); try{ format.parse(time); }catch (Exception e){ throw new ServiceException("上门时间格式错误"); } if(!StringUtils.hasLength(address)){ return R.fail("详细地址不能为空"); } // 解析地址经纬度 CityInfoVO cityInfoVO = GaoDeMapUtil.getAddressInfo(province + city + area + address).getDatas(); CityInfoVO cityInfoVO = GaoDeMapUtil.getAddressInfo((province==null?"":province) + (city==null?"":city) + (area==null?"":area) + address).getDatas(); if(cityInfoVO==null||Objects.isNull(cityInfoVO.getLongitude()) || Objects.isNull(cityInfoVO.getLatitude())){ return R.fail("地址输入不正确"); } String areaCode = cityInfoVO.getCode(); String provinceCode = areaCode.substring(0, 2) + "0000"; String cityCode = areaCode.substring(0, 4) + "00"; @@ -851,7 +868,9 @@ order.setAreaCode(areaCode); order.setLongitude(cityInfoVO.getLongitude()); order.setLatitude(cityInfoVO.getLatitude()); if (!StringUtils.hasLength(city)){ order.setCity(cityInfoVO.getCity()); } // 站点信息 Site site = sites.stream().filter(e -> e.getSiteName().equals(frozenBuckleImportDTO.getSiteName())).findFirst().orElse(null); if(Objects.nonNull(site)){ @@ -885,7 +904,7 @@ order.setServeId(recoveryServe.getId()); order.setServePrice(recoveryServe.getDefaultPrice()); }else { return R.fail("回收服务不存在"); return R.fail("服务信息不存在"); } RecoveryServePrice one = recoveryServePriceService.lambdaQuery().eq(RecoveryServePrice::getCity, order.getCityCode()).eq(RecoveryServePrice::getRecoveryServeId, order.getServeId()).eq(BaseEntity::getIsDelete, 0).one(); if (one==null) { ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/RoleController.java
@@ -65,6 +65,7 @@ public R<IPage<Role>> queryPageList(@RequestParam(name = "pageNum", defaultValue = "1") Integer pageNum, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) { return R.ok(roleService.lambdaQuery().eq(Role::getDelFlag, 0) .ne(Role::getRoleName,"加盟商") .orderByDesc(Role::getCreateTime).page(Page.of(pageNum, pageSize))); } ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/entity/TFranchiseeBalanceChange.java
@@ -71,7 +71,8 @@ @TableField("createTime") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createTime; @TableField(exist = false) private String createTimeStr; @TableField("updateTime") private LocalDateTime updateTime; @@ -85,7 +86,7 @@ @TableLogic private Integer isDelete; @TableField(exist = false) private String payStr = "微信支付"; private String payStr; @TableField(exist = false) private List<Region> list; @TableField(exist = false) ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/importExcel/FrozenBuckleImportDTO.java
@@ -1,7 +1,9 @@ package com.ruoyi.admin.importExcel; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.HeadFontStyle; import lombok.Data; import org.apache.poi.ss.usermodel.IndexedColors; import java.io.Serializable; @@ -10,29 +12,40 @@ */ @Data public class FrozenBuckleImportDTO implements Serializable { @ExcelProperty(value = "站点名称") @ExcelProperty(value = "*站点名称") @HeadFontStyle(fontName = "黑体", fontHeightInPoints = 11,color = 10) private String siteName; @ExcelProperty(value = "服务信息") @ExcelProperty(value = "*服务信息") @HeadFontStyle(fontName = "黑体", fontHeightInPoints = 11,color = 10) private String serveName; @ExcelProperty(value = "预约姓名") @ExcelProperty(value = "*预约姓名") @HeadFontStyle(fontName = "黑体", fontHeightInPoints = 11,color = 10) private String reservationName; @ExcelProperty(value = "预约电话") @ExcelProperty(value = "*预约电话") @HeadFontStyle(fontName = "黑体", fontHeightInPoints = 11,color = 10) private String reservationPhone; @ExcelProperty(value = "省份") @ExcelProperty(value = "省份(四川省)") @HeadFontStyle(fontName = "黑体", fontHeightInPoints = 11) private String province; @ExcelProperty(value = "市") @ExcelProperty(value = "市(成都市)") @HeadFontStyle(fontName = "黑体", fontHeightInPoints = 11) private String city; @ExcelProperty(value = "区") @ExcelProperty(value = "区(武侯区)") @HeadFontStyle(fontName = "黑体", fontHeightInPoints = 11) private String area; @ExcelProperty(value = "详细地址") @ExcelProperty(value = "*详细地址") @HeadFontStyle(fontName = "黑体", fontHeightInPoints = 11,color = 10) private String reservationAddress; @ExcelProperty(value = "上门时间") @ExcelProperty(value = "*上门时间(2024-02-28)") @HeadFontStyle(fontName = "黑体", fontHeightInPoints = 11,color = 10) private String time; @ExcelProperty(value = "服务人员") @HeadFontStyle(fontName = "黑体", fontHeightInPoints = 11) private String serverName; @ExcelProperty(value = "备注") @HeadFontStyle(fontName = "黑体", fontHeightInPoints = 11) private String reservationRemark; private Integer siteId; ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/MenuServiceImpl.java
@@ -2,17 +2,17 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.admin.entity.Menu; import com.ruoyi.admin.entity.SysUser; import com.ruoyi.admin.mapper.MenuMapper; import com.ruoyi.admin.mapper.SysUserMapper; import com.ruoyi.admin.service.MenuService; import com.ruoyi.common.core.constant.RedisConstants; import com.ruoyi.common.security.service.TokenService; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Map; import java.util.*; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -29,17 +29,29 @@ @Resource private RedisTemplate<Object, Object> redisTemplate; @Resource private SysUserMapper sysUserMapper; @Resource private TokenService tokenService; @Override public List<Menu> menuTree() { // redis缓存 Map<Object, Object> regionList = redisTemplate.opsForHash().entries(RedisConstants.MENU_TREE); // 获取所有地区信息 省市区三级 List<Menu> regions = getReginList(regionList); // 所有地区 Map<String, Menu> courseTypeMap = regions.stream(). collect(Collectors.toMap(region -> region.getMenuId().toString() , region -> region)); Map<String, Menu> courseTypeMap = new HashMap<>(); Long userid = tokenService.getLoginUser().getUserid(); SysUser sysUser = sysUserMapper.selectById(userid); if (sysUser.getFranchiseeId()==null){ // 加盟商才有加盟商余额管理 courseTypeMap = regions.stream().filter(region -> region.getMenuId() != 88900&& region.getMenuId() != 88901&& region.getMenuId() != 88902&& region.getMenuId() != 88903). collect(Collectors.toMap(region -> region.getMenuId().toString() , region -> region)); } redisTemplate.opsForHash().putAll(RedisConstants.MENU_TREE, courseTypeMap); redisTemplate.expire(RedisConstants.MENU_TREE, 30, TimeUnit.MINUTES); // 生成map集合 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/utils/TencentCosUtil.java
@@ -94,7 +94,7 @@ //上传文件 PutObjectResult putResult = getCosClient().putObject(bucketName, key, inputStream, objectMetadata); // 创建文件的网络访问路径 String url = rootSrc + key; String url = "https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/" + key; //关闭 cosClient,并释放 HTTP 连接的后台管理线程 getCosClient().shutdown(); return url; ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/vo/MoneyRecentQuery.java
@@ -11,7 +11,7 @@ @ApiModelProperty("加盟商id") private Integer franchId; @ApiModelProperty("加盟商名字,查询用") private Integer franchName; private String name; @ApiModelProperty("1扣款2充值") private Integer type; @ApiModelProperty("扣款时间1") ruoyi-service/ruoyi-admin/src/main/resources/template/加盟商余额记录.xlsxBinary files differ
ruoyi-service/ruoyi-admin/src/main/resources/template/加盟商扣款记录.xlsxBinary files differ
ruoyi-service/ruoyi-admin/src/main/resources/template/导表录单导入模板 .xlsxBinary files differ
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/ChangeDispatchController.java
@@ -53,6 +53,7 @@ @PostMapping(value = "/page") @ApiImplicitParams({ @ApiImplicitParam(value = "师傅名称", name = "workerName", dataType = "String"), @ApiImplicitParam(value = "预约人姓名", name = "reservationName", dataType = "String"), @ApiImplicitParam(value = "订单编号", name = "orderNumber", dataType = "String"), @ApiImplicitParam(value = "下单用户名称", name = "userName", dataType = "String"), @ApiImplicitParam(value = "页码", name = "pageNum", dataType = "Integer", required = true), ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/OrderController.java
@@ -592,7 +592,8 @@ @RequestParam("siteIds") List<String> siteIds ) { Page<Order> page = orderService.lambdaQuery().eq(Order::getUserId, userId) .eq(Order::getIsDelete, 0).in(!siteIds.isEmpty(),Order::getSiteId, siteIds).in(!cityList.isEmpty(),Order::getCityCode, cityList).page(Page.of(pageNum, pageSize)); .eq(Order::getIsDelete, 0) .in(!cityList.isEmpty(),Order::getCityCode, cityList).page(Page.of(pageNum, pageSize)); return R.ok(page); } ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/entity/Order.java
@@ -177,6 +177,31 @@ @TableField(exist = false) private String applyReason; @ApiModelProperty("代派单") @TableField(exist = false) private Integer toBeDispatched=0; @ApiModelProperty("待上门") @TableField(exist = false) private Integer stayDoorstep=0; @ApiModelProperty("带完工") @TableField(exist = false) private Integer toBeCompleted=0; @ApiModelProperty("已完结") @TableField(exist = false) private Integer completed=0; @ApiModelProperty("已取消") @TableField(exist = false) private Integer canceled =0; @ApiModelProperty("再投数量") @TableField(exist = false) private Integer reInvestment=0; @ApiModelProperty("是否为再投单") @TableField("is_reinvest") private Integer isReinvest; ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/OrderMapper.java
@@ -112,7 +112,7 @@ * @param orderQueryRequest 筛选参数 * @return 统计数量 */ List<Order> orderPageCount(@Param("data") OrderQueryRequest orderQueryRequest); Order orderPageCount(@Param("data") OrderQueryRequest orderQueryRequest); /** * 根据所选id查询 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/request/ChangeDispatchRequest.java
@@ -18,6 +18,8 @@ private String reservationAddress; private String userName; private String reservationPhone; private String reservationName; private Integer pageNum; ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
@@ -1,4 +1,5 @@ package com.ruoyi.order.service.impl; import java.util.Date; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -131,12 +132,12 @@ Page<Order> page = Page.of(orderQueryRequest.getPageNum(), orderQueryRequest.getPageSize()); // 基础查询 Page<Order> pageList = baseMapper.queryPage(orderQueryRequest, page); List<ChangeDispatch> list = changeDispatchService.lambdaQuery() .eq(ChangeDispatch::getIsDelete, 0) .orderByDesc(ChangeDispatch::getCreateTime).list(); for (Order order : pageList.getRecords()) { ChangeDispatch changeDispatch = changeDispatchService.lambdaQuery() .eq(ChangeDispatch::getOrderId, order.getId()) .eq(ChangeDispatch::getIsDelete, 0) .orderByDesc(ChangeDispatch::getCreateTime) .last("limit 1").one(); ChangeDispatch changeDispatch = list.stream().filter(e -> e.getOrderId().equals(order.getId())) .findFirst().orElse(null); if (null != changeDispatch) { order.setApplyReason(changeDispatch.getApplyReason()); } @@ -160,34 +161,18 @@ @Override public OrderPageCountVO orderPageCount(OrderQueryRequest orderQueryRequest) { List<Order> orderList = baseMapper.orderPageCount(orderQueryRequest); int total = 0; int toBeDispatched = 0; int stayDoorstep = 0; int toBeCompleted = 0; int completed = 0; int canceled = 0; int reInvestment = 0; for (Order order : orderList) { total++; Integer state = order.getState(); if (Constants.ZERO.equals(state)) { toBeDispatched++; } else if (Constants.ONE.equals(state)) { stayDoorstep++; } else if (Constants.TWO.equals(state)) { toBeCompleted++; } else if (Constants.THREE.equals(state)) { completed++; } else if (Constants.FOUR.equals(state)) { canceled++; } if (order.getState().equals(Constants.SIX)) { reInvestment++; } } return new OrderPageCountVO(total, toBeDispatched, stayDoorstep, toBeCompleted, completed, canceled, reInvestment); Order order = baseMapper.orderPageCount(orderQueryRequest); Integer toBeDispatched = order.getToBeDispatched(); Integer stayDoorstep = order.getStayDoorstep(); Integer toBeCompleted = order.getToBeCompleted(); Integer completed = order.getCompleted(); Integer canceled = order.getCanceled(); Integer reInvestment = order.getReInvestment(); int total = toBeDispatched + stayDoorstep + toBeCompleted + completed + canceled + reInvestment; return new OrderPageCountVO(total, toBeDispatched, stayDoorstep, toBeCompleted, completed, canceled, reInvestment); } @Override ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/vx/GetTransferBatchByOutNo.java
@@ -9,7 +9,7 @@ public class GetTransferBatchByOutNo { /** 商户号 */ public static String merchantId = "1665330417"; /** 商户API私钥路径 */ public static String privateKeyPath = "/usr/local/vx/apiclient_key.pem"; /** 商户证书序列号 */ "E:/cert/ershou/apiclient_key.pem"; /** 商户证书序列号 */ public static String merchantSerialNumber = "7EEA04429B006E12AAA421C002EC48BBEED5BE94"; /** 商户APIV3密钥 */ public static String apiV3Key = "TA2npSNWmS0GcB0tFFRWA94rm1M0iSFs"; ruoyi-service/ruoyi-order/src/main/resources/mapper/order/ChangeDispatchMapper.xml
@@ -40,7 +40,13 @@ and c.user_name like concat('%', #{data.userName}, '%') </if> <if test="data.reservationAddress != null and data.reservationAddress != ''"> and o.reservationAddress like concat('%', #{data.reservationAddress}, '%') and o.reservation_address like concat('%', #{data.reservationAddress}, '%') </if> <if test="data.reservationPhone != null and data.reservationPhone != ''"> and o.reservation_phone like concat('%', #{data.reservationPhone}, '%') </if> <if test="data.reservationName != null and data.reservationName != ''"> and o.reservation_name like concat('%', #{data.reservationName}, '%') </if> <if test="data.cityList != null and data.cityList.size() != 0"> and o.city_code in ruoyi-service/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml
@@ -377,8 +377,14 @@ order by o.createTime desc </select> <select id="orderPageCount" resultMap="BaseResultMap"> select o.* <select id="orderPageCount" resultType="com.ruoyi.order.entity.Order"> select sum(case when o.state = 0 then 1 end) as toBeDispatched, sum(case when o.state = 1 then 1 end) as stayDoorstep, sum(case when o.state = 2 then 1 end) as toBeCompleted, sum(case when o.state = 3 then 1 end) as completed, sum(case when o.state = 4 then 1 end) as canceled, sum(case when o.state = 6 then 1 end) as reInvestment from t_order o <where> o.is_delete = 0