From 4e9db1b5a983d7ecbc68fd056fbee37d65ff0580 Mon Sep 17 00:00:00 2001 From: "925116093-qq.com" <925116093@qq.com> Date: Sat, 23 Aug 2025 19:17:22 +0800 Subject: [PATCH] 2025008071805 --- .../controller/AppleOrderController.java | 47 +-- .../system/controller/AppletController.java | 150 ++------ .../controller/WorkerApplyController.java | 234 ++++++++++-- .../controllerUtil/AppletControllerUtil.java | 131 +++++++ .../controllerUtil/BenefitPointsUtil.java | 2 +- .../system/controllerUtil/DispatchUtil.java | 2 + .../system/controllerUtil/OrderUtil.java | 25 -- .../controllerUtil/WorkerCommissionUtil.java | 6 +- .../controllerUtil/YunXinPhoneUtilAPI.java | 7 +- .../com/ruoyi/system/mapper/OrderMapper.java | 16 + .../system/mapper/WorkerMoneyLogMapper.java | 10 + .../ruoyi/system/service/IOrderService.java | 16 + .../service/IWorkerMoneyLogService.java | 9 + .../system/service/impl/OrderServiceImpl.java | 24 ++ .../impl/WorkerMoneyLogServiceImpl.java | 16 +- .../resources/mapper/system/OrderMapper.xml | 27 +- .../mapper/system/WorkerMoneyLogMapper.xml | 17 + .../system/WorkerApply/WorkerApplyAudit.vue | 111 +++--- .../system/WorkerApply/WorkerApplyEdit.vue | 350 +++++++++++++++--- .../src/views/system/WorkerApply/index.vue | 33 +- 20 files changed, 887 insertions(+), 346 deletions(-) diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controller/AppleOrderController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/AppleOrderController.java index 8b71a11..69419d1 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/controller/AppleOrderController.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/AppleOrderController.java @@ -2242,11 +2242,11 @@ public class AppleOrderController extends BaseController { queryOrderday.setMakeTimeEnd(tomorrowStart); List dayOrderList = orderService.selectOrderList(queryOrderday); - dayMap.put("today", dayOrderList.size()); + dayMap.put("today",orderService.selectAllCountOrdertodayByUid(user.getId())); queryOrder.setMakeTimeStart(tomorrowStart); queryOrder.setMakeTimeEnd(tomorrowStart + 24 * 60 * 60); List tomorrowOrderList1 = orderService.selectOrderList(queryOrder); - dayMap.put("tomorrow", tomorrowOrderList1.size()); + dayMap.put("tomorrow", orderService.selectAllCountOrdermingtianByUid(user.getId())); } @@ -2330,16 +2330,16 @@ public class AppleOrderController extends BaseController { List quotationList =userDemandQuotationService.selectUserDemandQuotationList(quotation); orderMap.put("quoteCount", quotationList.size()); orderMap.put("quotationList", buildQuotationList(quotationList)); -// if (order.getWorkerId() != null) { -// Users worker = usersService.selectUsersById(order.getWorkerId()); -// if (worker != null) { -// Map workerMap = new HashMap<>(); -// workerMap.put("workerName", worker.getName()); -// workerMap.put("workerAvatar", AppletControllerUtil.buildImageUrl(worker.getAvatar())); -// workerMap.put("workerPhone", worker.getPhone()); -// orderMap.put("workerMap", workerMap); -// } -// } + if (order.getWorkerId() != null) { + Users worker = usersService.selectUsersById(order.getWorkerId()); + if (worker != null) { + Map workerMap = new HashMap<>(); + workerMap.put("workerName", worker.getName()); + workerMap.put("workerAvatar", AppletControllerUtil.buildImageUrl(worker.getAvatar())); + workerMap.put("workerPhone", worker.getPhone()); + orderMap.put("workerMap", workerMap); + } + } } if (order.getFileData() != null && !order.getFileData().trim().isEmpty()) { try { @@ -2618,25 +2618,8 @@ public class AppleOrderController extends BaseController { Map pageResult1 = new HashMap<>(); if(status!=null){ - - Order queryOrderday = new Order(); - queryOrderday.setStatus(Long.valueOf(status)); - Calendar cal = Calendar.getInstance(); - cal.set(Calendar.HOUR_OF_DAY, 0); - cal.set(Calendar.MINUTE, 0); - cal.set(Calendar.SECOND, 0); - cal.set(Calendar.MILLISECOND, 0); - long todayStart = cal.getTimeInMillis() / 1000; - long tomorrowStart = todayStart + 24 * 60 * 60; - queryOrderday.setMakeTimeStart(todayStart); - - queryOrderday.setMakeTimeEnd(tomorrowStart); - List dayOrderList = orderService.selectOrderList(queryOrderday); - dayMap.put("today", dayOrderList.size()); - queryOrder.setMakeTimeStart(tomorrowStart); - queryOrder.setMakeTimeEnd(tomorrowStart + 24 * 60 * 60); - List tomorrowOrderList1 = orderService.selectOrderList(queryOrderday); - dayMap.put("tomorrow", tomorrowOrderList1.size()); + dayMap.put("today",orderService.selectAllCountOrdertodayByUid(user.getId())); + dayMap.put("tomorrow", orderService.selectAllCountOrdermingtianByUid(user.getId())); } pageResult1.put("data", responseData); @@ -4086,7 +4069,7 @@ public class AppleOrderController extends BaseController { int monthCount = orderService.selectOrderList(monthOrder).size(); // 4. 本月收入 - BigDecimal monthIncome = workerMoneyLogService.selectWorkerMoneySumPrice(workerId.intValue()); + BigDecimal monthIncome = workerMoneyLogService.selectWorkerMonthlyEarnings(Math.toIntExact(workerId)); if (monthIncome == null) monthIncome = BigDecimal.ZERO; // 5. 配置信息 diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controller/AppletController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/AppletController.java index 789cf8f..b581b69 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/controller/AppletController.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/AppletController.java @@ -1644,12 +1644,14 @@ public class AppletController extends BaseController { if (user.getType().equals("2")) { BigDecimal bb= user.getCommission(); //冻结金额 - BigDecimal lookmoney= workerMoneyLogService.selectWorkerLookMoneySum(Math.toIntExact(user.getId())); + BigDecimal lookmoney= workerMoneyLogService.selectWorkerMoneySumPriceAsLook(Math.toIntExact(user.getId())); if (user.getCommission()== null) { bb= new BigDecimal(0); } - userInfo.put("commission", bb.subtract(lookmoney)); +// userInfo.put("commission", bb.subtract(lookmoney)); + //可提现 + userInfo.put("commission",workerMoneyLogService.selectWorkerMoneySumPriceAsnoLook(Math.toIntExact(user.getId())).subtract(user.getPropose())); userInfo.put("total_comm", user.getTotalComm() != null ? user.getTotalComm().toString() : "0.00"); userInfo.put("propose", user.getPropose() != null ? user.getPropose().toString() : "0.00"); userInfo.put("lookmoney",lookmoney); @@ -5139,20 +5141,30 @@ public class AppletController extends BaseController { } // city_ids Object cityIdsObj = params.get("city_ids"); - if (cityIdsObj instanceof List) { - List cityIdsList = (List) cityIdsObj; - apply.setCityIds(cityIdsList.toString().replace(" ","")); // 存字符串如[5,7,10,11] - } else if (cityIdsObj != null) { - apply.setCityIds(cityIdsObj.toString()); + if (cityIdsObj != null) { + apply.setCityIds(AppletControllerUtil.convertToJSONArray(cityIdsObj).toJSONString()); } + +// if (cityIdsObj instanceof List) { +// //List cityIdsList = (List) cityIdsObj; +// +// apply.setCityIds(AppletControllerUtil.convertToJSONArray(cityIdsObj).toJSONString()); // 存字符串如[5,7,10,11] +// } else if (cityIdsObj != null) { +// apply.setCityIds(cityIdsObj.toString()); +// } // skill_id Object skillIdObj = params.get("skill_id"); - if (skillIdObj instanceof List) { - List skillIdList = (List) skillIdObj; - apply.setSkillId(skillIdList.toString().replace(" ","")); - } else if (skillIdObj != null) { - apply.setSkillId(skillIdObj.toString()); + if (cityIdsObj != null) { + + apply.setSkillId(AppletControllerUtil.convertToJSONArray(skillIdObj).toJSONString()); } + +// if (skillIdObj instanceof List) { +// List skillIdList = (List) skillIdObj; +// +// } else if (skillIdObj != null) { +// apply.setSkillId(skillIdObj.toString()); +// } // 图片相关 apply.setSkill((String) params.getOrDefault("skill", "")); apply.setCriminal((String) params.getOrDefault("criminal", "")); @@ -5979,24 +5991,17 @@ public class AppletController extends BaseController { if (!phoneTwo.equals(lastTwo)) { return AppletControllerUtil.appletWarning("手机号后两位不正确"); } - //解绑订单虚拟号 - //需要解绑原订单上原师傅和客户的虚拟号 - VoiceResponseResult resultObj = YunXinPhoneUtilAPI.httpsPrivacyUnbind(order.getWorkerPhone(), order.getUserPhone(), order.getMiddlePhone(), order.getId()); - System.out.println("----------------------------------"+resultObj.getResult()); - System.out.println("----------------------------------"+resultObj.getResult()); - if (resultObj.getResult().equals("000000")) { -// order.setWorkerPhone(null); -// order.setUserPhone(null); -// order.setMiddlePhone(null); -// orderService.updateOrder(order); - orderService.updateOrderPhone(order.getId()); - } // 4. 更新订单状态 + + // 4. 更新订单状态 order.setJsonStatus(5); // 确认到达 JSONObject typeJson = new JSONObject(); typeJson.put("type", 4); order.setLogJson(typeJson.toJSONString()); // 6. 保存 orderService.updateOrder(order); + //需要解绑原订单上原师傅和客户的虚拟 + YunXinPhoneUtilAPI.httpsPrivacyUnbind(order.getWorkerPhone(), order.getUserPhone(), order.getMiddlePhone(), order.getId()); + // 5. 写订单日志 //一口价直接开始服务,没有报价的环节 if (order.getOdertype()!= 0){ @@ -6032,7 +6037,8 @@ public class AppletController extends BaseController { // 6. 保存 orderLogService.insertOrderLog(orderLog); //解绑号码 - YunXinPhoneUtilAPI.httpsPrivacyUnbind(order.getWorkerPhone(), order.getUserPhone(), order.getMiddlePhone(), order.getId()); + //VoiceResponseResult resultObj = YunXinPhoneUtilAPI.httpsPrivacyUnbind(order.getWorkerPhone(), order.getUserPhone(), order.getMiddlePhone(), order.getId()); + // 小程序推送给用户师傅已经到达 ServiceGoods serviceGoods = serviceGoodsService.selectServiceGoodsById(order.getProductId()); @@ -6845,10 +6851,6 @@ public class AppletController extends BaseController { } // 查询最新订单日志 OrderLog neworderLogdata =orderLogService.selectDataTheFirstNew(order.getId()); -// neworderLogdata.setType(new BigDecimal(2.0)); -// neworderLogdata.setOid(order.getId()); -// List orderLogslist = orderLogService.selectOrderLogList(neworderLogdata); -// OrderLog neworderLog = orderLogslist.getFirst(); if (neworderLogdata != null) { String logOrderId = GenerateCustomCode.generCreateOrder("DSB"); @@ -6869,6 +6871,7 @@ public class AppletController extends BaseController { neworderLog.setWorkerCost( price); neworderLog.setWorkerLogId(user.getId()); int insert =orderLogService.insertOrderLog(neworderLog); + //订单金额改变,订单金额添加上门费 if (insert > 0) { //上门费创建支付单 BigDecimal totalAmount=neworderLog.getPrice(); @@ -6877,96 +6880,7 @@ public class AppletController extends BaseController { payBeforeUtil.createPayBefore(userinfo, totalAmount, logOrderId, neworderLog.getId(), null, 7L, null, null, null, null, null,1L,null,order.getOrderId(), null); - -// // 9. 计算会员优惠和服务金抵扣 -// BigDecimal memberMoney = BigDecimal.ZERO; -// BigDecimal serviceMoney = BigDecimal.ZERO; -// -// try { -// // 查询config_one配置 -// SiteConfig configQuery = new SiteConfig(); -// configQuery.setName("config_one"); -// List configList = siteConfigService.selectSiteConfigList(configQuery); -// -// if (configList != null && !configList.isEmpty()) { -// String configValue = configList.get(0).getValue(); -// if (configValue != null && !configValue.trim().isEmpty()) { -// JSONObject configJson = JSONObject.parseObject(configValue); -// -// // 计算会员优惠金额 -// if (user.getIsmember() != null && user.getIsmember() == 1) { -// // 用户是包年会员,计算会员优惠 -// Integer memberDiscount = configJson.getInteger("member_discount"); -// if (memberDiscount != null && memberDiscount > 0) { -// // 会员优惠金额 = 订单金额 * (100 - 会员折扣) / 100 -// BigDecimal discountRate = BigDecimal.valueOf(memberDiscount).divide(BigDecimal.valueOf(100), 4, BigDecimal.ROUND_HALF_UP); -// if (totalAmount != null) { -// memberMoney = totalAmount.multiply(discountRate); -// } -// } -// } -// -// // 计算服务金抵扣金额 -// Integer serviceFee = configJson.getInteger("servicefee"); -// if (serviceFee != null && serviceFee > 0) { -// // 查询数据库最新用户数据 -// Users userDb = usersService.selectUsersById(user.getId()); -// if (userDb != null && userDb.getServicefee() != null && userDb.getServicefee().compareTo(BigDecimal.ZERO) > 0) { -// // 服务金抵扣金额 = 用户服务金 * 服务金比例 / 100 -// BigDecimal serviceRate = BigDecimal.valueOf(serviceFee).divide(BigDecimal.valueOf(100), 4, BigDecimal.ROUND_HALF_UP); -// serviceMoney = userDb.getServicefee().multiply(serviceRate); -// } -// } -// } -// } -// } catch (Exception e) { -// logger.warn("计算会员优惠和服务金抵扣失败: " + e.getMessage()); -// memberMoney = BigDecimal.ZERO; -// serviceMoney = BigDecimal.ZERO; -// } -// -// // 10. 创建预支付记录 -// UsersPayBefor usersPayBefor = new UsersPayBefor(); -// usersPayBefor.setUid(userinfo.getId()); -// usersPayBefor.setOrderid(logOrderId); -// usersPayBefor.setOid(neworderLog.getId()); -// usersPayBefor.setPaycode(GenerateCustomCode.generCreateOrder("PAY")); -// usersPayBefor.setAllmoney(totalAmount); -// usersPayBefor.setWxmoney(totalAmount); -// usersPayBefor.setShopmoney(BigDecimal.ZERO); -// usersPayBefor.setServicemoney(serviceMoney); -// usersPayBefor.setMtmoney(BigDecimal.ZERO); -// usersPayBefor.setYemoney(BigDecimal.ZERO); -// usersPayBefor.setCouponmoney(BigDecimal.ZERO); -// usersPayBefor.setServicetype(1L); -// usersPayBefor.setMembermoney(memberMoney); -// usersPayBefor.setType(7L); -// usersPayBefor.setSku(""); -// usersPayBefor.setStatus(1L); // 1=待支付 -// usersPayBefor.setPaytype(1L); // 默认微信支付 -// -// int payBeforResult = usersPayBeforService.insertUsersPayBefor(usersPayBefor); -// if (payBeforResult <= 0) { -// return AppletControllerUtil.appletWarning("预支付记录创建失败"); -// } } - -// //修改订单日志添加费用 -// neworderLog.setPrice(price); -// neworderLog.setPaid(1L); -// neworderLog.setWorkerCost(price); -// neworderLog.setLogId(GenerateCustomCode.generCreateOrder("FEE")); -// //修改订单状态 -// order.setJsonStatus(3); -// JSONObject jsonObject3 = new JSONObject(); -// jsonObject3.put("type", 2); -// order.setLogJson(jsonObject3.toJSONString()); -// orderLogService.updateOrderLog(neworderLog); -// orderService.updateOrder(order); -// Users userinfo = usersService.selectUsersById(order.getUid()); -// ServiceGoods serviceGoods = serviceGoodsService.selectServiceGoodsById(order.getProductId()); -// //给用户发送微信推送消息 -// WXsendMsgUtil.sendMsgForUserDoorMoney(userinfo.getOpenid(), order, serviceGoods); } return AjaxResult.success("设置上门费成功"); } catch (Exception e) { diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controller/WorkerApplyController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/WorkerApplyController.java index c2eb002..5f7fadc 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/controller/WorkerApplyController.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/WorkerApplyController.java @@ -5,6 +5,8 @@ import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletResponse; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.system.ControllerUtil.AppletControllerUtil; import com.ruoyi.system.ControllerUtil.WorkerApplyUtil; import com.ruoyi.system.domain.Users; import com.ruoyi.system.domain.WorkerLevel; @@ -123,47 +125,24 @@ for(WorkerApply data:list){ if (workerApply.getPhone()==null){ return error("手机号码不能为空"); } + // city_ids + // Object cityIdsObj = params.get("city_ids"); + if (StringUtils.isNotBlank(workerApply.getCityIds())) { + workerApply.setCityIds(AppletControllerUtil.convertToJSONArray(workerApply.getCityIds()).toJSONString()); + } - //同意师傅申请 - if (workerApply.getStatus()==1){ - Users users = usersService.selectUsersById(workerApply.getUid()); - //查询最低的师傅级别进行赋值 - WorkerLevel workerLevel = workerLevelService.selectWorkerLevelByLevel(1L); - //工号 - int jobnumber=0; - Users usersMax =usersService.selectUsersIsMaxNumber() ; - if (usersMax!=null){ - jobnumber=usersMax.getJobNumber()+1; - } - //已经是师傅了,就不用处理 - if(!users.getType().equals("2")){ - users.setType("2"); - users.setCommission(new BigDecimal("0.00")); - users.setTotalComm(new BigDecimal("0.00")); - users.setMargin(new BigDecimal("0.00")); - users.setProhibitTimeNum(0); - users.setIsWork(1); - //新增需----求师傅头像使用认证时照片 昵称使用认证时姓名 - users.setAvatar(workerApply.getImage()); - users.setLevel(Math.toIntExact(workerLevel.getLevel())); - users.setJobNumber(jobnumber); - users.setServiceCityIds(workerApply.getCityIds()); - users.setSkillIds(workerApply.getSkillId()); - users.setServiceCityPid(workerApply.getCityPid()); - usersService.updateUsers(users); - Map verifyResult =WorkerApplyUtil.virtualVerify(workerApply.getImage(), - workerApply.getPhone(), - workerApply.getCardNo(), - workerApply.getName(), - "",//回调地址,暂时不用写,等需要的时候再去写吧 - "https://img.huafurenjia.cn/",//七牛云的地址 - "https://101.37.133.245:11008/voice/1.0.0/");//"实名API地址" - if (!"000000".equals(verifyResult.get("result"))) { - System.out.println("电子照片" + verifyResult.get("message")); - } - } +// if (cityIdsObj instanceof List) { +// //List cityIdsList = (List) cityIdsObj; +// +// apply.setCityIds(AppletControllerUtil.convertToJSONArray(cityIdsObj).toJSONString()); // 存字符串如[5,7,10,11] +// } else if (cityIdsObj != null) { +// apply.setCityIds(cityIdsObj.toString()); +// } + // skill_id + if (StringUtils.isNotBlank(workerApply.getSkillId())) { + workerApply.setSkillId(AppletControllerUtil.convertToJSONArray(workerApply.getSkillId()).toJSONString()); } return toAjax(workerApplyService.updateWorkerApply(workerApply)); } @@ -178,4 +157,183 @@ for(WorkerApply data:list){ { return toAjax(workerApplyService.deleteWorkerApplyByIds(ids)); } + + /** + * 审核师傅申请 + */ + @PreAuthorize("@ss.hasPermi('system:WorkerApply:audit')") + @Log(title = "师傅申请审核", businessType = BusinessType.UPDATE) + @PostMapping("/audit") + public AjaxResult audit(@RequestBody Map params) throws Exception { + Long id = Long.valueOf(params.get("id").toString()); + Integer status = Integer.valueOf(params.get("status").toString()); + String remark = params.get("remark") != null ? params.get("remark").toString() : ""; + + // 获取申请记录 + WorkerApply workerApply = workerApplyService.selectWorkerApplyById(id); + if (workerApply == null) { + return error("申请记录不存在"); + } + + // 检查是否已经处理过 + if (workerApply.getStatus() != 0) { + return error("该申请已经处理过,不能重复审核"); + } + // 根据审核状态进行不同处理 + if (status == 1) { + Users users = usersService.selectUsersById(workerApply.getUid()); + if (users!=null) { + users.setType("2"); + users.setName(workerApply.getName()); + users.setPhone(workerApply.getPhone()); + users.setAvatar(workerApply.getImage()); + users.setStatus(1); + users.setLevel(1); + users.setIsWork(1); + users.setCommission(new BigDecimal("0.00")); + users.setTotalComm(new BigDecimal("0.00")); + users.setMargin(new BigDecimal("0.00")); + int jobnumber=0; + Users usersMax =usersService.selectUsersIsMaxNumber() ; + if (usersMax!=null){ + jobnumber=usersMax.getJobNumber()+1; + } + users.setJobNumber(jobnumber); + users.setServiceCityIds(workerApply.getCityIds()); + users.setSkillIds(workerApply.getSkillId()); + users.setServiceCityPid(workerApply.getCityPid()); + users.setPropose(new BigDecimal("0.00")); + users.setIsStop(0); + usersService.updateUsers(users); + Map verifyResult =WorkerApplyUtil.virtualVerify(workerApply.getImage(), + workerApply.getPhone(), + workerApply.getCardNo(), + workerApply.getName(), + "",//回调地址,暂时不用写,等需要的时候再去写吧 + "https://img.huafurenjia.cn/",//七牛云的地址 + "https://101.37.133.245:11008/voice/1.0.0/");//"实名API地址" + if (!"000000".equals(verifyResult.get("result"))) { + System.out.println("电子照片" + verifyResult.get("message")); + } + workerApply.setStatus(1L); + + workerApplyService.updateWorkerApply(workerApply); + } + // 同意申请的处理逻辑 + return success("操作成功"); + } else if (status == 2) { + workerApply.setStatus(2L); + workerApply.setRemarks(remark); + workerApplyService.updateWorkerApply(workerApply); + // 驳回申请的处理逻辑 + return success("操作成功"); + } else { + return error("无效的审核状态"); + } + } + + /** + * 处理同意申请 + */ + private AjaxResult handleApprove(WorkerApply workerApply) throws Exception { + // 验证必要信息 + if (workerApply.getImage() == null || workerApply.getImage().isEmpty()) { + return error("请上传电子照片"); + } + if (workerApply.getCardNo() == null || workerApply.getCardNo().isEmpty()) { + return error("身份证号不能为空"); + } + if (workerApply.getName() == null || workerApply.getName().isEmpty()) { + return error("真实姓名不能为空"); + } + if (workerApply.getPhone() == null || workerApply.getPhone().isEmpty()) { + return error("手机号码不能为空"); + } + + // TODO: 在这里添加同意申请的具体业务逻辑 + // 1. 获取用户信息 + Users users = usersService.selectUsersById(workerApply.getUid()); + if (users == null) { + return error("用户不存在"); + } + + // 2. 检查是否已经是师傅 + if ("2".equals(users.getType())) { + return error("该用户已经是师傅,无需重复处理"); + } + + // 3. 查询最低的师傅级别进行赋值 + WorkerLevel workerLevel = workerLevelService.selectWorkerLevelByLevel(1L); + if (workerLevel == null) { + return error("师傅级别配置不存在"); + } + + // 4. 生成工号 + int jobNumber = 1; + Users usersMax = usersService.selectUsersIsMaxNumber(); + if (usersMax != null) { + jobNumber = usersMax.getJobNumber() + 1; + } + + // 5. 更新用户为师傅 + users.setType("2"); + users.setCommission(new BigDecimal("0.00")); + users.setTotalComm(new BigDecimal("0.00")); + users.setMargin(new BigDecimal("0.00")); + users.setProhibitTimeNum(0); + users.setIsWork(1); + users.setAvatar(workerApply.getImage()); + users.setLevel(Math.toIntExact(workerLevel.getLevel())); + users.setJobNumber(jobNumber); + users.setServiceCityIds(workerApply.getCityIds()); + users.setSkillIds(workerApply.getSkillId()); + users.setServiceCityPid(workerApply.getCityPid()); + + // 6. 实名认证验证 + Map verifyResult = WorkerApplyUtil.virtualVerify( + workerApply.getImage(), + workerApply.getPhone(), + workerApply.getCardNo(), + workerApply.getName(), + "", // 回调地址,暂时不用写 + "https://img.huafurenjia.cn/", // 七牛云的地址 + "https://101.37.133.245:11008/voice/1.0.0/" // 实名API地址 + ); + + if (!"000000".equals(verifyResult.get("result"))) { + System.out.println("电子照片验证失败: " + verifyResult.get("message")); + // 可以选择是否因为验证失败而终止流程 + } + + // 7. 保存用户信息 + usersService.updateUsers(users); + + // 8. 更新申请状态 + int result = workerApplyService.updateWorkerApply(workerApply); + + if (result > 0) { + return success("审核通过,用户已成功升级为师傅"); + } else { + return error("审核处理失败"); + } + } + + /** + * 处理驳回申请 + */ + private AjaxResult handleReject(WorkerApply workerApply) { + // TODO: 在这里添加驳回申请的具体业务逻辑 + // 1. 可以发送通知给用户 + // 2. 记录驳回原因 + // 3. 其他相关处理 + + // 更新申请状态 + int result = workerApplyService.updateWorkerApply(workerApply); + + if (result > 0) { + return success("申请已驳回"); + } else { + return error("驳回处理失败"); + } + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controllerUtil/AppletControllerUtil.java b/ruoyi-system/src/main/java/com/ruoyi/system/controllerUtil/AppletControllerUtil.java index 55b0d8c..a2dbf75 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/controllerUtil/AppletControllerUtil.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controllerUtil/AppletControllerUtil.java @@ -6131,7 +6131,138 @@ public class AppletControllerUtil { + /** + * 将数组或数字字符串转换为字符串数组 + * 支持的输入格式: + * 1. [2, 5, 7, 10, 11, 12] - 数字数组 + * 2. "2, 5, 7, 10, 11, 12" - 逗号分隔的数字字符串 + * 3. ["2", "5", "7", "10", "11", "12"] - 字符串数组(直接返回) + * + * @param input 输入的数据,可以是数组、字符串或其他类型 + * @return 字符串数组,如果输入为null或空则返回空数组 + */ + public static String[] convertToStringArray(Object input) { + if (input == null) { + return new String[0]; + } + + // 如果已经是字符串数组,直接返回 + if (input instanceof String[]) { + return (String[]) input; + } + + // 如果是List类型 + if (input instanceof List) { + List list = (List) input; + return list.stream() + .map(Object::toString) + .toArray(String[]::new); + } + + // 如果是普通数组 + if (input.getClass().isArray()) { + Object[] array = (Object[]) input; + String[] result = new String[array.length]; + for (int i = 0; i < array.length; i++) { + result[i] = String.valueOf(array[i]); + } + return result; + } + + // 如果是字符串,尝试按逗号分割 + if (input instanceof String) { + String str = (String) input; + // 移除可能的方括号 + str = str.replaceAll("[\\[\\]]", "").trim(); + + if (str.isEmpty()) { + return new String[0]; + } + + // 按逗号分割并去除空格和引号 + return Arrays.stream(str.split(",")) + .map(String::trim) + .map(s -> s.replaceAll("^\"|\"$", "")) // 移除首尾的双引号 + .filter(s -> !s.isEmpty()) + .toArray(String[]::new); + } + + // 其他情况,转换为单元素数组 + return new String[]{String.valueOf(input)}; + } + + /** + * 将数组或数字字符串转换为字符串列表 + * + * @param input 输入的数据 + * @return 字符串列表 + */ + public static List convertToStringList(Object input) { + return Arrays.asList(convertToStringArray(input)); + } + + /** + * 将数组或数字字符串转换为JSONArray + * + * @param input 输入的数据 + * @return JSONArray对象 + */ + public static JSONArray convertToJSONArray(Object input) { + String[] stringArray = convertToStringArray(input); + JSONArray jsonArray = new JSONArray(); + for (String str : stringArray) { + jsonArray.add(str); + } + return jsonArray; + } + public static void main(String[] args) { System.out.println(formatStringToJson("{\"image\":\"['https:img.huafurenjia.cn/images/2024-10-13/dKriAtS3HHsM0JAm6DdQEPQvAFnnuPcnOxau6SSy.jpg']\",\"num\":1,\"text\":\"你很好我爱你\" ,\"labels\":[\"技术专业\",\"作业规范\",\"价格合理\"] }")); + + // 测试转换方法 + System.out.println("=== 测试数据类型转换方法 ==="); + + // 测试数字数组 + Integer[] intArray = {2, 5, 7, 10, 11, 12}; + System.out.println("数字数组: " + Arrays.toString(convertToStringArray(intArray))); + + // 测试字符串 + String str = "2, 5, 7, 10, 11, 12"; + System.out.println("逗号分隔字符串: " + Arrays.toString(convertToStringArray(str))); + + // 测试带引号的JSON字符串 + String jsonStr = "[\"2\",\"5\",\"7\",\"10\",\"11\",\"12\"]"; + System.out.println("JSON字符串: " + Arrays.toString(convertToStringArray(jsonStr))); + + // 测试混合格式的字符串 + String mixedStr = "[\"2\",\"5\",7,\"10\",11,\"12\"]"; + System.out.println("混合格式字符串: " + Arrays.toString(convertToStringArray(mixedStr))); + + // 测试字符串数组 + String[] strArray = {"2", "5", "7", "10", "11", "12"}; + System.out.println("字符串数组: " + Arrays.toString(convertToStringArray(strArray))); + + // 测试List + List intList = Arrays.asList(2, 5, 7, 10, 11, 12); + System.out.println("数字列表: " + Arrays.toString(convertToStringArray(intList))); + + // 测试JSONArray转换 + System.out.println("=== 测试JSONArray转换 ==="); + JSONArray jsonArray1 = convertToJSONArray(intArray); + System.out.println("数字数组转JSONArray: " + jsonArray1.toJSONString()); + + JSONArray jsonArray2 = convertToJSONArray(str); + System.out.println("字符串转JSONArray: " + jsonArray2.toJSONString()); + + JSONArray jsonArray3 = convertToJSONArray(strArray); + System.out.println("字符串数组转JSONArray: " + jsonArray3.toJSONString()); + + // 测试带引号的JSON字符串转换 + JSONArray jsonArray4 = convertToJSONArray(jsonStr); + System.out.println("JSON字符串转JSONArray: " + jsonArray4.toJSONString()); + + // 测试混合格式转换 + JSONArray jsonArray5 = convertToJSONArray(mixedStr); + System.out.println("混合格式转JSONArray: " + jsonArray5.toJSONString()); } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controllerUtil/BenefitPointsUtil.java b/ruoyi-system/src/main/java/com/ruoyi/system/controllerUtil/BenefitPointsUtil.java index d2cbed4..227a954 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/controllerUtil/BenefitPointsUtil.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controllerUtil/BenefitPointsUtil.java @@ -1340,7 +1340,7 @@ public class BenefitPointsUtil { userMemnerConsumptionLog.setConsumptiontype(2); userMemnerConsumptionLog.setConsumptiontime(new Date()); userMemnerConsumptionLog.setConsumptionmoney(money); - userMemnerConsumptionLog.setReamk(reamk); + userMemnerConsumptionLog.setReamk("订单余额退款"+money+"元"); userMemnerConsumptionLog.setBeformoney(user.getBalance().subtract(money)); userMemnerConsumptionLog.setAftermoney(user.getBalance()); userMemnerConsumptionLog.setNowmoney(user.getBalance()); diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controllerUtil/DispatchUtil.java b/ruoyi-system/src/main/java/com/ruoyi/system/controllerUtil/DispatchUtil.java index ca17559..8dd7535 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/controllerUtil/DispatchUtil.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controllerUtil/DispatchUtil.java @@ -2962,7 +2962,9 @@ public class DispatchUtil { ServiceGoods serviceGoods = serviceGoodsService.selectServiceGoodsById(order.getProductId()); //给师傅派单的时候的推送 WXsendMsgUtil.sendMsgForWorkerInfo(worker.getOpenid(), order, serviceGoods); + //派单的时候需要绑定虚拟号码 Map map= OrderBindWorkerUtil.getOrderBindWorker(order.getId()); + //电话通知师傅接单 YunXinPhoneUtilAPI.httpsAxbTransfer(order.getWorkerPhone(), order.getId()); // if (map.get("code").equals("200")) { // //电话通知 diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controllerUtil/OrderUtil.java b/ruoyi-system/src/main/java/com/ruoyi/system/controllerUtil/OrderUtil.java index befa823..c0014b1 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/controllerUtil/OrderUtil.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controllerUtil/OrderUtil.java @@ -1367,33 +1367,8 @@ public class OrderUtil { userUseSecondaryCardService.updateUserUseSecondaryCard(userUseSecondaryCard); } } - -// // 处理用户通知(可选) -// if (order.getUid() != null) { -// Users user = usersService.selectUsersById(order.getUid()); -// if (user != null) { -// // 这里可以添加微信通知等逻辑 -// // ServiceGoods serviceGoods = serviceGoodsService.selectServiceGoodsById(order.getProductId()); -// // WXsendMsgUtil.sendWorkerFinishOrder(user.getOpenid(), order, serviceGoods); -// System.out.println("用户通知处理完成,用户ID: " + order.getUid()); -// } -// } - System.out.println("订单 " + orderid + " 状态修改为已完成"); } - -// else { -// System.out.println("订单 " + orderid + " 不满足完成条件:剩余付款数量=" + paynum + ", 师傅是否已完成=" + isWorkerCompleted); -// -// // 如果还有剩余付款,但师傅已完成,可以设置为待付款状态 -// if (paynum > 0 && isWorkerCompleted) { -// order.setStatus(6L); // 6:待付款 -// order.setJsonStatus(9); // 9:已完成 -// int updateResult = orderService.updateOrder(order); -// System.out.println("订单状态更新为待付款,更新结果: " + updateResult); -// } -// } - return paynum; } catch (Exception e) { diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controllerUtil/WorkerCommissionUtil.java b/ruoyi-system/src/main/java/com/ruoyi/system/controllerUtil/WorkerCommissionUtil.java index 346fa39..0cceb1f 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/controllerUtil/WorkerCommissionUtil.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controllerUtil/WorkerCommissionUtil.java @@ -833,6 +833,8 @@ public class WorkerCommissionUtil { } BigDecimal newCommission = currentCommission.add(finalCommissionWithDoorFee); worker.setCommission(newCommission); + //累计分佣 + worker.setTotalComm(worker.getTotalComm().add(newCommission)); // 5. 更新师傅信息 int updateResult = usersService.updateUsers(worker); @@ -1613,8 +1615,10 @@ public class WorkerCommissionUtil { // 3. 计算订单总金额(用于开票) // 公式:上门费 + 服务费用 + 材料费用 + 尾款 + 差价 + 定金 - 优惠费用 +// BigDecimal invoiceTotalPrice = doorFee.add(serviceFee).add(materialFee).add(totalPrice) +// .add(finalPayment).add(priceDifference).subtract(discountAmount); BigDecimal invoiceTotalPrice = doorFee.add(serviceFee).add(materialFee).add(totalPrice) - .add(finalPayment).add(priceDifference).add(deposit).subtract(discountAmount); + .add(BigDecimal.ZERO).add(priceDifference).subtract(discountAmount); logger.info("=== 订单总金额计算明细(用于开票) ==="); logger.info("上门费: {}元", doorFee); diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controllerUtil/YunXinPhoneUtilAPI.java b/ruoyi-system/src/main/java/com/ruoyi/system/controllerUtil/YunXinPhoneUtilAPI.java index 31b609d..71ababe 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/controllerUtil/YunXinPhoneUtilAPI.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controllerUtil/YunXinPhoneUtilAPI.java @@ -163,6 +163,7 @@ public class YunXinPhoneUtilAPI { public static VoiceResponseResult httpsPrivacyUnbind(String phoneA, String phoneB, String phone,Long oid) throws Exception { VoiceResponseResult resultObj = new VoiceResponseResult(); String url = UNBIND_URL; + System.out.println("---------------------------------解绑执行结果: " + oid); try { PrivacyUnbindBody unbindBody = new PrivacyUnbindBody(); long timestamp = System.currentTimeMillis(); @@ -178,11 +179,11 @@ public class YunXinPhoneUtilAPI { JSONObject rjson = JSONObject.parseObject(result); resultObj.setResult(rjson.getString("result")); resultObj.setMessage(rjson.getString("message")); - System.out.println("[YunXinPhoneUtilAPI] 解绑执行结果: " + result); + //订单手机号码置空 - if("000000".equals(resultObj.getResult())) { + // if("000000".equals(resultObj.getResult())) { orderService.updateOrderPhone(oid); - } + // } } catch (Exception e) { System.out.println("[YunXinPhoneUtilAPI] 解绑异常: " + e.getMessage()); throw e; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OrderMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OrderMapper.java index 1537da0..9780694 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OrderMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OrderMapper.java @@ -196,4 +196,20 @@ public interface OrderMapper * @return 服务订单集合 */ public List selectOrderListForExport(Order order); + + /** + * 查询指定师傅今天的订单数量 + * + * @param uid 师傅ID + * @return 今天的订单数量 + */ + public int selectAllCountOrdertodayByUid(Long uid); + + /** + * 查询指定师傅明天的订单数量 + * + * @param uid 师傅ID + * @return 明天的订单数量 + */ + public int selectAllCountOrdermingtianByUid(Long uid); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/WorkerMoneyLogMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/WorkerMoneyLogMapper.java index 8ff661a..ddcfd2d 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/WorkerMoneyLogMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/WorkerMoneyLogMapper.java @@ -51,6 +51,10 @@ public interface WorkerMoneyLogMapper public BigDecimal selectWorkerMoneySumPriceAsLook(Integer workerId); + + public BigDecimal selectWorkerMoneySumPriceAsnoLook(Integer workerId); + + public BigDecimal selectWorkerMoneySumPriceAsNo(Integer workerId); public int updateWorkerMoneyLogStatusIfEndlookAfterNow(); @@ -62,6 +66,12 @@ public interface WorkerMoneyLogMapper */ public BigDecimal selectWorkerLookMoneySum(Integer workerId); + /** + * 统计指定师傅当月收益 + * @param workerId 师傅ID + * @return 当月收益总和 + */ + public BigDecimal selectWorkerMonthlyEarnings(Integer workerId); /** * 删除师傅金额明细 diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/IOrderService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/IOrderService.java index 44f402d..487f83c 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/IOrderService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/IOrderService.java @@ -194,4 +194,20 @@ public interface IOrderService * @return 服务订单集合 */ public List selectOrderListForExport(Order order); + + /** + * 查询指定师傅今天的订单数量 + * + * @param uid 师傅ID + * @return 今天的订单数量 + */ + public int selectAllCountOrdertodayByUid(Long uid); + + /** + * 查询指定师傅明天的订单数量 + * + * @param uid 师傅ID + * @return 明天的订单数量 + */ + public int selectAllCountOrdermingtianByUid(Long uid); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/IWorkerMoneyLogService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/IWorkerMoneyLogService.java index 11ae3ca..a09bb85 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/IWorkerMoneyLogService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/IWorkerMoneyLogService.java @@ -50,6 +50,8 @@ public interface IWorkerMoneyLogService public BigDecimal selectWorkerMoneySumPriceAsLook(Integer workerId); + public BigDecimal selectWorkerMoneySumPriceAsnoLook(Integer workerId); + public BigDecimal selectWorkerMoneySumPriceAsNo(Integer workerId); public int updateWorkerMoneyLogStatusIfEndlookAfterNow(); @@ -61,6 +63,13 @@ public interface IWorkerMoneyLogService */ public BigDecimal selectWorkerLookMoneySum(Integer workerId); + /** + * 统计指定师傅当月收益 + * @param workerId 师傅ID + * @return 当月收益总和 + */ + public BigDecimal selectWorkerMonthlyEarnings(Integer workerId); + /** * 批量删除师傅金额明细 * diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OrderServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OrderServiceImpl.java index c5d9d50..e6e3968 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OrderServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OrderServiceImpl.java @@ -237,4 +237,28 @@ public class OrderServiceImpl implements IOrderService { return orderMapper.selectOrderListForExport(order); } + + /** + * 查询指定师傅今天的订单数量 + * + * @param uid 师傅ID + * @return 今天的订单数量 + */ + @Override + public int selectAllCountOrdertodayByUid(Long uid) + { + return orderMapper.selectAllCountOrdertodayByUid(uid); + } + + /** + * 查询指定师傅明天的订单数量 + * + * @param uid 师傅ID + * @return 明天的订单数量 + */ + @Override + public int selectAllCountOrdermingtianByUid(Long uid) + { + return orderMapper.selectAllCountOrdermingtianByUid(uid); + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/WorkerMoneyLogServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/WorkerMoneyLogServiceImpl.java index 973d8f6..f5388c9 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/WorkerMoneyLogServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/WorkerMoneyLogServiceImpl.java @@ -83,7 +83,9 @@ public class WorkerMoneyLogServiceImpl implements IWorkerMoneyLogService public BigDecimal selectWorkerMoneySumPriceAsLook(Integer workerId){ return workerMoneyLogMapper.selectWorkerMoneySumPriceAsLook(workerId); } - + public BigDecimal selectWorkerMoneySumPriceAsnoLook(Integer workerId){ + return workerMoneyLogMapper.selectWorkerMoneySumPriceAsnoLook(workerId); + } public BigDecimal selectWorkerMoneySumPriceAsNo(Integer workerId){ return workerMoneyLogMapper.selectWorkerMoneySumPriceAsNo(workerId); } @@ -95,6 +97,18 @@ public class WorkerMoneyLogServiceImpl implements IWorkerMoneyLogService return workerMoneyLogMapper.selectWorkerLookMoneySum(workerId); } + + /** public BigDecimal selectWorkerMonthlyEarnings(Integer workerId); + * 统计指定师傅当月收益 + * + * @param workerId 师傅ID + * @return 当月收益总和 + */ + @Override + public BigDecimal selectWorkerMonthlyEarnings(Integer workerId) { + return workerMoneyLogMapper.selectWorkerMonthlyEarnings(workerId); + } + /** * 批量删除师傅金额明细 * diff --git a/ruoyi-system/src/main/resources/mapper/system/OrderMapper.xml b/ruoyi-system/src/main/resources/mapper/system/OrderMapper.xml index 37bf797..98df7aa 100644 --- a/ruoyi-system/src/main/resources/mapper/system/OrderMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/OrderMapper.xml @@ -169,11 +169,12 @@ ORDER BY - CASE - WHEN status = 1 AND (worker_id IS NULL OR worker_id = 0) THEN 0 - ELSE 1 - END ASC, - updated_at DESC + CASE + WHEN status = 1 AND (worker_id IS NULL OR worker_id = 0) THEN 0 + WHEN status = 5 THEN 2 + ELSE 1 + END ASC, + updated_at DESC @@ -271,6 +272,7 @@ ORDER BY CASE WHEN status = 1 AND (worker_id IS NULL OR worker_id = 0) THEN 0 + WHEN status = 5 THEN 2 ELSE 1 END ASC, updated_at DESC @@ -291,6 +293,21 @@ + + + + + + + + + UPDATE worker_money_log SET status = 2 diff --git a/ruoyi-ui/src/views/system/WorkerApply/WorkerApplyAudit.vue b/ruoyi-ui/src/views/system/WorkerApply/WorkerApplyAudit.vue index 45d0a83..5ff3df9 100644 --- a/ruoyi-ui/src/views/system/WorkerApply/WorkerApplyAudit.vue +++ b/ruoyi-ui/src/views/system/WorkerApply/WorkerApplyAudit.vue @@ -7,35 +7,23 @@ :close-on-click-modal="false" :close-on-press-escape="false" > - + - - + + - - - - - - - - + - + @@ -43,18 +31,18 @@ - + - + - +
- - + + + 通过 + 驳回 + + + + - - - - 通过 - 拒绝 - -