diff --git a/ruoyi-admin/src/main/java/org/dromara/web/controller/IndexController.java b/ruoyi-admin/src/main/java/org/dromara/web/controller/IndexController.java index 4269493..8e231d1 100644 --- a/ruoyi-admin/src/main/java/org/dromara/web/controller/IndexController.java +++ b/ruoyi-admin/src/main/java/org/dromara/web/controller/IndexController.java @@ -24,6 +24,7 @@ import org.dromara.system.domain.vo.SysPictureVo; import org.dromara.system.domain.vo.SysUserVo; import org.dromara.system.service.ISysPictureService; import org.dromara.system.service.ISysUserService; +import org.dromara.web.utils.WxXcxUtils; import org.dromara.work.domain.TpReceipt; import org.dromara.work.domain.bo.OrderRankingBo; import org.dromara.work.domain.bo.TpProdBo; @@ -66,6 +67,8 @@ public class IndexController { private final IOrderService orderService; + private final ITpNewOrderService tpNewOrderService; + private final ISysPictureService sysPictureService; private final ITpProdService tpProdService; @@ -112,6 +115,14 @@ public class IndexController { return R.ok(tpProdService.queryById(id)); } + /** + * 根据url获取微信JS-SDK使用权限签名 + */ + @PostMapping("/wx/jssdk") + public R> getWxJssdk(@RequestParam String url) { + return R.ok(WxXcxUtils.generateSignature(url)); + } + /** * 银盛支付回调 * @param params @@ -211,7 +222,7 @@ public class IndexController { @GetMapping("/rankingListKF") public TableDataInfo rankingListKF(OrderRankingBo bo, PageQuery pageQuery) { bo.setType(1); - return tpOrderService.rankingList(bo, pageQuery); + return tpNewOrderService.rankingList(bo, pageQuery); } /** @@ -221,7 +232,7 @@ public class IndexController { @GetMapping("/rankingListKFSum") public R rankingListKFSum(OrderRankingBo bo) { bo.setType(1); - return R.ok(tpOrderService.rankingListKFSum(bo)); + return R.ok(tpNewOrderService.rankingListKFSum(bo)); } /** @@ -231,7 +242,7 @@ public class IndexController { @GetMapping("/rankingListJS") public TableDataInfo rankingListJS(OrderRankingBo bo, PageQuery pageQuery) { bo.setType(2); - return tpOrderService.rankingListJS(bo, pageQuery); + return tpNewOrderService.rankingListJS(bo, pageQuery); } /** @@ -241,7 +252,7 @@ public class IndexController { @GetMapping("/rankingListJSSum") public R rankingListJSSum(OrderRankingBo bo) { 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") @GetMapping("/khRankingList") public TableDataInfo 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") @GetMapping("/khRankingListSum") public R khRankingListSum(OrderRankingBo bo) { - return R.ok(tpOrderService.khRankingListSum(bo)); + return R.ok(tpNewOrderService.khRankingListSum(bo)); } /** diff --git a/ruoyi-admin/src/main/java/org/dromara/web/utils/WxXcxUtils.java b/ruoyi-admin/src/main/java/org/dromara/web/utils/WxXcxUtils.java new file mode 100644 index 0000000..03fd9da --- /dev/null +++ b/ruoyi-admin/src/main/java/org/dromara/web/utils/WxXcxUtils.java @@ -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 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 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 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 result = new HashMap<>(); + result.put("timestamp", timestamp); + result.put("nonceStr", nonceStr); + result.put("signature", signature); + result.put("appId", APPID); + + return result; + } + +} diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index 101c2e8..a0e9777 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -128,6 +128,7 @@ security: - /notifyCheckSign - /system/dict/data/** - /work/panorama/listByOrderId + - /wx/jssdk # 多租户配置 tenant: diff --git a/ruoyi-admin/src/main/resources/i18n/messages.properties b/ruoyi-admin/src/main/resources/i18n/messages.properties index cce11c8..1a008dc 100644 --- a/ruoyi-admin/src/main/resources/i18n/messages.properties +++ b/ruoyi-admin/src/main/resources/i18n/messages.properties @@ -1,61 +1,61 @@ -#错误消息 -not.null=* 必须填写 -user.jcaptcha.error=验证码错误 -user.jcaptcha.expire=验证码已失效 -user.not.exists=对不起, 您的账号:{0} 不存在. -user.password.not.match=用户不存在/密码错误 -user.password.retry.limit.count=密码输入错误{0}次 -user.password.retry.limit.exceed=密码输入错误{0}次,帐户锁定{1}分钟 -user.password.delete=对不起,您的账号:{0} 已被删除 -user.blocked=对不起,您的账号:{0} 已禁用,请联系管理员 -role.blocked=角色已封禁,请联系管理员 -user.logout.success=退出成功 -length.not.valid=长度必须在{min}到{max}个字符之间 -user.username.not.blank=用户名不能为空 -user.username.not.valid=* 2到20个汉字、字母、数字或下划线组成,且必须以非数字开头 -user.username.length.valid=账户长度必须在{min}到{max}个字符之间 -user.password.not.blank=用户密码不能为空 -user.password.length.valid=用户密码长度必须在{min}到{max}个字符之间 -user.password.not.valid=* 5-50个字符 -user.email.not.valid=邮箱格式错误 -user.email.not.blank=邮箱不能为空 -user.phonenumber.not.blank=用户手机号不能为空 -user.mobile.phone.number.not.valid=手机号格式错误 -user.login.success=登录成功 -user.register.success=注册成功 -user.register.save.error=保存用户 {0} 失败,注册账号已存在 -user.register.error=注册失败,请联系系统管理人员 -user.notfound=请重新登录 -user.forcelogout=管理员强制退出,请重新登录 -user.unknown.error=未知错误,请重新登录 -auth.grant.type.error=认证权限类型错误 -auth.grant.type.blocked=认证权限类型已禁用 -auth.grant.type.not.blank=认证权限类型不能为空 -auth.clientid.not.blank=认证客户端id不能为空 -##文件上传消息 -upload.exceed.maxSize=上传的文件大小超出限制的文件大小!
允许的文件最大大小是:{0}MB! -upload.filename.exceed.length=上传的文件名最长{0}个字符 -##权限 -no.permission=您没有数据的权限,请联系管理员添加权限 [{0}] -no.create.permission=您没有创建数据的权限,请联系管理员添加权限 [{0}] -no.update.permission=您没有修改数据的权限,请联系管理员添加权限 [{0}] -no.delete.permission=您没有删除数据的权限,请联系管理员添加权限 [{0}] -no.export.permission=您没有导出数据的权限,请联系管理员添加权限 [{0}] -no.view.permission=您没有查看数据的权限,请联系管理员添加权限 [{0}] -repeat.submit.message=不允许重复提交,请稍候再试 -rate.limiter.message=访问过于频繁,请稍候再试 -sms.code.not.blank=短信验证码不能为空 -sms.code.retry.limit.count=短信验证码输入错误{0}次 -sms.code.retry.limit.exceed=短信验证码输入错误{0}次,帐户锁定{1}分钟 -email.code.not.blank=邮箱验证码不能为空 -email.code.retry.limit.count=邮箱验证码输入错误{0}次 -email.code.retry.limit.exceed=邮箱验证码输入错误{0}次,帐户锁定{1}分钟 -xcx.code.not.blank=小程序[code]不能为空 -social.source.not.blank=第三方登录平台[source]不能为空 -social.code.not.blank=第三方登录平台[code]不能为空 -social.state.not.blank=第三方登录平台[state]不能为空 -##租户 -tenant.number.not.blank=租户编号不能为空 -tenant.not.exists=对不起, 您的租户不存在,请联系管理员 -tenant.blocked=对不起,您的租户已禁用,请联系管理员 -tenant.expired=对不起,您的租户已过期,请联系管理员 +#???? +not.null=* ???? +user.jcaptcha.error=????? +user.jcaptcha.expire=?????? +user.not.exists=???, ?????{0} ???. +user.password.not.match=?????/???? +user.password.retry.limit.count=??????{0}? +user.password.retry.limit.exceed=??????{0}??????{1}?? +user.password.delete=?????????{0} ???? +user.blocked=?????????{0} ?????????? +role.blocked=???????????? +user.logout.success=???? +length.not.valid=?????{min}?{max}????? +user.username.not.blank=??????? +user.username.not.valid=* 2?20????????????????????????? +user.username.length.valid=???????{min}?{max}????? +user.password.not.blank=???????? +user.password.length.valid=?????????{min}?{max}????? +user.password.not.valid=* 5-50??? +user.email.not.valid=?????? +user.email.not.blank=?????? +user.phonenumber.not.blank=????????? +user.mobile.phone.number.not.valid=??????? +user.login.success=???? +user.register.success=???? +user.register.save.error=???? {0} ?????????? +user.register.error=?????????????? +user.notfound=????? +user.forcelogout=????????????? +user.unknown.error=?????????? +auth.grant.type.error=???????? +auth.grant.type.blocked=????????? +auth.grant.type.not.blank=?????????? +auth.clientid.not.blank=?????id???? +##?????? +upload.exceed.maxSize=?????????????????
???????????{0}MB? +upload.filename.exceed.length=????????{0}??? +##?? +no.permission=??????????????????? [{0}] +no.create.permission=????????????????????? [{0}] +no.update.permission=????????????????????? [{0}] +no.delete.permission=????????????????????? [{0}] +no.export.permission=????????????????????? [{0}] +no.view.permission=????????????????????? [{0}] +repeat.submit.message=????????????? +rate.limiter.message=???????????? +sms.code.not.blank=????????? +sms.code.retry.limit.count=?????????{0}? +sms.code.retry.limit.exceed=?????????{0}??????{1}?? +email.code.not.blank=????????? +email.code.retry.limit.count=?????????{0}? +email.code.retry.limit.exceed=?????????{0}??????{1}?? +xcx.code.not.blank=???[code]???? +social.source.not.blank=???????[source]???? +social.code.not.blank=???????[code]???? +social.state.not.blank=???????[state]???? +##?? +tenant.number.not.blank=???????? +tenant.not.exists=???, ?????????????? +tenant.blocked=?????????????????? +tenant.expired=?????????????????? diff --git a/ruoyi-admin/src/main/resources/i18n/messages_zh_CN.properties b/ruoyi-admin/src/main/resources/i18n/messages_zh_CN.properties index cce11c8..1a008dc 100644 --- a/ruoyi-admin/src/main/resources/i18n/messages_zh_CN.properties +++ b/ruoyi-admin/src/main/resources/i18n/messages_zh_CN.properties @@ -1,61 +1,61 @@ -#错误消息 -not.null=* 必须填写 -user.jcaptcha.error=验证码错误 -user.jcaptcha.expire=验证码已失效 -user.not.exists=对不起, 您的账号:{0} 不存在. -user.password.not.match=用户不存在/密码错误 -user.password.retry.limit.count=密码输入错误{0}次 -user.password.retry.limit.exceed=密码输入错误{0}次,帐户锁定{1}分钟 -user.password.delete=对不起,您的账号:{0} 已被删除 -user.blocked=对不起,您的账号:{0} 已禁用,请联系管理员 -role.blocked=角色已封禁,请联系管理员 -user.logout.success=退出成功 -length.not.valid=长度必须在{min}到{max}个字符之间 -user.username.not.blank=用户名不能为空 -user.username.not.valid=* 2到20个汉字、字母、数字或下划线组成,且必须以非数字开头 -user.username.length.valid=账户长度必须在{min}到{max}个字符之间 -user.password.not.blank=用户密码不能为空 -user.password.length.valid=用户密码长度必须在{min}到{max}个字符之间 -user.password.not.valid=* 5-50个字符 -user.email.not.valid=邮箱格式错误 -user.email.not.blank=邮箱不能为空 -user.phonenumber.not.blank=用户手机号不能为空 -user.mobile.phone.number.not.valid=手机号格式错误 -user.login.success=登录成功 -user.register.success=注册成功 -user.register.save.error=保存用户 {0} 失败,注册账号已存在 -user.register.error=注册失败,请联系系统管理人员 -user.notfound=请重新登录 -user.forcelogout=管理员强制退出,请重新登录 -user.unknown.error=未知错误,请重新登录 -auth.grant.type.error=认证权限类型错误 -auth.grant.type.blocked=认证权限类型已禁用 -auth.grant.type.not.blank=认证权限类型不能为空 -auth.clientid.not.blank=认证客户端id不能为空 -##文件上传消息 -upload.exceed.maxSize=上传的文件大小超出限制的文件大小!
允许的文件最大大小是:{0}MB! -upload.filename.exceed.length=上传的文件名最长{0}个字符 -##权限 -no.permission=您没有数据的权限,请联系管理员添加权限 [{0}] -no.create.permission=您没有创建数据的权限,请联系管理员添加权限 [{0}] -no.update.permission=您没有修改数据的权限,请联系管理员添加权限 [{0}] -no.delete.permission=您没有删除数据的权限,请联系管理员添加权限 [{0}] -no.export.permission=您没有导出数据的权限,请联系管理员添加权限 [{0}] -no.view.permission=您没有查看数据的权限,请联系管理员添加权限 [{0}] -repeat.submit.message=不允许重复提交,请稍候再试 -rate.limiter.message=访问过于频繁,请稍候再试 -sms.code.not.blank=短信验证码不能为空 -sms.code.retry.limit.count=短信验证码输入错误{0}次 -sms.code.retry.limit.exceed=短信验证码输入错误{0}次,帐户锁定{1}分钟 -email.code.not.blank=邮箱验证码不能为空 -email.code.retry.limit.count=邮箱验证码输入错误{0}次 -email.code.retry.limit.exceed=邮箱验证码输入错误{0}次,帐户锁定{1}分钟 -xcx.code.not.blank=小程序[code]不能为空 -social.source.not.blank=第三方登录平台[source]不能为空 -social.code.not.blank=第三方登录平台[code]不能为空 -social.state.not.blank=第三方登录平台[state]不能为空 -##租户 -tenant.number.not.blank=租户编号不能为空 -tenant.not.exists=对不起, 您的租户不存在,请联系管理员 -tenant.blocked=对不起,您的租户已禁用,请联系管理员 -tenant.expired=对不起,您的租户已过期,请联系管理员 +#???? +not.null=* ???? +user.jcaptcha.error=????? +user.jcaptcha.expire=?????? +user.not.exists=???, ?????{0} ???. +user.password.not.match=?????/???? +user.password.retry.limit.count=??????{0}? +user.password.retry.limit.exceed=??????{0}??????{1}?? +user.password.delete=?????????{0} ???? +user.blocked=?????????{0} ?????????? +role.blocked=???????????? +user.logout.success=???? +length.not.valid=?????{min}?{max}????? +user.username.not.blank=??????? +user.username.not.valid=* 2?20????????????????????????? +user.username.length.valid=???????{min}?{max}????? +user.password.not.blank=???????? +user.password.length.valid=?????????{min}?{max}????? +user.password.not.valid=* 5-50??? +user.email.not.valid=?????? +user.email.not.blank=?????? +user.phonenumber.not.blank=????????? +user.mobile.phone.number.not.valid=??????? +user.login.success=???? +user.register.success=???? +user.register.save.error=???? {0} ?????????? +user.register.error=?????????????? +user.notfound=????? +user.forcelogout=????????????? +user.unknown.error=?????????? +auth.grant.type.error=???????? +auth.grant.type.blocked=????????? +auth.grant.type.not.blank=?????????? +auth.clientid.not.blank=?????id???? +##?????? +upload.exceed.maxSize=?????????????????
???????????{0}MB? +upload.filename.exceed.length=????????{0}??? +##?? +no.permission=??????????????????? [{0}] +no.create.permission=????????????????????? [{0}] +no.update.permission=????????????????????? [{0}] +no.delete.permission=????????????????????? [{0}] +no.export.permission=????????????????????? [{0}] +no.view.permission=????????????????????? [{0}] +repeat.submit.message=????????????? +rate.limiter.message=???????????? +sms.code.not.blank=????????? +sms.code.retry.limit.count=?????????{0}? +sms.code.retry.limit.exceed=?????????{0}??????{1}?? +email.code.not.blank=????????? +email.code.retry.limit.count=?????????{0}? +email.code.retry.limit.exceed=?????????{0}??????{1}?? +xcx.code.not.blank=???[code]???? +social.source.not.blank=???????[source]???? +social.code.not.blank=???????[code]???? +social.state.not.blank=???????[state]???? +##?? +tenant.number.not.blank=???????? +tenant.not.exists=???, ?????????????? +tenant.blocked=?????????????????? +tenant.expired=?????????????????? diff --git a/ruoyi-modules/ruoyi-work/src/main/java/org/dromara/work/service/ITpNewOrderService.java b/ruoyi-modules/ruoyi-work/src/main/java/org/dromara/work/service/ITpNewOrderService.java new file mode 100644 index 0000000..133da10 --- /dev/null +++ b/ruoyi-modules/ruoyi-work/src/main/java/org/dromara/work/service/ITpNewOrderService.java @@ -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 { + + /** + * 客服排行榜 + * @param bo + * @param pageQuery + * @return + */ + TableDataInfo rankingList(OrderRankingBo bo, PageQuery pageQuery); + + /** + * 技术排行榜 + * @param bo + * @param pageQuery + * @return + */ + TableDataInfo 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 khRankingList(OrderRankingBo bo, PageQuery pageQuery); + + /** + * 客户下单排行榜统计 + * @param bo + * @return + */ + OrderRankingSumVo khRankingListSum(OrderRankingBo bo); + +} diff --git a/ruoyi-modules/ruoyi-work/src/main/java/org/dromara/work/service/ITpOrderService.java b/ruoyi-modules/ruoyi-work/src/main/java/org/dromara/work/service/ITpOrderService.java index d47b246..bf0fa7b 100644 --- a/ruoyi-modules/ruoyi-work/src/main/java/org/dromara/work/service/ITpOrderService.java +++ b/ruoyi-modules/ruoyi-work/src/main/java/org/dromara/work/service/ITpOrderService.java @@ -178,59 +178,6 @@ public interface ITpOrderService extends MPJBaseService { */ IndexSumVo getJsTarget(); - /** - * 客服排行榜 - * @param bo - * @param pageQuery - * @return - */ - TableDataInfo rankingList(OrderRankingBo bo, PageQuery pageQuery); - - /** - * 技术排行榜 - * @param bo - * @param pageQuery - * @return - */ - TableDataInfo 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 khRankingList(OrderRankingBo bo, PageQuery pageQuery); - - /** - * 客户下单排行榜统计 - * @param bo - * @return - */ - OrderRankingSumVo khRankingListSum(OrderRankingBo bo); - - - - int getDataScope(); - - List getDeptIds(); - /** * 导出客服订单 diff --git a/ruoyi-modules/ruoyi-work/src/main/java/org/dromara/work/service/impl/TpNewOrderServiceImpl.java b/ruoyi-modules/ruoyi-work/src/main/java/org/dromara/work/service/impl/TpNewOrderServiceImpl.java new file mode 100644 index 0000000..165c89f --- /dev/null +++ b/ruoyi-modules/ruoyi-work/src/main/java/org/dromara/work/service/impl/TpNewOrderServiceImpl.java @@ -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 implements ITpNewOrderService { + + private final TpOrderMapper baseMapper; + + private final SysUserMapper sysUserMapper; + + private final SysDeptMapper deptMapper; + + private final SysRoleDeptMapper roleDeptMapper; + + private final TpClientMapper clientMapper; + + + private MPJLambdaWrapper buildQueryRankingMPJWrapper(OrderRankingBo bo) { + LoginUser loginUser = LoginHelper.getLoginUser(); + MPJLambdaWrapper 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 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 deptIds = deptMapper.selectList(new LambdaQueryWrapper().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 buildKHRankingMPJWrapper(OrderRankingBo bo) { + MPJLambdaWrapper 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 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 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 listPage = baseMapper.selectJoinPage(new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize()), OrderRankingVo.class, wrapper); + return TableDataInfo.build(listPage); + } + + /** + * 技术排行榜 + * + * @param bo + * @param pageQuery + * @return + */ + @Override + public TableDataInfo rankingListJS(OrderRankingBo bo, PageQuery pageQuery) { + MPJLambdaWrapper 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 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().eq(SysUser::getIdentity, 3)); + MPJLambdaWrapper 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().eq(SysUser::getIdentity, 2)); + MPJLambdaWrapper 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 khRankingList(OrderRankingBo bo, PageQuery pageQuery) { + MPJLambdaWrapper 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 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().eq(TpClient::getIsDel, 1)); + MPJLambdaWrapper 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 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 getDeptIds(){ + LoginUser loginUser = LoginHelper.getLoginUser(); + List roleIds = loginUser.getRoles().stream().map(RoleDTO::getRoleId).collect(Collectors.toList()); + List getDeptIds = roleDeptMapper.selectList(new LambdaQueryWrapper().in(SysRoleDept::getRoleId, roleIds)).stream().map(SysRoleDept::getDeptId).collect(Collectors.toList()); + return getDeptIds.stream().distinct().collect(Collectors.toList()); + } + + +} diff --git a/ruoyi-modules/ruoyi-work/src/main/java/org/dromara/work/service/impl/TpOrderServiceImpl.java b/ruoyi-modules/ruoyi-work/src/main/java/org/dromara/work/service/impl/TpOrderServiceImpl.java index edac180..3754535 100644 --- a/ruoyi-modules/ruoyi-work/src/main/java/org/dromara/work/service/impl/TpOrderServiceImpl.java +++ b/ruoyi-modules/ruoyi-work/src/main/java/org/dromara/work/service/impl/TpOrderServiceImpl.java @@ -270,7 +270,7 @@ public class TpOrderServiceImpl extends MPJBaseServiceImpl wrapper = buildQueryMPJWrapperKF(bo); if(LoginHelper.isSuperAdmin()){ wrapper.selectAll(TpOrder.class); - wrapper.selectAs(TpClient::getName,CustomerOrderVo::getCname); + wrapper.selectAs(TpClientStaff::getName,CustomerOrderVo::getCname); }else { 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); @@ -1102,233 +1102,6 @@ public class TpOrderServiceImpl extends MPJBaseServiceImpl 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 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 listPage = baseMapper.selectJoinPage(new Page<>(pageQuery.getPageNum(), pageQuery.getPageSize()), OrderRankingVo.class, wrapper); - return TableDataInfo.build(listPage); - } - - /** - * 技术排行榜 - * - * @param bo - * @param pageQuery - * @return - */ - @Override - public TableDataInfo rankingListJS(OrderRankingBo bo, PageQuery pageQuery) { - - MPJLambdaWrapper 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 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().eq(SysUser::getIdentity, 3)); - MPJLambdaWrapper 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().eq(SysUser::getIdentity, 2)); - MPJLambdaWrapper 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 buildQueryRankingMPJWrapper(OrderRankingBo bo) { - MPJLambdaWrapper 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 deptList = deptMapper.selectList(new LambdaQueryWrapper().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 khRankingList(OrderRankingBo bo, PageQuery pageQuery) { - MPJLambdaWrapper 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 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().eq(TpClient::getIsDel, 1)); - MPJLambdaWrapper 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 buildKHRankingMPJWrapper(OrderRankingBo bo) { - MPJLambdaWrapper 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 @@ -1500,7 +1273,6 @@ public class TpOrderServiceImpl extends MPJBaseServiceImpl ids = loginUser != null ? @@ -1521,7 +1293,6 @@ public class TpOrderServiceImpl extends MPJBaseServiceImpl getDeptIds(){ LoginUser loginUser = LoginHelper.getLoginUser(); List roleIds = loginUser.getRoles().stream().map(RoleDTO::getRoleId).collect(Collectors.toList());