feat(微信): 添加微信JS-SDK使用权限签名接口
- 新增微信JS-SDK使用权限签名接口,用于获取微信分享等操作所需的签名信息 - 在应用配置中添加相关URL的免登录访问权限 - 重构订单相关接口,将订单服务拆分为ITpNewOrderService和ITpOrderService两个接口
This commit is contained in:
@@ -24,6 +24,7 @@ import org.dromara.system.domain.vo.SysPictureVo;
|
|||||||
import org.dromara.system.domain.vo.SysUserVo;
|
import org.dromara.system.domain.vo.SysUserVo;
|
||||||
import org.dromara.system.service.ISysPictureService;
|
import org.dromara.system.service.ISysPictureService;
|
||||||
import org.dromara.system.service.ISysUserService;
|
import org.dromara.system.service.ISysUserService;
|
||||||
|
import org.dromara.web.utils.WxXcxUtils;
|
||||||
import org.dromara.work.domain.TpReceipt;
|
import org.dromara.work.domain.TpReceipt;
|
||||||
import org.dromara.work.domain.bo.OrderRankingBo;
|
import org.dromara.work.domain.bo.OrderRankingBo;
|
||||||
import org.dromara.work.domain.bo.TpProdBo;
|
import org.dromara.work.domain.bo.TpProdBo;
|
||||||
@@ -66,6 +67,8 @@ public class IndexController {
|
|||||||
|
|
||||||
private final IOrderService orderService;
|
private final IOrderService orderService;
|
||||||
|
|
||||||
|
private final ITpNewOrderService tpNewOrderService;
|
||||||
|
|
||||||
private final ISysPictureService sysPictureService;
|
private final ISysPictureService sysPictureService;
|
||||||
|
|
||||||
private final ITpProdService tpProdService;
|
private final ITpProdService tpProdService;
|
||||||
@@ -112,6 +115,14 @@ public class IndexController {
|
|||||||
return R.ok(tpProdService.queryById(id));
|
return R.ok(tpProdService.queryById(id));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据url获取微信JS-SDK使用权限签名
|
||||||
|
*/
|
||||||
|
@PostMapping("/wx/jssdk")
|
||||||
|
public R<Map<String, String>> getWxJssdk(@RequestParam String url) {
|
||||||
|
return R.ok(WxXcxUtils.generateSignature(url));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 银盛支付回调
|
* 银盛支付回调
|
||||||
* @param params
|
* @param params
|
||||||
@@ -211,7 +222,7 @@ public class IndexController {
|
|||||||
@GetMapping("/rankingListKF")
|
@GetMapping("/rankingListKF")
|
||||||
public TableDataInfo<OrderRankingVo> rankingListKF(OrderRankingBo bo, PageQuery pageQuery) {
|
public TableDataInfo<OrderRankingVo> rankingListKF(OrderRankingBo bo, PageQuery pageQuery) {
|
||||||
bo.setType(1);
|
bo.setType(1);
|
||||||
return tpOrderService.rankingList(bo, pageQuery);
|
return tpNewOrderService.rankingList(bo, pageQuery);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -221,7 +232,7 @@ public class IndexController {
|
|||||||
@GetMapping("/rankingListKFSum")
|
@GetMapping("/rankingListKFSum")
|
||||||
public R<OrderRankingSumVo> rankingListKFSum(OrderRankingBo bo) {
|
public R<OrderRankingSumVo> rankingListKFSum(OrderRankingBo bo) {
|
||||||
bo.setType(1);
|
bo.setType(1);
|
||||||
return R.ok(tpOrderService.rankingListKFSum(bo));
|
return R.ok(tpNewOrderService.rankingListKFSum(bo));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -231,7 +242,7 @@ public class IndexController {
|
|||||||
@GetMapping("/rankingListJS")
|
@GetMapping("/rankingListJS")
|
||||||
public TableDataInfo<OrderRankingVo> rankingListJS(OrderRankingBo bo, PageQuery pageQuery) {
|
public TableDataInfo<OrderRankingVo> rankingListJS(OrderRankingBo bo, PageQuery pageQuery) {
|
||||||
bo.setType(2);
|
bo.setType(2);
|
||||||
return tpOrderService.rankingListJS(bo, pageQuery);
|
return tpNewOrderService.rankingListJS(bo, pageQuery);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -241,7 +252,7 @@ public class IndexController {
|
|||||||
@GetMapping("/rankingListJSSum")
|
@GetMapping("/rankingListJSSum")
|
||||||
public R<OrderRankingSumVo> rankingListJSSum(OrderRankingBo bo) {
|
public R<OrderRankingSumVo> rankingListJSSum(OrderRankingBo bo) {
|
||||||
bo.setType(2);
|
bo.setType(2);
|
||||||
return R.ok(tpOrderService.rankingListJSSum(bo));
|
return R.ok(tpNewOrderService.rankingListJSSum(bo));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -286,7 +297,7 @@ public class IndexController {
|
|||||||
@SaCheckPermission("index:order:khRankingList")
|
@SaCheckPermission("index:order:khRankingList")
|
||||||
@GetMapping("/khRankingList")
|
@GetMapping("/khRankingList")
|
||||||
public TableDataInfo<OrderRankingVo> khRankingList(OrderRankingBo bo, PageQuery pageQuery) {
|
public TableDataInfo<OrderRankingVo> khRankingList(OrderRankingBo bo, PageQuery pageQuery) {
|
||||||
return tpOrderService.khRankingList(bo, pageQuery);
|
return tpNewOrderService.khRankingList(bo, pageQuery);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -295,7 +306,7 @@ public class IndexController {
|
|||||||
@SaCheckPermission("index:order:khRankingList")
|
@SaCheckPermission("index:order:khRankingList")
|
||||||
@GetMapping("/khRankingListSum")
|
@GetMapping("/khRankingListSum")
|
||||||
public R<OrderRankingSumVo> khRankingListSum(OrderRankingBo bo) {
|
public R<OrderRankingSumVo> khRankingListSum(OrderRankingBo bo) {
|
||||||
return R.ok(tpOrderService.khRankingListSum(bo));
|
return R.ok(tpNewOrderService.khRankingListSum(bo));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -0,0 +1,90 @@
|
|||||||
|
package org.dromara.web.utils;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.RandomUtil;
|
||||||
|
import cn.hutool.crypto.digest.DigestUtil;
|
||||||
|
import cn.hutool.http.HttpRequest;
|
||||||
|
import cn.hutool.http.HttpUtil;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 微信小程序工具类
|
||||||
|
* @author Maosw
|
||||||
|
*/
|
||||||
|
public class WxXcxUtils {
|
||||||
|
|
||||||
|
private static final String APPID = "wx35c33a8a60d06fa9";
|
||||||
|
private static final String SECRET = "0c96a172d7bbe2bd8aa7dcee4ccbfb46";
|
||||||
|
private static final String TICKET_URL = "https://api.weixin.qq.com/cgi-bin/ticket/getticket";
|
||||||
|
private static final String TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取access_token
|
||||||
|
*/
|
||||||
|
public static String getAccessToken(){
|
||||||
|
String url = TOKEN_URL + "?grant_type=client_credential&appid=" + APPID + "&secret=" + SECRET;
|
||||||
|
String result = HttpUtil.get(url);
|
||||||
|
JSONObject jsonObject = JSONObject.parseObject(result);
|
||||||
|
return jsonObject.getString("access_token");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取jsapi_ticket
|
||||||
|
*/
|
||||||
|
public static String getJsapiTicket() {
|
||||||
|
String accessToken = getAccessToken();
|
||||||
|
String url = TICKET_URL + "?access_token=" + accessToken + "&type=jsapi";
|
||||||
|
String result = HttpUtil.get(url);
|
||||||
|
JSONObject jsonObject = JSONObject.parseObject(result);
|
||||||
|
return jsonObject.getString("ticket");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成签名
|
||||||
|
* @param url 当前网页的URL
|
||||||
|
* @return 签名信息
|
||||||
|
*/
|
||||||
|
public static Map<String, String> generateSignature(String url) {
|
||||||
|
if (StringUtils.isEmpty(url)) {
|
||||||
|
throw new IllegalArgumentException("URL不能为空");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取jsapi_ticket
|
||||||
|
String jsapiTicket = getJsapiTicket();
|
||||||
|
|
||||||
|
// 生成随机字符串
|
||||||
|
String nonceStr = RandomUtil.randomString(16);
|
||||||
|
|
||||||
|
// 生成时间戳
|
||||||
|
String timestamp = String.valueOf(System.currentTimeMillis() / 1000);
|
||||||
|
|
||||||
|
// 准备签名参数
|
||||||
|
Map<String, String> params = new TreeMap<>();
|
||||||
|
params.put("jsapi_ticket", jsapiTicket);
|
||||||
|
params.put("noncestr", nonceStr);
|
||||||
|
params.put("timestamp", timestamp);
|
||||||
|
params.put("url", url);
|
||||||
|
|
||||||
|
// 拼接字符串
|
||||||
|
StringBuilder stringBuilder = new StringBuilder();
|
||||||
|
for (Map.Entry<String, String> entry : params.entrySet()) {
|
||||||
|
stringBuilder.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
|
||||||
|
}
|
||||||
|
String string1 = stringBuilder.substring(0, stringBuilder.length() - 1);
|
||||||
|
|
||||||
|
// 生成签名
|
||||||
|
String signature = DigestUtil.sha1Hex(string1);
|
||||||
|
|
||||||
|
// 返回结果
|
||||||
|
Map<String, String> result = new HashMap<>();
|
||||||
|
result.put("timestamp", timestamp);
|
||||||
|
result.put("nonceStr", nonceStr);
|
||||||
|
result.put("signature", signature);
|
||||||
|
result.put("appId", APPID);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -128,6 +128,7 @@ security:
|
|||||||
- /notifyCheckSign
|
- /notifyCheckSign
|
||||||
- /system/dict/data/**
|
- /system/dict/data/**
|
||||||
- /work/panorama/listByOrderId
|
- /work/panorama/listByOrderId
|
||||||
|
- /wx/jssdk
|
||||||
|
|
||||||
# 多租户配置
|
# 多租户配置
|
||||||
tenant:
|
tenant:
|
||||||
|
|||||||
@@ -1,61 +1,61 @@
|
|||||||
#错误消息
|
#????
|
||||||
not.null=* 必须填写
|
not.null=* ????
|
||||||
user.jcaptcha.error=验证码错误
|
user.jcaptcha.error=?????
|
||||||
user.jcaptcha.expire=验证码已失效
|
user.jcaptcha.expire=??????
|
||||||
user.not.exists=对不起, 您的账号:{0} 不存在.
|
user.not.exists=???, ?????{0} ???.
|
||||||
user.password.not.match=用户不存在/密码错误
|
user.password.not.match=?????/????
|
||||||
user.password.retry.limit.count=密码输入错误{0}次
|
user.password.retry.limit.count=??????{0}?
|
||||||
user.password.retry.limit.exceed=密码输入错误{0}次,帐户锁定{1}分钟
|
user.password.retry.limit.exceed=??????{0}??????{1}??
|
||||||
user.password.delete=对不起,您的账号:{0} 已被删除
|
user.password.delete=?????????{0} ????
|
||||||
user.blocked=对不起,您的账号:{0} 已禁用,请联系管理员
|
user.blocked=?????????{0} ??????????
|
||||||
role.blocked=角色已封禁,请联系管理员
|
role.blocked=????????????
|
||||||
user.logout.success=退出成功
|
user.logout.success=????
|
||||||
length.not.valid=长度必须在{min}到{max}个字符之间
|
length.not.valid=?????{min}?{max}?????
|
||||||
user.username.not.blank=用户名不能为空
|
user.username.not.blank=???????
|
||||||
user.username.not.valid=* 2到20个汉字、字母、数字或下划线组成,且必须以非数字开头
|
user.username.not.valid=* 2?20?????????????????????????
|
||||||
user.username.length.valid=账户长度必须在{min}到{max}个字符之间
|
user.username.length.valid=???????{min}?{max}?????
|
||||||
user.password.not.blank=用户密码不能为空
|
user.password.not.blank=????????
|
||||||
user.password.length.valid=用户密码长度必须在{min}到{max}个字符之间
|
user.password.length.valid=?????????{min}?{max}?????
|
||||||
user.password.not.valid=* 5-50个字符
|
user.password.not.valid=* 5-50???
|
||||||
user.email.not.valid=邮箱格式错误
|
user.email.not.valid=??????
|
||||||
user.email.not.blank=邮箱不能为空
|
user.email.not.blank=??????
|
||||||
user.phonenumber.not.blank=用户手机号不能为空
|
user.phonenumber.not.blank=?????????
|
||||||
user.mobile.phone.number.not.valid=手机号格式错误
|
user.mobile.phone.number.not.valid=???????
|
||||||
user.login.success=登录成功
|
user.login.success=????
|
||||||
user.register.success=注册成功
|
user.register.success=????
|
||||||
user.register.save.error=保存用户 {0} 失败,注册账号已存在
|
user.register.save.error=???? {0} ??????????
|
||||||
user.register.error=注册失败,请联系系统管理人员
|
user.register.error=??????????????
|
||||||
user.notfound=请重新登录
|
user.notfound=?????
|
||||||
user.forcelogout=管理员强制退出,请重新登录
|
user.forcelogout=?????????????
|
||||||
user.unknown.error=未知错误,请重新登录
|
user.unknown.error=??????????
|
||||||
auth.grant.type.error=认证权限类型错误
|
auth.grant.type.error=????????
|
||||||
auth.grant.type.blocked=认证权限类型已禁用
|
auth.grant.type.blocked=?????????
|
||||||
auth.grant.type.not.blank=认证权限类型不能为空
|
auth.grant.type.not.blank=??????????
|
||||||
auth.clientid.not.blank=认证客户端id不能为空
|
auth.clientid.not.blank=?????id????
|
||||||
##文件上传消息
|
##??????
|
||||||
upload.exceed.maxSize=上传的文件大小超出限制的文件大小!<br/>允许的文件最大大小是:{0}MB!
|
upload.exceed.maxSize=?????????????????<br/>???????????{0}MB?
|
||||||
upload.filename.exceed.length=上传的文件名最长{0}个字符
|
upload.filename.exceed.length=????????{0}???
|
||||||
##权限
|
##??
|
||||||
no.permission=您没有数据的权限,请联系管理员添加权限 [{0}]
|
no.permission=??????????????????? [{0}]
|
||||||
no.create.permission=您没有创建数据的权限,请联系管理员添加权限 [{0}]
|
no.create.permission=????????????????????? [{0}]
|
||||||
no.update.permission=您没有修改数据的权限,请联系管理员添加权限 [{0}]
|
no.update.permission=????????????????????? [{0}]
|
||||||
no.delete.permission=您没有删除数据的权限,请联系管理员添加权限 [{0}]
|
no.delete.permission=????????????????????? [{0}]
|
||||||
no.export.permission=您没有导出数据的权限,请联系管理员添加权限 [{0}]
|
no.export.permission=????????????????????? [{0}]
|
||||||
no.view.permission=您没有查看数据的权限,请联系管理员添加权限 [{0}]
|
no.view.permission=????????????????????? [{0}]
|
||||||
repeat.submit.message=不允许重复提交,请稍候再试
|
repeat.submit.message=?????????????
|
||||||
rate.limiter.message=访问过于频繁,请稍候再试
|
rate.limiter.message=????????????
|
||||||
sms.code.not.blank=短信验证码不能为空
|
sms.code.not.blank=?????????
|
||||||
sms.code.retry.limit.count=短信验证码输入错误{0}次
|
sms.code.retry.limit.count=?????????{0}?
|
||||||
sms.code.retry.limit.exceed=短信验证码输入错误{0}次,帐户锁定{1}分钟
|
sms.code.retry.limit.exceed=?????????{0}??????{1}??
|
||||||
email.code.not.blank=邮箱验证码不能为空
|
email.code.not.blank=?????????
|
||||||
email.code.retry.limit.count=邮箱验证码输入错误{0}次
|
email.code.retry.limit.count=?????????{0}?
|
||||||
email.code.retry.limit.exceed=邮箱验证码输入错误{0}次,帐户锁定{1}分钟
|
email.code.retry.limit.exceed=?????????{0}??????{1}??
|
||||||
xcx.code.not.blank=小程序[code]不能为空
|
xcx.code.not.blank=???[code]????
|
||||||
social.source.not.blank=第三方登录平台[source]不能为空
|
social.source.not.blank=???????[source]????
|
||||||
social.code.not.blank=第三方登录平台[code]不能为空
|
social.code.not.blank=???????[code]????
|
||||||
social.state.not.blank=第三方登录平台[state]不能为空
|
social.state.not.blank=???????[state]????
|
||||||
##租户
|
##??
|
||||||
tenant.number.not.blank=租户编号不能为空
|
tenant.number.not.blank=????????
|
||||||
tenant.not.exists=对不起, 您的租户不存在,请联系管理员
|
tenant.not.exists=???, ??????????????
|
||||||
tenant.blocked=对不起,您的租户已禁用,请联系管理员
|
tenant.blocked=??????????????????
|
||||||
tenant.expired=对不起,您的租户已过期,请联系管理员
|
tenant.expired=??????????????????
|
||||||
|
|||||||
@@ -1,61 +1,61 @@
|
|||||||
#错误消息
|
#????
|
||||||
not.null=* 必须填写
|
not.null=* ????
|
||||||
user.jcaptcha.error=验证码错误
|
user.jcaptcha.error=?????
|
||||||
user.jcaptcha.expire=验证码已失效
|
user.jcaptcha.expire=??????
|
||||||
user.not.exists=对不起, 您的账号:{0} 不存在.
|
user.not.exists=???, ?????{0} ???.
|
||||||
user.password.not.match=用户不存在/密码错误
|
user.password.not.match=?????/????
|
||||||
user.password.retry.limit.count=密码输入错误{0}次
|
user.password.retry.limit.count=??????{0}?
|
||||||
user.password.retry.limit.exceed=密码输入错误{0}次,帐户锁定{1}分钟
|
user.password.retry.limit.exceed=??????{0}??????{1}??
|
||||||
user.password.delete=对不起,您的账号:{0} 已被删除
|
user.password.delete=?????????{0} ????
|
||||||
user.blocked=对不起,您的账号:{0} 已禁用,请联系管理员
|
user.blocked=?????????{0} ??????????
|
||||||
role.blocked=角色已封禁,请联系管理员
|
role.blocked=????????????
|
||||||
user.logout.success=退出成功
|
user.logout.success=????
|
||||||
length.not.valid=长度必须在{min}到{max}个字符之间
|
length.not.valid=?????{min}?{max}?????
|
||||||
user.username.not.blank=用户名不能为空
|
user.username.not.blank=???????
|
||||||
user.username.not.valid=* 2到20个汉字、字母、数字或下划线组成,且必须以非数字开头
|
user.username.not.valid=* 2?20?????????????????????????
|
||||||
user.username.length.valid=账户长度必须在{min}到{max}个字符之间
|
user.username.length.valid=???????{min}?{max}?????
|
||||||
user.password.not.blank=用户密码不能为空
|
user.password.not.blank=????????
|
||||||
user.password.length.valid=用户密码长度必须在{min}到{max}个字符之间
|
user.password.length.valid=?????????{min}?{max}?????
|
||||||
user.password.not.valid=* 5-50个字符
|
user.password.not.valid=* 5-50???
|
||||||
user.email.not.valid=邮箱格式错误
|
user.email.not.valid=??????
|
||||||
user.email.not.blank=邮箱不能为空
|
user.email.not.blank=??????
|
||||||
user.phonenumber.not.blank=用户手机号不能为空
|
user.phonenumber.not.blank=?????????
|
||||||
user.mobile.phone.number.not.valid=手机号格式错误
|
user.mobile.phone.number.not.valid=???????
|
||||||
user.login.success=登录成功
|
user.login.success=????
|
||||||
user.register.success=注册成功
|
user.register.success=????
|
||||||
user.register.save.error=保存用户 {0} 失败,注册账号已存在
|
user.register.save.error=???? {0} ??????????
|
||||||
user.register.error=注册失败,请联系系统管理人员
|
user.register.error=??????????????
|
||||||
user.notfound=请重新登录
|
user.notfound=?????
|
||||||
user.forcelogout=管理员强制退出,请重新登录
|
user.forcelogout=?????????????
|
||||||
user.unknown.error=未知错误,请重新登录
|
user.unknown.error=??????????
|
||||||
auth.grant.type.error=认证权限类型错误
|
auth.grant.type.error=????????
|
||||||
auth.grant.type.blocked=认证权限类型已禁用
|
auth.grant.type.blocked=?????????
|
||||||
auth.grant.type.not.blank=认证权限类型不能为空
|
auth.grant.type.not.blank=??????????
|
||||||
auth.clientid.not.blank=认证客户端id不能为空
|
auth.clientid.not.blank=?????id????
|
||||||
##文件上传消息
|
##??????
|
||||||
upload.exceed.maxSize=上传的文件大小超出限制的文件大小!<br/>允许的文件最大大小是:{0}MB!
|
upload.exceed.maxSize=?????????????????<br/>???????????{0}MB?
|
||||||
upload.filename.exceed.length=上传的文件名最长{0}个字符
|
upload.filename.exceed.length=????????{0}???
|
||||||
##权限
|
##??
|
||||||
no.permission=您没有数据的权限,请联系管理员添加权限 [{0}]
|
no.permission=??????????????????? [{0}]
|
||||||
no.create.permission=您没有创建数据的权限,请联系管理员添加权限 [{0}]
|
no.create.permission=????????????????????? [{0}]
|
||||||
no.update.permission=您没有修改数据的权限,请联系管理员添加权限 [{0}]
|
no.update.permission=????????????????????? [{0}]
|
||||||
no.delete.permission=您没有删除数据的权限,请联系管理员添加权限 [{0}]
|
no.delete.permission=????????????????????? [{0}]
|
||||||
no.export.permission=您没有导出数据的权限,请联系管理员添加权限 [{0}]
|
no.export.permission=????????????????????? [{0}]
|
||||||
no.view.permission=您没有查看数据的权限,请联系管理员添加权限 [{0}]
|
no.view.permission=????????????????????? [{0}]
|
||||||
repeat.submit.message=不允许重复提交,请稍候再试
|
repeat.submit.message=?????????????
|
||||||
rate.limiter.message=访问过于频繁,请稍候再试
|
rate.limiter.message=????????????
|
||||||
sms.code.not.blank=短信验证码不能为空
|
sms.code.not.blank=?????????
|
||||||
sms.code.retry.limit.count=短信验证码输入错误{0}次
|
sms.code.retry.limit.count=?????????{0}?
|
||||||
sms.code.retry.limit.exceed=短信验证码输入错误{0}次,帐户锁定{1}分钟
|
sms.code.retry.limit.exceed=?????????{0}??????{1}??
|
||||||
email.code.not.blank=邮箱验证码不能为空
|
email.code.not.blank=?????????
|
||||||
email.code.retry.limit.count=邮箱验证码输入错误{0}次
|
email.code.retry.limit.count=?????????{0}?
|
||||||
email.code.retry.limit.exceed=邮箱验证码输入错误{0}次,帐户锁定{1}分钟
|
email.code.retry.limit.exceed=?????????{0}??????{1}??
|
||||||
xcx.code.not.blank=小程序[code]不能为空
|
xcx.code.not.blank=???[code]????
|
||||||
social.source.not.blank=第三方登录平台[source]不能为空
|
social.source.not.blank=???????[source]????
|
||||||
social.code.not.blank=第三方登录平台[code]不能为空
|
social.code.not.blank=???????[code]????
|
||||||
social.state.not.blank=第三方登录平台[state]不能为空
|
social.state.not.blank=???????[state]????
|
||||||
##租户
|
##??
|
||||||
tenant.number.not.blank=租户编号不能为空
|
tenant.number.not.blank=????????
|
||||||
tenant.not.exists=对不起, 您的租户不存在,请联系管理员
|
tenant.not.exists=???, ??????????????
|
||||||
tenant.blocked=对不起,您的租户已禁用,请联系管理员
|
tenant.blocked=??????????????????
|
||||||
tenant.expired=对不起,您的租户已过期,请联系管理员
|
tenant.expired=??????????????????
|
||||||
|
|||||||
@@ -0,0 +1,69 @@
|
|||||||
|
package org.dromara.work.service;
|
||||||
|
|
||||||
|
import com.github.yulichang.base.MPJBaseService;
|
||||||
|
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||||
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||||
|
import org.dromara.work.domain.TpOrder;
|
||||||
|
import org.dromara.work.domain.bo.OrderRankingBo;
|
||||||
|
import org.dromara.work.domain.bo.TpOrderBo;
|
||||||
|
import org.dromara.work.domain.vo.*;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单管理Service接口
|
||||||
|
*
|
||||||
|
* @author Maosw
|
||||||
|
* @date 2024-08-12
|
||||||
|
*/
|
||||||
|
public interface ITpNewOrderService extends MPJBaseService<TpOrder> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 客服排行榜
|
||||||
|
* @param bo
|
||||||
|
* @param pageQuery
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
TableDataInfo<OrderRankingVo> rankingList(OrderRankingBo bo, PageQuery pageQuery);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 技术排行榜
|
||||||
|
* @param bo
|
||||||
|
* @param pageQuery
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
TableDataInfo<OrderRankingVo> rankingListJS(OrderRankingBo bo, PageQuery pageQuery);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 客服排行榜统计
|
||||||
|
* @param bo
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
OrderRankingSumVo rankingListKFSum(OrderRankingBo bo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 技术排行榜统计
|
||||||
|
* @param bo
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
OrderRankingSumVo rankingListJSSum(OrderRankingBo bo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 客户下单排行榜
|
||||||
|
* @param bo
|
||||||
|
* @param pageQuery
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
TableDataInfo<OrderRankingVo> khRankingList(OrderRankingBo bo, PageQuery pageQuery);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 客户下单排行榜统计
|
||||||
|
* @param bo
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
OrderRankingSumVo khRankingListSum(OrderRankingBo bo);
|
||||||
|
|
||||||
|
}
|
||||||
@@ -178,59 +178,6 @@ public interface ITpOrderService extends MPJBaseService<TpOrder> {
|
|||||||
*/
|
*/
|
||||||
IndexSumVo getJsTarget();
|
IndexSumVo getJsTarget();
|
||||||
|
|
||||||
/**
|
|
||||||
* 客服排行榜
|
|
||||||
* @param bo
|
|
||||||
* @param pageQuery
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
TableDataInfo<OrderRankingVo> rankingList(OrderRankingBo bo, PageQuery pageQuery);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 技术排行榜
|
|
||||||
* @param bo
|
|
||||||
* @param pageQuery
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
TableDataInfo<OrderRankingVo> rankingListJS(OrderRankingBo bo, PageQuery pageQuery);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 客服排行榜统计
|
|
||||||
* @param bo
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
OrderRankingSumVo rankingListKFSum(OrderRankingBo bo);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 技术排行榜统计
|
|
||||||
* @param bo
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
OrderRankingSumVo rankingListJSSum(OrderRankingBo bo);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 客户下单排行榜
|
|
||||||
* @param bo
|
|
||||||
* @param pageQuery
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
TableDataInfo<OrderRankingVo> khRankingList(OrderRankingBo bo, PageQuery pageQuery);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 客户下单排行榜统计
|
|
||||||
* @param bo
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
OrderRankingSumVo khRankingListSum(OrderRankingBo bo);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int getDataScope();
|
|
||||||
|
|
||||||
List<Long> getDeptIds();
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 导出客服订单
|
* 导出客服订单
|
||||||
|
|||||||
@@ -0,0 +1,325 @@
|
|||||||
|
package org.dromara.work.service.impl;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.github.yulichang.base.MPJBaseServiceImpl;
|
||||||
|
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.dromara.common.core.domain.dto.RoleDTO;
|
||||||
|
import org.dromara.common.core.domain.model.LoginUser;
|
||||||
|
import org.dromara.common.core.utils.StringUtils;
|
||||||
|
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||||
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||||
|
import org.dromara.common.satoken.utils.LoginHelper;
|
||||||
|
import org.dromara.system.domain.SysDept;
|
||||||
|
import org.dromara.system.domain.SysRoleDept;
|
||||||
|
import org.dromara.system.domain.SysUser;
|
||||||
|
import org.dromara.system.mapper.SysDeptMapper;
|
||||||
|
import org.dromara.system.mapper.SysRoleDeptMapper;
|
||||||
|
import org.dromara.system.mapper.SysRoleMapper;
|
||||||
|
import org.dromara.system.mapper.SysUserMapper;
|
||||||
|
import org.dromara.work.domain.TpClient;
|
||||||
|
import org.dromara.work.domain.TpOrder;
|
||||||
|
import org.dromara.work.domain.bo.OrderRankingBo;
|
||||||
|
import org.dromara.work.domain.vo.OrderRankingSumVo;
|
||||||
|
import org.dromara.work.domain.vo.OrderRankingVo;
|
||||||
|
import org.dromara.work.mapper.TpClientMapper;
|
||||||
|
import org.dromara.work.mapper.TpOrderMapper;
|
||||||
|
import org.dromara.work.service.ITpNewOrderService;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author: Maosw
|
||||||
|
*/
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@Service
|
||||||
|
public class TpNewOrderServiceImpl extends MPJBaseServiceImpl<TpOrderMapper, TpOrder> implements ITpNewOrderService {
|
||||||
|
|
||||||
|
private final TpOrderMapper baseMapper;
|
||||||
|
|
||||||
|
private final SysUserMapper sysUserMapper;
|
||||||
|
|
||||||
|
private final SysDeptMapper deptMapper;
|
||||||
|
|
||||||
|
private final SysRoleDeptMapper roleDeptMapper;
|
||||||
|
|
||||||
|
private final TpClientMapper clientMapper;
|
||||||
|
|
||||||
|
|
||||||
|
private MPJLambdaWrapper<TpOrder> buildQueryRankingMPJWrapper(OrderRankingBo bo) {
|
||||||
|
LoginUser loginUser = LoginHelper.getLoginUser();
|
||||||
|
MPJLambdaWrapper<TpOrder> lqw = new MPJLambdaWrapper<>();
|
||||||
|
if(bo.getDeptIds()!= null && bo.getDeptIds().size() > 0){
|
||||||
|
if(bo.getType() == 1){
|
||||||
|
lqw.in(TpOrder::getDeptId,bo.getDeptIds());
|
||||||
|
} else if (bo.getType() == 2) {
|
||||||
|
lqw.in(TpOrder::getDeptIdJs,bo.getDeptIds());
|
||||||
|
}
|
||||||
|
}else {
|
||||||
|
int scope = getDataScope();
|
||||||
|
if(scope == 2){
|
||||||
|
List<Long> deptIds = getDeptIds();
|
||||||
|
if(bo.getType() == 1){
|
||||||
|
lqw.in(TpOrder::getDeptId,deptIds);
|
||||||
|
} else if (bo.getType() == 2) {
|
||||||
|
lqw.in(TpOrder::getDeptIdJs,deptIds);
|
||||||
|
}
|
||||||
|
}else if(scope == 3){
|
||||||
|
if(bo.getType() == 1){
|
||||||
|
lqw.eq(TpOrder::getDeptId,loginUser.getDeptId());
|
||||||
|
} else if (bo.getType() == 2) {
|
||||||
|
lqw.eq(TpOrder::getDeptIdJs,loginUser.getDeptId());
|
||||||
|
}
|
||||||
|
}else if(scope == 4){
|
||||||
|
List<Long> deptIds = deptMapper.selectList(new LambdaQueryWrapper<SysDept>().like(SysDept::getAncestors, loginUser.getDeptId())).stream().map(SysDept::getDeptId).collect(Collectors.toList());
|
||||||
|
deptIds.add(loginUser.getDeptId());
|
||||||
|
if(bo.getType() == 1){
|
||||||
|
lqw.in(TpOrder::getDeptId,deptIds);
|
||||||
|
} else if (bo.getType() == 2) {
|
||||||
|
lqw.in(TpOrder::getDeptIdJs,deptIds);
|
||||||
|
}
|
||||||
|
}else if(scope == 5){
|
||||||
|
if(bo.getType() == 1){
|
||||||
|
lqw.eq(TpOrder::getSid,loginUser.getUserId());
|
||||||
|
} else if (bo.getType() == 2) {
|
||||||
|
lqw.eq(TpOrder::getBid,loginUser.getUserId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
lqw.like(StringUtils.isNotBlank(bo.getUserName()), SysUser::getNickName, bo.getUserName());
|
||||||
|
lqw.like(StringUtils.isNotBlank(bo.getRealName()), SysUser::getRealName, bo.getRealName());
|
||||||
|
lqw.between(bo.getStartTime() != null && bo.getEndTime() != null,
|
||||||
|
TpOrder::getAddTime ,bo.getStartTime(), bo.getEndTime());
|
||||||
|
return lqw;
|
||||||
|
}
|
||||||
|
|
||||||
|
private MPJLambdaWrapper<TpOrder> buildKHRankingMPJWrapper(OrderRankingBo bo) {
|
||||||
|
MPJLambdaWrapper<TpOrder> lqw = new MPJLambdaWrapper<>();
|
||||||
|
lqw.eq(StringUtils.isNotBlank(bo.getUserName()), TpClient::getCode, bo.getUserName());
|
||||||
|
lqw.eq(StringUtils.isNotBlank(bo.getRealName()), TpClient::getName, bo.getRealName());
|
||||||
|
lqw.between(bo.getStartTime() != null && bo.getEndTime() != null,
|
||||||
|
TpOrder::getAddTime ,bo.getStartTime(), bo.getEndTime());
|
||||||
|
return lqw;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 客服排行榜
|
||||||
|
*
|
||||||
|
* @param bo
|
||||||
|
* @param pageQuery
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public TableDataInfo<OrderRankingVo> rankingList(OrderRankingBo bo, PageQuery pageQuery) {
|
||||||
|
/*DateTime dateTime = new DateTime(bo.getMonth(), DatePattern.NORM_MONTH_FORMAT);
|
||||||
|
Month month1 = dateTime.monthEnum();
|
||||||
|
int lastDay = month1.getLastDay(false);
|
||||||
|
bo.setStartTime(bo.getMonth() + "-01 00:00:00");
|
||||||
|
bo.setEndTime(bo.getMonth() + "-" + lastDay + " 23:59:59");*/
|
||||||
|
|
||||||
|
MPJLambdaWrapper<TpOrder> wrapper = buildQueryRankingMPJWrapper(bo)
|
||||||
|
.selectAs(SysUser::getNickName,OrderRankingVo::getUserName)
|
||||||
|
.selectAs(SysUser::getRealName,OrderRankingVo::getRealName)
|
||||||
|
.selectAs(SysDept::getDeptName,OrderRankingVo::getDeptName)
|
||||||
|
.selectAs("count(1)",OrderRankingVo::getOrderNum)
|
||||||
|
.selectAs("sum(price)",OrderRankingVo::getTotalPerformance)
|
||||||
|
.selectAs("sum(pay_price - kfpay)",OrderRankingVo::getCompletionAmount)
|
||||||
|
.selectAs("sum(end_price)",OrderRankingVo::getUnpaidAmount)
|
||||||
|
.selectAs("concat(round(sum(pay_price)/(SELECT CASE WHEN m.gongsi = 0 THEN m.geren ELSE m.gongsi END AS result_field FROM tp_month m WHERE m.sid = t.sid AND m.`month` = '" + bo.getMonth() + "') * 100),'%')",OrderRankingVo::getTargetCompletionRate)
|
||||||
|
.selectAs("concat(round(sum(end_price)/sum(price) * 100),'%')",OrderRankingVo::getDeadOrderRate)
|
||||||
|
.leftJoin(SysUser.class,SysUser::getUserId,TpOrder::getSid)
|
||||||
|
.leftJoin(SysDept.class,SysDept::getDeptId,SysUser::getDeptId)
|
||||||
|
.eq(TpOrder::getIsDel,1)
|
||||||
|
// .ne(TpOrder::getPayState,1)
|
||||||
|
.groupBy(TpOrder::getSid);
|
||||||
|
|
||||||
|
wrapper.orderBy(bo.getSort() == 1,bo.getIsAsc(),OrderRankingVo::getOrderNum);
|
||||||
|
wrapper.orderBy(bo.getSort() == 2,bo.getIsAsc(),OrderRankingVo::getTotalPerformance);
|
||||||
|
wrapper.orderBy(bo.getSort() == 3,bo.getIsAsc(),OrderRankingVo::getCompletionAmount);
|
||||||
|
wrapper.orderBy(bo.getSort() == 4,bo.getIsAsc(),OrderRankingVo::getUnpaidAmount);
|
||||||
|
wrapper.orderBy(bo.getSort() == 5,bo.getIsAsc(),OrderRankingVo::getTargetCompletionRate);
|
||||||
|
wrapper.orderBy(bo.getSort() == 6,bo.getIsAsc(),OrderRankingVo::getDeadOrderRate);
|
||||||
|
|
||||||
|
IPage<OrderRankingVo> listPage = baseMapper.selectJoinPage(new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize()), OrderRankingVo.class, wrapper);
|
||||||
|
return TableDataInfo.build(listPage);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 技术排行榜
|
||||||
|
*
|
||||||
|
* @param bo
|
||||||
|
* @param pageQuery
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public TableDataInfo<OrderRankingVo> rankingListJS(OrderRankingBo bo, PageQuery pageQuery) {
|
||||||
|
MPJLambdaWrapper<TpOrder> wrapper = buildQueryRankingMPJWrapper(bo)
|
||||||
|
.selectAs(SysUser::getNickName,OrderRankingVo::getUserName)
|
||||||
|
.selectAs(SysUser::getRealName,OrderRankingVo::getRealName)
|
||||||
|
.selectAs(SysDept::getDeptName,OrderRankingVo::getDeptName)
|
||||||
|
.selectAs("count(1)",OrderRankingVo::getOrderNum)
|
||||||
|
.selectAs("sum(js_price)",OrderRankingVo::getTotalPerformance)
|
||||||
|
.selectAs("sum(js_pay_price)",OrderRankingVo::getCompletionAmount)
|
||||||
|
.selectAs("sum(js_price) - sum(js_pay_price)",OrderRankingVo::getUnpaidAmount)
|
||||||
|
.selectAs("concat(round(sum(js_pay_price)/sum(js_price) * 100),'%')",OrderRankingVo::getTargetCompletionRate)
|
||||||
|
.selectAs("concat(round((sum(js_price) - sum(js_pay_price))/sum(js_price) * 100),'%')",OrderRankingVo::getDeadOrderRate)
|
||||||
|
.leftJoin(SysUser.class,SysUser::getUserId,TpOrder::getBid)
|
||||||
|
.leftJoin(SysDept.class,SysDept::getDeptId,SysUser::getDeptId)
|
||||||
|
.eq(TpOrder::getIsDel,1)
|
||||||
|
.groupBy(TpOrder::getBid);
|
||||||
|
|
||||||
|
wrapper.isNotNull(TpOrder::getBid);
|
||||||
|
wrapper.orderBy(bo.getSort() == 1,bo.getIsAsc(),OrderRankingVo::getOrderNum);
|
||||||
|
wrapper.orderBy(bo.getSort() == 2,bo.getIsAsc(),OrderRankingVo::getTotalPerformance);
|
||||||
|
wrapper.orderBy(bo.getSort() == 3,bo.getIsAsc(),OrderRankingVo::getCompletionAmount);
|
||||||
|
wrapper.orderBy(bo.getSort() == 4,bo.getIsAsc(),OrderRankingVo::getUnpaidAmount);
|
||||||
|
wrapper.orderBy(bo.getSort() == 5,bo.getIsAsc(),OrderRankingVo::getTargetCompletionRate);
|
||||||
|
wrapper.orderBy(bo.getSort() == 6,bo.getIsAsc(),OrderRankingVo::getDeadOrderRate);
|
||||||
|
|
||||||
|
IPage<OrderRankingVo> listPage = baseMapper.selectJoinPage(new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize()), OrderRankingVo.class, wrapper);
|
||||||
|
return TableDataInfo.build(listPage);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 客服排行榜统计
|
||||||
|
*
|
||||||
|
* @param bo
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public OrderRankingSumVo rankingListKFSum(OrderRankingBo bo) {
|
||||||
|
Long totalNum = sysUserMapper.selectCount(new LambdaQueryWrapper<SysUser>().eq(SysUser::getIdentity, 3));
|
||||||
|
MPJLambdaWrapper<TpOrder> wrapper = buildQueryRankingMPJWrapper(bo)
|
||||||
|
.selectAs("count(1)",OrderRankingSumVo::getTotalOrderNum)
|
||||||
|
.selectAs("sum(price)",OrderRankingSumVo::getTotalPerformance)
|
||||||
|
.selectAs("sum(pay_price - kfpay)",OrderRankingSumVo::getTotalPaidAmount)
|
||||||
|
.selectAs("concat(round(sum(pay_price - kfpay)/sum(price) * 100),'%')",OrderRankingSumVo::getTotalCompletionRate)
|
||||||
|
.leftJoin(SysUser.class,SysUser::getUserId,TpOrder::getSid)
|
||||||
|
.leftJoin(SysDept.class,SysDept::getDeptId,SysUser::getDeptId)
|
||||||
|
.eq(TpOrder::getIsDel,1);
|
||||||
|
// .ne(TpOrder::getPayState,1);
|
||||||
|
|
||||||
|
OrderRankingSumVo orderRankingSumVo = baseMapper.selectJoinOne(OrderRankingSumVo.class, wrapper);
|
||||||
|
orderRankingSumVo.setTotalNum(totalNum);
|
||||||
|
return orderRankingSumVo;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 技术排行榜统计
|
||||||
|
*
|
||||||
|
* @param bo
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public OrderRankingSumVo rankingListJSSum(OrderRankingBo bo) {
|
||||||
|
Long totalNum = sysUserMapper.selectCount(new LambdaQueryWrapper<SysUser>().eq(SysUser::getIdentity, 2));
|
||||||
|
MPJLambdaWrapper<TpOrder> wrapper = buildQueryRankingMPJWrapper(bo)
|
||||||
|
.selectAs("count(1)",OrderRankingSumVo::getTotalOrderNum)
|
||||||
|
.selectAs("sum(js_price)",OrderRankingSumVo::getTotalPerformance)
|
||||||
|
.selectAs("sum(js_pay_price)",OrderRankingSumVo::getTotalPaidAmount)
|
||||||
|
.selectAs("concat(round(sum(js_pay_price)/sum(js_price) * 100),'%')",OrderRankingSumVo::getTotalCompletionRate)
|
||||||
|
.leftJoin(SysUser.class,SysUser::getUserId,TpOrder::getBid)
|
||||||
|
.leftJoin(SysDept.class,SysDept::getDeptId,SysUser::getDeptId)
|
||||||
|
.eq(TpOrder::getIsDel,1)
|
||||||
|
.isNotNull(TpOrder::getBid);
|
||||||
|
// .ne(TpOrder::getPayState,1);
|
||||||
|
|
||||||
|
OrderRankingSumVo orderRankingSumVo = baseMapper.selectJoinOne(OrderRankingSumVo.class, wrapper);
|
||||||
|
orderRankingSumVo.setTotalNum(totalNum);
|
||||||
|
return orderRankingSumVo;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 客户下单排行榜
|
||||||
|
*
|
||||||
|
* @param bo
|
||||||
|
* @param pageQuery
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public TableDataInfo<OrderRankingVo> khRankingList(OrderRankingBo bo, PageQuery pageQuery) {
|
||||||
|
MPJLambdaWrapper<TpOrder> wrapper = buildKHRankingMPJWrapper(bo)
|
||||||
|
.selectAs(TpClient::getCode,OrderRankingVo::getUserName)
|
||||||
|
.selectAs(TpClient::getName,OrderRankingVo::getRealName)
|
||||||
|
// .selectAs(SysDept::getDeptName,OrderRankingVo::getDeptName)
|
||||||
|
.selectAs("count(1)",OrderRankingVo::getOrderNum)
|
||||||
|
.selectAs("sum(t.price)",OrderRankingVo::getTotalPerformance)
|
||||||
|
.selectAs("sum(t.khpay)",OrderRankingVo::getCompletionAmount)
|
||||||
|
.selectAs("sum(t.price) - sum(t.khpay)",OrderRankingVo::getUnpaidAmount)
|
||||||
|
.selectAs("concat(round(sum(t.khpay)/sum(t.price) * 100),'%')",OrderRankingVo::getTargetCompletionRate)
|
||||||
|
.leftJoin(TpClient.class,TpClient::getId,TpOrder::getKid)
|
||||||
|
// .leftJoin(SysDept.class,SysDept::getDeptId,SysUser::getDeptId)
|
||||||
|
.eq(TpOrder::getIsDel,1)
|
||||||
|
// .ne(TpOrder::getPayState,1)
|
||||||
|
.groupBy(TpOrder::getKid);
|
||||||
|
// .orderByDesc("sum(js_price)");
|
||||||
|
|
||||||
|
wrapper.orderBy(bo.getSort() == 1,bo.getIsAsc(),OrderRankingVo::getOrderNum);
|
||||||
|
wrapper.orderBy(bo.getSort() == 2,bo.getIsAsc(),OrderRankingVo::getTotalPerformance);
|
||||||
|
wrapper.orderBy(bo.getSort() == 3,bo.getIsAsc(),OrderRankingVo::getCompletionAmount);
|
||||||
|
wrapper.orderBy(bo.getSort() == 4,bo.getIsAsc(),OrderRankingVo::getUnpaidAmount);
|
||||||
|
wrapper.orderBy(bo.getSort() == 5,bo.getIsAsc(),OrderRankingVo::getTargetCompletionRate);
|
||||||
|
|
||||||
|
IPage<OrderRankingVo> listPage = baseMapper.selectJoinPage(new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize()), OrderRankingVo.class, wrapper);
|
||||||
|
return TableDataInfo.build(listPage);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 客户下单排行榜统计
|
||||||
|
*
|
||||||
|
* @param bo
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public OrderRankingSumVo khRankingListSum(OrderRankingBo bo) {
|
||||||
|
Long totalNum = clientMapper.selectCount(new LambdaQueryWrapper<TpClient>().eq(TpClient::getIsDel, 1));
|
||||||
|
MPJLambdaWrapper<TpOrder> wrapper = buildKHRankingMPJWrapper(bo)
|
||||||
|
.selectAs("count(1)",OrderRankingSumVo::getTotalOrderNum)
|
||||||
|
.selectAs("sum(t.price)",OrderRankingSumVo::getTotalPerformance)
|
||||||
|
.selectAs("sum(t.khpay)",OrderRankingSumVo::getTotalPaidAmount)
|
||||||
|
.selectAs("concat(round(sum(t.khpay)/sum(t.price) * 100),'%')",OrderRankingSumVo::getTotalCompletionRate)
|
||||||
|
.leftJoin(TpClient.class,TpClient::getId,TpOrder::getKid)
|
||||||
|
.eq(TpOrder::getIsDel,1);
|
||||||
|
// .ne(TpOrder::getPayState,1);
|
||||||
|
|
||||||
|
OrderRankingSumVo orderRankingSumVo = baseMapper.selectJoinOne(OrderRankingSumVo.class, wrapper);
|
||||||
|
orderRankingSumVo.setTotalNum(totalNum);
|
||||||
|
return orderRankingSumVo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getDataScope() {
|
||||||
|
LoginUser loginUser = LoginHelper.getLoginUser();
|
||||||
|
List<String> ids = loginUser != null ?
|
||||||
|
loginUser.getRoles().stream().filter(Objects::nonNull).map(role -> role.getDataScope()).filter(Objects::nonNull).collect(Collectors.toList()) :
|
||||||
|
Collections.emptyList();
|
||||||
|
|
||||||
|
if (ids.contains("1")) {
|
||||||
|
return 1;
|
||||||
|
} else if (ids.contains("2")) {
|
||||||
|
return 2;
|
||||||
|
} else if (ids.contains("3")) {
|
||||||
|
return 3;
|
||||||
|
} else if (ids.contains("4")) {
|
||||||
|
return 4;
|
||||||
|
} else if (ids.contains("5")) {
|
||||||
|
return 5;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Long> getDeptIds(){
|
||||||
|
LoginUser loginUser = LoginHelper.getLoginUser();
|
||||||
|
List<Long> roleIds = loginUser.getRoles().stream().map(RoleDTO::getRoleId).collect(Collectors.toList());
|
||||||
|
List<Long> getDeptIds = roleDeptMapper.selectList(new LambdaQueryWrapper<SysRoleDept>().in(SysRoleDept::getRoleId, roleIds)).stream().map(SysRoleDept::getDeptId).collect(Collectors.toList());
|
||||||
|
return getDeptIds.stream().distinct().collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -270,7 +270,7 @@ public class TpOrderServiceImpl extends MPJBaseServiceImpl<TpOrderMapper,TpOrder
|
|||||||
MPJLambdaWrapper<TpOrder> wrapper = buildQueryMPJWrapperKF(bo);
|
MPJLambdaWrapper<TpOrder> wrapper = buildQueryMPJWrapperKF(bo);
|
||||||
if(LoginHelper.isSuperAdmin()){
|
if(LoginHelper.isSuperAdmin()){
|
||||||
wrapper.selectAll(TpOrder.class);
|
wrapper.selectAll(TpOrder.class);
|
||||||
wrapper.selectAs(TpClient::getName,CustomerOrderVo::getCname);
|
wrapper.selectAs(TpClientStaff::getName,CustomerOrderVo::getCname);
|
||||||
}else {
|
}else {
|
||||||
if (loginUser.getIdentity() == 3 || loginUser.getIdentity() == 1){
|
if (loginUser.getIdentity() == 3 || loginUser.getIdentity() == 1){
|
||||||
wrapper.select(TpOrder::getId,TpOrder::getOrderId,TpOrder::getRemark,TpOrder::getType,TpOrder::getAddTime,TpOrder::getNum,TpOrder::getJsRemark,TpOrder::getPrice,TpOrder::getPayState,TpOrder::getPayPrice,TpOrder::getEndPrice,TpOrder::getKfpay,TpOrder::getState,TpOrder::getGjPrice,TpOrder::getGpay,TpOrder::getIsCd,TpOrder::getDtTime,TpOrder::getSid);
|
wrapper.select(TpOrder::getId,TpOrder::getOrderId,TpOrder::getRemark,TpOrder::getType,TpOrder::getAddTime,TpOrder::getNum,TpOrder::getJsRemark,TpOrder::getPrice,TpOrder::getPayState,TpOrder::getPayPrice,TpOrder::getEndPrice,TpOrder::getKfpay,TpOrder::getState,TpOrder::getGjPrice,TpOrder::getGpay,TpOrder::getIsCd,TpOrder::getDtTime,TpOrder::getSid);
|
||||||
@@ -1102,233 +1102,6 @@ public class TpOrderServiceImpl extends MPJBaseServiceImpl<TpOrderMapper,TpOrder
|
|||||||
return indexSumVo;
|
return indexSumVo;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 客服排行榜
|
|
||||||
*
|
|
||||||
* @param bo
|
|
||||||
* @param pageQuery
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public TableDataInfo<OrderRankingVo> rankingList(OrderRankingBo bo, PageQuery pageQuery) {
|
|
||||||
/*DateTime dateTime = new DateTime(bo.getMonth(), DatePattern.NORM_MONTH_FORMAT);
|
|
||||||
Month month1 = dateTime.monthEnum();
|
|
||||||
int lastDay = month1.getLastDay(false);
|
|
||||||
bo.setStartTime(bo.getMonth() + "-01 00:00:00");
|
|
||||||
bo.setEndTime(bo.getMonth() + "-" + lastDay + " 23:59:59");*/
|
|
||||||
|
|
||||||
MPJLambdaWrapper<TpOrder> wrapper = buildQueryRankingMPJWrapper(bo)
|
|
||||||
.selectAs(SysUser::getNickName,OrderRankingVo::getUserName)
|
|
||||||
.selectAs(SysUser::getRealName,OrderRankingVo::getRealName)
|
|
||||||
.selectAs(SysDept::getDeptName,OrderRankingVo::getDeptName)
|
|
||||||
.selectAs("count(1)",OrderRankingVo::getOrderNum)
|
|
||||||
.selectAs("sum(price)",OrderRankingVo::getTotalPerformance)
|
|
||||||
.selectAs("sum(pay_price - kfpay)",OrderRankingVo::getCompletionAmount)
|
|
||||||
.selectAs("sum(end_price)",OrderRankingVo::getUnpaidAmount)
|
|
||||||
.selectAs("concat(round(sum(pay_price)/(SELECT CASE WHEN m.gongsi = 0 THEN m.geren ELSE m.gongsi END AS result_field FROM tp_month m WHERE m.sid = t.sid AND m.`month` = '" + bo.getMonth() + "') * 100),'%')",OrderRankingVo::getTargetCompletionRate)
|
|
||||||
.selectAs("concat(round(sum(end_price)/sum(price) * 100),'%')",OrderRankingVo::getDeadOrderRate)
|
|
||||||
.leftJoin(SysUser.class,SysUser::getUserId,TpOrder::getSid)
|
|
||||||
.leftJoin(SysDept.class,SysDept::getDeptId,SysUser::getDeptId)
|
|
||||||
.eq(TpOrder::getIsDel,1)
|
|
||||||
// .ne(TpOrder::getPayState,1)
|
|
||||||
.groupBy(TpOrder::getSid);
|
|
||||||
|
|
||||||
wrapper.orderBy(bo.getSort() == 1,bo.getIsAsc(),OrderRankingVo::getOrderNum);
|
|
||||||
wrapper.orderBy(bo.getSort() == 2,bo.getIsAsc(),OrderRankingVo::getTotalPerformance);
|
|
||||||
wrapper.orderBy(bo.getSort() == 3,bo.getIsAsc(),OrderRankingVo::getCompletionAmount);
|
|
||||||
wrapper.orderBy(bo.getSort() == 4,bo.getIsAsc(),OrderRankingVo::getUnpaidAmount);
|
|
||||||
wrapper.orderBy(bo.getSort() == 5,bo.getIsAsc(),OrderRankingVo::getTargetCompletionRate);
|
|
||||||
wrapper.orderBy(bo.getSort() == 6,bo.getIsAsc(),OrderRankingVo::getDeadOrderRate);
|
|
||||||
|
|
||||||
IPage<OrderRankingVo> listPage = baseMapper.selectJoinPage(new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize()), OrderRankingVo.class, wrapper);
|
|
||||||
return TableDataInfo.build(listPage);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 技术排行榜
|
|
||||||
*
|
|
||||||
* @param bo
|
|
||||||
* @param pageQuery
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public TableDataInfo<OrderRankingVo> rankingListJS(OrderRankingBo bo, PageQuery pageQuery) {
|
|
||||||
|
|
||||||
MPJLambdaWrapper<TpOrder> wrapper = buildQueryRankingMPJWrapper(bo)
|
|
||||||
.selectAs(SysUser::getNickName,OrderRankingVo::getUserName)
|
|
||||||
.selectAs(SysUser::getRealName,OrderRankingVo::getRealName)
|
|
||||||
.selectAs(SysDept::getDeptName,OrderRankingVo::getDeptName)
|
|
||||||
.selectAs("count(1)",OrderRankingVo::getOrderNum)
|
|
||||||
.selectAs("sum(js_price)",OrderRankingVo::getTotalPerformance)
|
|
||||||
.selectAs("sum(js_pay_price)",OrderRankingVo::getCompletionAmount)
|
|
||||||
.selectAs("sum(js_price) - sum(js_pay_price)",OrderRankingVo::getUnpaidAmount)
|
|
||||||
.selectAs("concat(round(sum(js_pay_price)/sum(js_price) * 100),'%')",OrderRankingVo::getTargetCompletionRate)
|
|
||||||
.selectAs("concat(round((sum(js_price) - sum(js_pay_price))/sum(js_price) * 100),'%')",OrderRankingVo::getDeadOrderRate)
|
|
||||||
.leftJoin(SysUser.class,SysUser::getUserId,TpOrder::getBid)
|
|
||||||
.leftJoin(SysDept.class,SysDept::getDeptId,SysUser::getDeptId)
|
|
||||||
.eq(TpOrder::getIsDel,1)
|
|
||||||
// .ne(TpOrder::getPayState,1)
|
|
||||||
.groupBy(TpOrder::getBid);
|
|
||||||
// .orderByDesc("sum(js_price)");
|
|
||||||
|
|
||||||
wrapper.isNotNull(TpOrder::getBid);
|
|
||||||
wrapper.orderBy(bo.getSort() == 1,bo.getIsAsc(),OrderRankingVo::getOrderNum);
|
|
||||||
wrapper.orderBy(bo.getSort() == 2,bo.getIsAsc(),OrderRankingVo::getTotalPerformance);
|
|
||||||
wrapper.orderBy(bo.getSort() == 3,bo.getIsAsc(),OrderRankingVo::getCompletionAmount);
|
|
||||||
wrapper.orderBy(bo.getSort() == 4,bo.getIsAsc(),OrderRankingVo::getUnpaidAmount);
|
|
||||||
wrapper.orderBy(bo.getSort() == 5,bo.getIsAsc(),OrderRankingVo::getTargetCompletionRate);
|
|
||||||
wrapper.orderBy(bo.getSort() == 6,bo.getIsAsc(),OrderRankingVo::getDeadOrderRate);
|
|
||||||
|
|
||||||
IPage<OrderRankingVo> listPage = baseMapper.selectJoinPage(new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize()), OrderRankingVo.class, wrapper);
|
|
||||||
return TableDataInfo.build(listPage);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 客服排行榜统计
|
|
||||||
*
|
|
||||||
* @param bo
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public OrderRankingSumVo rankingListKFSum(OrderRankingBo bo) {
|
|
||||||
Long totalNum = sysUserMapper.selectCount(new LambdaQueryWrapper<SysUser>().eq(SysUser::getIdentity, 3));
|
|
||||||
MPJLambdaWrapper<TpOrder> wrapper = buildQueryRankingMPJWrapper(bo)
|
|
||||||
.selectAs("count(1)",OrderRankingSumVo::getTotalOrderNum)
|
|
||||||
.selectAs("sum(price)",OrderRankingSumVo::getTotalPerformance)
|
|
||||||
.selectAs("sum(pay_price - kfpay)",OrderRankingSumVo::getTotalPaidAmount)
|
|
||||||
.selectAs("concat(round(sum(pay_price - kfpay)/sum(price) * 100),'%')",OrderRankingSumVo::getTotalCompletionRate)
|
|
||||||
.leftJoin(SysUser.class,SysUser::getUserId,TpOrder::getSid)
|
|
||||||
.leftJoin(SysDept.class,SysDept::getDeptId,SysUser::getDeptId)
|
|
||||||
.eq(TpOrder::getIsDel,1);
|
|
||||||
// .ne(TpOrder::getPayState,1);
|
|
||||||
|
|
||||||
OrderRankingSumVo orderRankingSumVo = baseMapper.selectJoinOne(OrderRankingSumVo.class, wrapper);
|
|
||||||
orderRankingSumVo.setTotalNum(totalNum);
|
|
||||||
return orderRankingSumVo;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 技术排行榜统计
|
|
||||||
*
|
|
||||||
* @param bo
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public OrderRankingSumVo rankingListJSSum(OrderRankingBo bo) {
|
|
||||||
Long totalNum = sysUserMapper.selectCount(new LambdaQueryWrapper<SysUser>().eq(SysUser::getIdentity, 2));
|
|
||||||
MPJLambdaWrapper<TpOrder> wrapper = buildQueryRankingMPJWrapper(bo)
|
|
||||||
.selectAs("count(1)",OrderRankingSumVo::getTotalOrderNum)
|
|
||||||
.selectAs("sum(js_price)",OrderRankingSumVo::getTotalPerformance)
|
|
||||||
.selectAs("sum(js_pay_price)",OrderRankingSumVo::getTotalPaidAmount)
|
|
||||||
.selectAs("concat(round(sum(js_pay_price)/sum(js_price) * 100),'%')",OrderRankingSumVo::getTotalCompletionRate)
|
|
||||||
.leftJoin(SysUser.class,SysUser::getUserId,TpOrder::getBid)
|
|
||||||
.leftJoin(SysDept.class,SysDept::getDeptId,SysUser::getDeptId)
|
|
||||||
.eq(TpOrder::getIsDel,1)
|
|
||||||
.isNotNull(TpOrder::getBid);
|
|
||||||
// .ne(TpOrder::getPayState,1);
|
|
||||||
|
|
||||||
OrderRankingSumVo orderRankingSumVo = baseMapper.selectJoinOne(OrderRankingSumVo.class, wrapper);
|
|
||||||
orderRankingSumVo.setTotalNum(totalNum);
|
|
||||||
return orderRankingSumVo;
|
|
||||||
}
|
|
||||||
|
|
||||||
private MPJLambdaWrapper<TpOrder> buildQueryRankingMPJWrapper(OrderRankingBo bo) {
|
|
||||||
MPJLambdaWrapper<TpOrder> lqw = new MPJLambdaWrapper<>();
|
|
||||||
|
|
||||||
if(bo.getDeptIds()!= null && bo.getDeptIds().size() > 0){
|
|
||||||
if(bo.getType() == 1){
|
|
||||||
lqw.in(TpOrder::getDeptId,bo.getDeptIds());
|
|
||||||
} else if (bo.getType() == 2) {
|
|
||||||
lqw.in(TpOrder::getDeptIdJs,bo.getDeptIds());
|
|
||||||
}
|
|
||||||
}else {
|
|
||||||
if(ObjectUtil.isNotNull(bo.getDeptId())){
|
|
||||||
List<SysDept> deptList = deptMapper.selectList(new LambdaQueryWrapper<SysDept>().like(SysDept::getAncestors, bo.getDeptId()));
|
|
||||||
String deptIds = String.valueOf(bo.getDeptId());
|
|
||||||
for (SysDept dept : deptList){
|
|
||||||
deptIds += "," + dept.getDeptId();
|
|
||||||
}
|
|
||||||
if(bo.getType() == 1){
|
|
||||||
lqw.apply(" t.dept_id in("+deptIds+")");
|
|
||||||
} else if (bo.getType() == 2) {
|
|
||||||
lqw.apply(" t.dept_id_js in("+deptIds+")");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
lqw.like(StringUtils.isNotBlank(bo.getUserName()), SysUser::getNickName, bo.getUserName());
|
|
||||||
lqw.like(StringUtils.isNotBlank(bo.getRealName()), SysUser::getRealName, bo.getRealName());
|
|
||||||
lqw.between(bo.getStartTime() != null && bo.getEndTime() != null,
|
|
||||||
TpOrder::getAddTime ,bo.getStartTime(), bo.getEndTime());
|
|
||||||
return lqw;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 客户下单排行榜
|
|
||||||
*
|
|
||||||
* @param bo
|
|
||||||
* @param pageQuery
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public TableDataInfo<OrderRankingVo> khRankingList(OrderRankingBo bo, PageQuery pageQuery) {
|
|
||||||
MPJLambdaWrapper<TpOrder> wrapper = buildKHRankingMPJWrapper(bo)
|
|
||||||
.selectAs(TpClient::getCode,OrderRankingVo::getUserName)
|
|
||||||
.selectAs(TpClient::getName,OrderRankingVo::getRealName)
|
|
||||||
// .selectAs(SysDept::getDeptName,OrderRankingVo::getDeptName)
|
|
||||||
.selectAs("count(1)",OrderRankingVo::getOrderNum)
|
|
||||||
.selectAs("sum(t.price)",OrderRankingVo::getTotalPerformance)
|
|
||||||
.selectAs("sum(t.khpay)",OrderRankingVo::getCompletionAmount)
|
|
||||||
.selectAs("sum(t.price) - sum(t.khpay)",OrderRankingVo::getUnpaidAmount)
|
|
||||||
.selectAs("concat(round(sum(t.khpay)/sum(t.price) * 100),'%')",OrderRankingVo::getTargetCompletionRate)
|
|
||||||
.leftJoin(TpClient.class,TpClient::getId,TpOrder::getKid)
|
|
||||||
// .leftJoin(SysDept.class,SysDept::getDeptId,SysUser::getDeptId)
|
|
||||||
.eq(TpOrder::getIsDel,1)
|
|
||||||
// .ne(TpOrder::getPayState,1)
|
|
||||||
.groupBy(TpOrder::getKid);
|
|
||||||
// .orderByDesc("sum(js_price)");
|
|
||||||
|
|
||||||
wrapper.orderBy(bo.getSort() == 1,bo.getIsAsc(),OrderRankingVo::getOrderNum);
|
|
||||||
wrapper.orderBy(bo.getSort() == 2,bo.getIsAsc(),OrderRankingVo::getTotalPerformance);
|
|
||||||
wrapper.orderBy(bo.getSort() == 3,bo.getIsAsc(),OrderRankingVo::getCompletionAmount);
|
|
||||||
wrapper.orderBy(bo.getSort() == 4,bo.getIsAsc(),OrderRankingVo::getUnpaidAmount);
|
|
||||||
wrapper.orderBy(bo.getSort() == 5,bo.getIsAsc(),OrderRankingVo::getTargetCompletionRate);
|
|
||||||
|
|
||||||
IPage<OrderRankingVo> listPage = baseMapper.selectJoinPage(new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize()), OrderRankingVo.class, wrapper);
|
|
||||||
return TableDataInfo.build(listPage);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 客户下单排行榜统计
|
|
||||||
*
|
|
||||||
* @param bo
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public OrderRankingSumVo khRankingListSum(OrderRankingBo bo) {
|
|
||||||
Long totalNum = clientMapper.selectCount(new LambdaQueryWrapper<TpClient>().eq(TpClient::getIsDel, 1));
|
|
||||||
MPJLambdaWrapper<TpOrder> wrapper = buildKHRankingMPJWrapper(bo)
|
|
||||||
.selectAs("count(1)",OrderRankingSumVo::getTotalOrderNum)
|
|
||||||
.selectAs("sum(t.price)",OrderRankingSumVo::getTotalPerformance)
|
|
||||||
.selectAs("sum(t.khpay)",OrderRankingSumVo::getTotalPaidAmount)
|
|
||||||
.selectAs("concat(round(sum(t.khpay)/sum(t.price) * 100),'%')",OrderRankingSumVo::getTotalCompletionRate)
|
|
||||||
.leftJoin(TpClient.class,TpClient::getId,TpOrder::getKid)
|
|
||||||
.eq(TpOrder::getIsDel,1);
|
|
||||||
// .ne(TpOrder::getPayState,1);
|
|
||||||
|
|
||||||
OrderRankingSumVo orderRankingSumVo = baseMapper.selectJoinOne(OrderRankingSumVo.class, wrapper);
|
|
||||||
orderRankingSumVo.setTotalNum(totalNum);
|
|
||||||
return orderRankingSumVo;
|
|
||||||
}
|
|
||||||
|
|
||||||
private MPJLambdaWrapper<TpOrder> buildKHRankingMPJWrapper(OrderRankingBo bo) {
|
|
||||||
MPJLambdaWrapper<TpOrder> lqw = new MPJLambdaWrapper<>();
|
|
||||||
lqw.eq(StringUtils.isNotBlank(bo.getUserName()), TpClient::getCode, bo.getUserName());
|
|
||||||
lqw.eq(StringUtils.isNotBlank(bo.getRealName()), TpClient::getName, bo.getRealName());
|
|
||||||
lqw.between(bo.getStartTime() != null && bo.getEndTime() != null,
|
|
||||||
TpOrder::getAddTime ,bo.getStartTime(), bo.getEndTime());
|
|
||||||
return lqw;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 技术首页统计
|
* 技术首页统计
|
||||||
* @return
|
* @return
|
||||||
@@ -1500,7 +1273,6 @@ public class TpOrderServiceImpl extends MPJBaseServiceImpl<TpOrderMapper,TpOrder
|
|||||||
return jsPrice.multiply(bili).setScale(2, RoundingMode.HALF_UP);
|
return jsPrice.multiply(bili).setScale(2, RoundingMode.HALF_UP);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getDataScope() {
|
public int getDataScope() {
|
||||||
LoginUser loginUser = LoginHelper.getLoginUser();
|
LoginUser loginUser = LoginHelper.getLoginUser();
|
||||||
List<String> ids = loginUser != null ?
|
List<String> ids = loginUser != null ?
|
||||||
@@ -1521,7 +1293,6 @@ public class TpOrderServiceImpl extends MPJBaseServiceImpl<TpOrderMapper,TpOrder
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<Long> getDeptIds(){
|
public List<Long> getDeptIds(){
|
||||||
LoginUser loginUser = LoginHelper.getLoginUser();
|
LoginUser loginUser = LoginHelper.getLoginUser();
|
||||||
List<Long> roleIds = loginUser.getRoles().stream().map(RoleDTO::getRoleId).collect(Collectors.toList());
|
List<Long> roleIds = loginUser.getRoles().stream().map(RoleDTO::getRoleId).collect(Collectors.toList());
|
||||||
|
|||||||
Reference in New Issue
Block a user