2025008071805

This commit is contained in:
张潘 2025-08-23 19:17:22 +08:00
parent c3297f0eae
commit 4e9db1b5a9
20 changed files with 887 additions and 346 deletions

View File

@ -2242,11 +2242,11 @@ public class AppleOrderController extends BaseController {
queryOrderday.setMakeTimeEnd(tomorrowStart);
List<Order> 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<Order> 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<UserDemandQuotation> 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<String, Object> 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<String, Object> 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<String, Object> 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<Order> dayOrderList = orderService.selectOrderList(queryOrderday);
dayMap.put("today", dayOrderList.size());
queryOrder.setMakeTimeStart(tomorrowStart);
queryOrder.setMakeTimeEnd(tomorrowStart + 24 * 60 * 60);
List<Order> 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. 配置信息

View File

@ -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<OrderLog> 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<SiteConfig> 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) {

View File

@ -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<String, Object> 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("驳回处理失败");
}
}
}

View File

@ -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<String> 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<Integer> 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());
}
}

View File

@ -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());

View File

@ -2962,7 +2962,9 @@ public class DispatchUtil {
ServiceGoods serviceGoods = serviceGoodsService.selectServiceGoodsById(order.getProductId());
//给师傅派单的时候的推送
WXsendMsgUtil.sendMsgForWorkerInfo(worker.getOpenid(), order, serviceGoods);
//派单的时候需要绑定虚拟号码
Map<String, Object> map= OrderBindWorkerUtil.getOrderBindWorker(order.getId());
//电话通知师傅接单
YunXinPhoneUtilAPI.httpsAxbTransfer(order.getWorkerPhone(), order.getId());
// if (map.get("code").equals("200")) {
// //电话通知

View File

@ -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) {

View File

@ -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);

View File

@ -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;

View File

@ -196,4 +196,20 @@ public interface OrderMapper
* @return 服务订单集合
*/
public List<Order> selectOrderListForExport(Order order);
/**
* 查询指定师傅今天的订单数量
*
* @param uid 师傅ID
* @return 今天的订单数量
*/
public int selectAllCountOrdertodayByUid(Long uid);
/**
* 查询指定师傅明天的订单数量
*
* @param uid 师傅ID
* @return 明天的订单数量
*/
public int selectAllCountOrdermingtianByUid(Long uid);
}

View File

@ -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);
/**
* 删除师傅金额明细

View File

@ -194,4 +194,20 @@ public interface IOrderService
* @return 服务订单集合
*/
public List<Order> selectOrderListForExport(Order order);
/**
* 查询指定师傅今天的订单数量
*
* @param uid 师傅ID
* @return 今天的订单数量
*/
public int selectAllCountOrdertodayByUid(Long uid);
/**
* 查询指定师傅明天的订单数量
*
* @param uid 师傅ID
* @return 明天的订单数量
*/
public int selectAllCountOrdermingtianByUid(Long uid);
}

View File

@ -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);
/**
* 批量删除师傅金额明细
*

View File

@ -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);
}
}

View File

@ -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);
}
/**
* 批量删除师傅金额明细
*

View File

@ -169,11 +169,12 @@
</where>
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
</select>
<update id="updateOrderPhone" parameterType="Long">
@ -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 @@
</select>
<select id="selectAllCountOrdertodayByUid" resultType="Integer">
select count(1) from order_data
where status=2
and FROM_UNIXTIME(make_time, '%Y-%m-%d') = CURDATE()
and worker_id = #{uid}
</select>
<select id="selectAllCountOrdermingtianByUid" resultType="Integer">
select count(1) from order_data
where status=2
and FROM_UNIXTIME(make_time, '%Y-%m-%d') = DATE_ADD(CURDATE(), INTERVAL 1 DAY)
and worker_id = #{uid}
</select>
<select id="selectOrderByOrderId" parameterType="String" resultMap="OrderResult">
<include refid="selectOrderVo"/>
where order_id = #{orderId}

View File

@ -71,6 +71,16 @@
status = 1
</select>
<select id="selectWorkerMoneySumPriceAsnoLook" parameterType="Integer" resultType="java.math.BigDecimal">
SELECT
COALESCE(SUM(price), 0.00) AS totalEarnings
FROM
worker_money_log
WHERE
worker_id = #{workerId} AND
status = 2
</select>
<select id="selectWorkerMoneySumPriceAsNo" parameterType="Integer" resultType="java.math.BigDecimal">
SELECT
COALESCE(SUM(admin_up_price), 0.00) AS totalEarnings
@ -86,6 +96,13 @@
WHERE worker_id = #{workerId} AND status != 0
</select>
<select id="selectWorkerMonthlyEarnings" parameterType="Integer" resultType="java.math.BigDecimal">
SELECT COALESCE(SUM(price), 0.00) AS monthlyEarnings
FROM worker_money_log
WHERE worker_id = #{workerId}
AND DATE_FORMAT(created_at, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m')
</select>
<update id="updateWorkerMoneyLogStatusIfEndlookAfterNow">
UPDATE worker_money_log
SET status = 2

View File

@ -7,35 +7,23 @@
:close-on-click-modal="false"
:close-on-press-escape="false"
>
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
<el-form ref="form" :model="form" label-width="120px">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="申请ID" prop="id">
<el-col :span="24">
<el-form-item label="申请ID">
<el-input v-model="form.id" disabled />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="申请状态" prop="status">
<el-select v-model="form.status" placeholder="请选择审核状态" style="width: 100%">
<el-option
v-for="dict in dict.type.worker_apply_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="用户姓名" prop="name">
<el-form-item label="用户姓名">
<el-input v-model="form.name" disabled />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系电话" prop="phone">
<el-form-item label="联系电话">
<el-input v-model="form.phone" disabled />
</el-form-item>
</el-col>
@ -43,18 +31,18 @@
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="申请地区" prop="address">
<el-form-item label="申请地区">
<el-input v-model="form.address" disabled />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="申请时间" prop="createdAt">
<el-form-item label="申请时间">
<el-input v-model="form.createdAt" disabled />
</el-form-item>
</el-col>
</el-row>
<el-form-item label="申请技能" prop="skillId">
<el-form-item label="申请技能">
<div v-if="form.skillId && form.skillId !== '' && isSkillListReady">
<el-tag
v-for="(skillId, index) in parseSkillIds(form.skillId)"
@ -70,23 +58,23 @@
<span v-else>-</span>
</el-form-item>
<el-form-item v-if="!readonly" label="审核备注" prop="auditRemark">
<el-form-item v-if="!readonly" label="审核结果">
<el-radio-group v-model="auditResult">
<el-radio label="pass">通过</el-radio>
<el-radio label="reject">驳回</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item v-if="!readonly && auditResult === 'reject'" label="驳回理由">
<el-input
v-model="form.auditRemark"
v-model="auditRemark"
type="textarea"
:rows="3"
placeholder="请输入审核备注信息"
placeholder="请输入驳回理由(必填)"
maxlength="500"
show-word-limit
/>
</el-form-item>
<el-form-item v-if="!readonly" label="审核结果" prop="auditResult">
<el-radio-group v-model="form.auditResult">
<el-radio label="pass">通过</el-radio>
<el-radio label="reject">拒绝</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
@ -123,14 +111,8 @@ export default {
data() {
return {
form: {},
rules: {
status: [
{ required: true, message: "请选择审核状态", trigger: "change" }
],
auditResult: [
{ required: true, message: "请选择审核结果", trigger: "change" }
]
},
auditResult: 'pass',
auditRemark: '',
submitLoading: false,
skillList: [],
skillNameCache: {}
@ -152,12 +134,9 @@ export default {
handler(val) {
if (val) {
this.form = { ...val };
//
if (!this.form.status) {
this.form.status = "0"; // 0
}
//
this.form.auditResult = "pass";
//
this.auditResult = 'pass';
this.auditRemark = '';
//
if (this.form.createdAt) {
this.form.createdAt = this.parseTime(this.form.createdAt, '{y}-{m}-{d} {h}:{i}:{s}');
@ -170,14 +149,10 @@ export default {
methods: {
//
initForm() {
this.form = {
...this.data,
auditRemark: "",
auditResult: "pass"
};
if (!this.form.status) {
this.form.status = "0";
}
this.form = { ...this.data };
this.auditResult = 'pass';
this.auditRemark = '';
if (this.form.createdAt) {
this.form.createdAt = this.parseTime(this.form.createdAt, '{y}-{m}-{d} {h}:{i}:{s}');
}
@ -273,22 +248,24 @@ export default {
//
handleSubmit() {
this.$refs["form"].validate((valid) => {
if (valid) {
this.submitLoading = true;
//
if (this.form.auditResult === 'pass') {
this.form.status = "1"; // 1
} else if (this.form.auditResult === 'reject') {
this.form.status = "2"; // 2
}
//
if (this.auditResult === 'reject' && (!this.auditRemark || this.auditRemark.trim() === '')) {
this.$message.error('驳回时必须输入驳回理由');
return;
}
//
this.$emit('confirm', this.form);
this.submitLoading = false;
}
});
this.submitLoading = true;
// API
const auditData = {
id: this.form.id,
status: this.auditResult === 'pass' ? 1 : 2, // 1=2=
remark: this.auditResult === 'reject' ? this.auditRemark : '' //
};
//
this.$emit('confirm', auditData);
this.submitLoading = false;
},
//

View File

@ -38,6 +38,39 @@
/>
</el-select>
</el-form-item>
<el-form-item label="接单城市" prop="cityPid">
<el-select
v-model="selectedCity"
placeholder="请选择接单城市"
filterable
clearable
style="width: 100%"
@change="handleCityChange">
<el-option
v-for="item in cityList"
:key="item.id"
:label="item.title"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="接单地区" prop="cityIds">
<el-select
v-model="selectedAreas"
placeholder="请选择接单地区"
filterable
multiple
style="width: 100%"
@change="handleAreaChange">
<el-option
v-for="item in areaList"
:key="item.id"
:label="item.title"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="电子照片" prop="image">
<image-upload v-model="form.image" :limit="1"/>
</el-form-item>
@ -56,7 +89,7 @@
<el-form-item label="驾照" prop="drive">
<image-upload v-model="form.drive" :limit="1"/>
</el-form-item>
<el-form-item label="状态" prop="status">
<!-- <el-form-item label="状态" prop="status">
<el-radio-group v-model="form.status">
<el-radio
v-for="dict in dict.type.worker_apply_status"
@ -64,27 +97,12 @@
:label="parseInt(dict.value)"
>{{dict.label}}</el-radio>
</el-radio-group>
</el-form-item>
</el-form-item> -->
<el-form-item label="备注" prop="remarks">
<el-input v-model="form.remarks" placeholder="请输入备注" />
</el-form-item>
<el-form-item label="接单地区" prop="cityIds">
<el-select
v-model="selectedAreas"
multiple
filterable
clearable
placeholder="请选择接单地区"
@change="handleAreaChange"
>
<el-option
v-for="item in areaOptions"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
@ -95,6 +113,7 @@
<script>
import { getSiteSkillList } from "@/api/system/SiteSkill"
import { datalist } from "@/api/system/DiyCity"
export default {
name: "WorkerApplyEdit",
@ -161,35 +180,32 @@ export default {
]
},
areaOptions: [
{ id: 1, name: '未央区' },
{ id: 2, name: '莲湖区' },
{ id: 3, name: '新城区' },
{ id: 4, name: '碑林区' },
{ id: 5, name: '雁塔区' },
{ id: 6, name: '灞桥区' },
{ id: 7, name: '长安区' },
{ id: 8, name: '高新区' },
{ id: 9, name: '临潼区' },
{ id: 10, name: '阎良区' }
], //
selectedAreas: [], //
//
cityList: [],
selectedCity: undefined,
cityNameCache: {},
//
areaList: [],
selectedAreas: [],
areaNameCache: {},
//
skillList: [],
selectedSkills: []
selectedSkills: [],
//
isInitializing: false
}
},
watch: {
data: {
handler(val) {
if (val) {
console.log('WorkerApplyEdit - 接收到数据:', val);
this.form = { ...val }
// ,
if (this.form.cityIds) {
this.selectedAreas = this.form.cityIds.split(',').map(Number)
}
// ,
//
if (this.form.skillId) {
this.selectedSkills = this.parseSkillIds(this.form.skillId).map(Number)
}
@ -199,9 +215,49 @@ export default {
},
visible(val) {
if (val) {
//
this.loadSkillList();
console.log('WorkerApplyEdit - 弹窗打开,开始加载数据');
this.isInitializing = true;
//
Promise.all([
this.loadCityList(),
this.loadSkillList()
]).then(() => {
console.log('WorkerApplyEdit - 基础数据加载完成,开始处理已选择的数据');
// ID
this.processSelectedCity();
//
if (this.selectedCity) {
this.loadAreaList().then(() => {
// ID
this.processSelectedAreas();
this.isInitializing = false;
});
} else {
this.isInitializing = false;
}
}).catch(() => {
this.isInitializing = false;
});
} else {
//
this.resetDialogData();
}
},
selectedCity(val) {
this.form.cityPid = val;
this.updateCityNameCache();
//
if (!this.isInitializing && this.visible && this.cityList.length > 0) {
//
this.selectedAreas = [];
this.areaList = [];
this.loadAreaList();
}
},
selectedAreas(val) {
this.form.cityIds = JSON.stringify(val.map(String));
this.updateAreaNameCache();
}
},
methods: {
@ -237,15 +293,201 @@ export default {
}
},
//
handleAreaChange(value) {
if (value && value.length > 0) {
this.form.cityIds = value.join(',')
this.form.cityPid = value[0] //
} else {
this.form.cityIds = undefined
this.form.cityPid = undefined
//
loadCityList() {
console.log('WorkerApplyEdit - 开始加载城市列表');
const queryParams = {
parentId: 0 //
}
return datalist(queryParams).then(response => {
console.log('WorkerApplyEdit - 获取城市列表成功:', response);
if (response.code === 200) {
this.cityList = response.data || [];
console.log('WorkerApplyEdit - 城市列表:', this.cityList);
this.updateCityNameCache();
} else {
console.warn('WorkerApplyEdit - 获取城市列表失败,使用默认数据');
this.cityList = [
{ id: 1, title: '陕西省' },
{ id: 27, title: '上海市' },
{ id: 44, title: '湖南省' },
{ id: 52, title: '安徽省' }
];
}
return response;
}).catch((error) => {
console.error('WorkerApplyEdit - 获取城市列表异常:', error);
this.cityList = [
{ id: 1, title: '陕西省' },
{ id: 27, title: '上海市' },
{ id: 44, title: '湖南省' },
{ id: 52, title: '安徽省' }
];
return Promise.reject(error);
});
},
//
loadAreaList() {
console.log('WorkerApplyEdit - 开始加载地区列表,选中的城市:', this.selectedCity);
this.areaList = [];
this.areaNameCache = {};
if (!this.selectedCity) {
return Promise.resolve();
}
const queryParams = {
parentId: this.selectedCity
}
return datalist(queryParams).then(response => {
console.log(`WorkerApplyEdit - 获取城市${this.selectedCity}的地区数据成功:`, response);
if (response.code === 200) {
this.areaList = response.data || [];
}
console.log('WorkerApplyEdit - 地区数据加载完成,地区列表:', this.areaList);
this.updateAreaNameCache();
return response;
}).catch((error) => {
console.error(`WorkerApplyEdit - 获取城市${this.selectedCity}的地区数据失败:`, error);
// 使
let defaultAreas = [];
if (this.selectedCity === 1) {
defaultAreas = [
{ id: 2, title: '新城区' },
{ id: 5, title: '碑林区' },
{ id: 7, title: '莲湖区' },
{ id: 10, title: '灞桥区' },
{ id: 11, title: '未央区' },
{ id: 12, title: '雁塔区' },
{ id: 13, title: '阎良区' },
{ id: 14, title: '临潼区' },
{ id: 15, title: '长安区' },
{ id: 16, title: '高陵区' },
{ id: 17, title: '鄠邑区' }
];
} else if (this.selectedCity === 52) {
defaultAreas = [
{ id: 53, title: '瑶海区' },
{ id: 54, title: '庐阳区' },
{ id: 55, title: '蜀山区' },
{ id: 56, title: '包河区' },
{ id: 57, title: '经开区' },
{ id: 58, title: '高新区' }
];
}
this.areaList = defaultAreas;
this.updateAreaNameCache();
return Promise.resolve();
});
},
//
processSelectedCity() {
console.log('处理接单城市数据:', this.form.cityPid, '类型:', typeof this.form.cityPid);
this.selectedCity = undefined;
if (this.form.cityPid) {
try {
let cityId = this.form.cityPid;
if (typeof this.form.cityPid === 'string') {
cityId = parseInt(this.form.cityPid);
}
if (!isNaN(cityId) && cityId > 0) {
this.selectedCity = cityId;
console.log('解析后的接单城市:', this.selectedCity);
this.$nextTick(() => {
this.updateCityNameCache();
});
}
} catch (error) {
console.error('解析接单城市数据失败:', error);
this.selectedCity = undefined;
}
}
},
//
processSelectedAreas() {
console.log('处理接单地区数据:', this.form.cityIds, '类型:', typeof this.form.cityIds);
this.selectedAreas = [];
if (this.form.cityIds) {
try {
let areaIds = [];
if (typeof this.form.cityIds === 'string') {
if (this.form.cityIds.startsWith('[') && this.form.cityIds.endsWith(']')) {
areaIds = JSON.parse(this.form.cityIds);
} else {
areaIds = this.form.cityIds.split(',').map(id => id.trim()).filter(id => id);
}
} else if (Array.isArray(this.form.cityIds)) {
areaIds = this.form.cityIds;
} else if (typeof this.form.cityIds === 'number') {
areaIds = [this.form.cityIds];
}
this.selectedAreas = areaIds.map(id => parseInt(id)).filter(id => !isNaN(id) && id > 0);
console.log('解析后的接单地区:', this.selectedAreas);
this.$nextTick(() => {
this.updateAreaNameCache();
});
} catch (error) {
console.error('解析接单地区数据失败:', error);
this.selectedAreas = [];
}
}
},
//
updateCityNameCache() {
console.log('更新城市名称缓存,已选择城市:', this.selectedCity, '城市列表:', this.cityList);
this.cityNameCache = {};
if (this.selectedCity) {
const city = this.cityList.find(item => item.id === this.selectedCity);
if (city) {
this.cityNameCache[this.selectedCity] = city.title;
}
}
console.log('城市名称缓存:', this.cityNameCache);
},
//
updateAreaNameCache() {
console.log('更新地区名称缓存,已选择地区:', this.selectedAreas, '地区列表:', this.areaList);
this.areaNameCache = {};
this.selectedAreas.forEach(areaId => {
const area = this.areaList.find(item => item.id === areaId);
if (area) {
this.areaNameCache[areaId] = area.title;
}
});
console.log('地区名称缓存:', this.areaNameCache);
},
//
handleCityChange() {
console.log('城市选择变化:', this.selectedCity);
this.updateCityNameCache();
//
this.selectedAreas = [];
this.areaList = [];
//
if (this.selectedCity) {
this.loadAreaList();
}
},
//
handleAreaChange() {
console.log('地区选择变化:', this.selectedAreas);
this.updateAreaNameCache();
},
//
handleSkillChange(value) {
@ -292,6 +534,17 @@ export default {
this.reset()
this.$emit('update:visible', false)
},
//
resetDialogData() {
this.isInitializing = false;
this.cityList = [];
this.selectedCity = undefined;
this.cityNameCache = {};
this.areaList = [];
this.selectedAreas = [];
this.areaNameCache = {};
},
reset() {
this.form = {
id: undefined,
@ -314,6 +567,7 @@ export default {
}
this.selectedAreas = []
this.selectedSkills = []
this.resetDialogData()
this.resetForm("form")
}
}

View File

@ -388,6 +388,8 @@ export default {
},
/** 搜索按钮操作 */
handleQuery() {
//
this.closeAllDialogs();
this.queryParams.pageNum = 1
this.getList()
},
@ -512,12 +514,16 @@ export default {
},
/** 新增按钮操作 */
handleAdd() {
//
this.closeAllDialogs();
this.reset()
this.open = true
this.title = "添加师傅申请记录"
},
/** 修改按钮操作 */
handleUpdate(row) {
//
this.closeAllDialogs();
this.reset()
const id = row.id || this.ids
getWorkerApply(id).then(response => {
@ -547,6 +553,13 @@ export default {
forceRefreshSkills() {
this.$forceUpdate();
},
//
closeAllDialogs() {
this.open = false;
this.auditOpen = false;
this.batchAuditOpen = false;
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids
@ -565,6 +578,8 @@ export default {
},
/** 查看详情 */
handleViewDetail(row) {
//
this.closeAllDialogs();
this.auditForm = row;
this.auditTitle = "查看师傅申请详情";
this.auditOpen = true;
@ -572,6 +587,8 @@ export default {
/** 审核按钮操作 */
handleAudit(row) {
this.$modal.confirm(`是否确认审核师傅申请记录"${row.name}"`).then(() => {
//
this.closeAllDialogs();
this.auditForm = row;
this.auditTitle = "审核师傅申请记录";
this.auditOpen = true;
@ -595,6 +612,8 @@ export default {
return;
}
this.$modal.confirm(`是否确认批量审核选中的 ${ids.length} 条师傅申请记录?`).then(() => {
//
this.closeAllDialogs();
this.batchAuditOpen = true;
}).catch(() => {});
},
@ -610,7 +629,7 @@ export default {
},
/** 查看待审核 */
handleViewPending() {
this.queryParams.status = 1; //
this.queryParams.status = 0; //
this.queryParams.pageNum = 1;
this.getList();
},
@ -635,11 +654,11 @@ export default {
//
getStatusTagType(status) {
switch (status) {
case 1: //
case 0: //
return 'info';
case 2: //
case 1: //
return 'success';
case 3: //
case 2: //
return 'danger';
default:
return 'info';
@ -648,9 +667,9 @@ export default {
//
updateStatistics() {
this.statistics.total = this.WorkerApplyList.length;
this.statistics.pending = this.WorkerApplyList.filter(item => item.status === 1).length;
this.statistics.approved = this.WorkerApplyList.filter(item => item.status === 2).length;
this.statistics.rejected = this.WorkerApplyList.filter(item => item.status === 3).length;
this.statistics.pending = this.WorkerApplyList.filter(item => item.status === 0).length;
this.statistics.approved = this.WorkerApplyList.filter(item => item.status === 1).length;
this.statistics.rejected = this.WorkerApplyList.filter(item => item.status === 2).length;
}
}
}