From 00be6f52ab129af19f47fa208e00fa84dca07149 Mon Sep 17 00:00:00 2001 From: DB <2502523450@qq.com> Date: Wed, 31 Jan 2024 16:03:53 +0800 Subject: [PATCH] =?UTF-8?q?=20=20=E5=B7=A5=E5=8D=95=E7=BB=9F=E8=AE=A1;?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=B0=8F=E7=A8=8B=E5=BA=8F=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E6=B3=A8=E5=86=8C=E7=99=BB=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../strategy/login/MiniLoginStrategy.java | 39 +++-- .../Cpop-Mall-Web/Mall-DockerD-Dockerfile | 5 + .../main/resources/application-dockerD.yml | 123 +++++++++++++++ .../cpop/mini/business/entity/MiniUser.java | 4 +- .../mini/business/entity/MiniUserMidSys.java | 4 - .../com/cpop/oam/web/CpopDataSyncTests.java | 33 ++++ .../BackstageTaskWorkOrderController.java | 52 ++++--- .../service/TaskWorkOrderService.java | 17 ++- .../impl/TaskWorkOrderServiceImpl.java | 126 +++++++++++++-- .../business/vo/TaskWorkOrderStatPageVo.java | 144 ++++++++++++++++++ .../mini/MiniSysCommonController.java | 2 +- .../controller/mini/SysCommonController.java | 44 ------ 12 files changed, 492 insertions(+), 101 deletions(-) create mode 100644 Cpop-Mall/Cpop-Mall-Web/Mall-DockerD-Dockerfile create mode 100644 Cpop-Mall/Cpop-Mall-Web/src/main/resources/application-dockerD.yml create mode 100644 Cpop-Oam/src/main/java/com/cpop/oam/business/vo/TaskWorkOrderStatPageVo.java delete mode 100644 Cpop-System/src/main/java/com/cpop/system/business/controller/mini/SysCommonController.java diff --git a/Cpop-Core/src/main/java/com/cpop/core/strategy/login/MiniLoginStrategy.java b/Cpop-Core/src/main/java/com/cpop/core/strategy/login/MiniLoginStrategy.java index 5e24235..d8fb679 100644 --- a/Cpop-Core/src/main/java/com/cpop/core/strategy/login/MiniLoginStrategy.java +++ b/Cpop-Core/src/main/java/com/cpop/core/strategy/login/MiniLoginStrategy.java @@ -99,23 +99,21 @@ public class MiniLoginStrategy implements LoginStrategy { } //构建用户信息 Row row = DbChain.table("cp_mini_user") - .select("cmu.id","cmu.open_id","cmu.app_id","cmu.user_id","cmu.brand_id","cmu.nick_name","cmu.avatar","cmu.source_type") + .select("cmu.id","cmu.open_id","cmu.app_id","cmu.brand_id","cmu.nick_name","cmu.avatar","cmu.source_type") .from("cp_mini_user").as("cmu") .leftJoin("cp_j_brand_extend").as("cjbe").on("cjbe.brand_id = cmu.brand_id") - .where("cmu.user_id = ?", loginInfo.getUserId()) + .where("cmu.app_id = ?",credentials.get("appId")) .and("cjbe.brand_cloud_id = ?",credentials.get("brandId")) - .and("cmu.app_id = ?",credentials.get("appId")) .and("cmu.open_id = ?",credentials.get("openId")) //用户来源 .and("cmu.source_type = ?",sourceType.toString()) .and("cmu.is_delete = 0") .one(); + //保存小程序用户信息 + LocalDateTime now = LocalDateTime.now(); if (row == null) { - //保存小程序用户信息 - LocalDateTime now = LocalDateTime.now(); Row miniUser = Row.ofKey(RowKey.SNOW_FLAKE_ID); - miniUser.set("user_id", loginInfo.getUserId()) - .set("open_id", credentials.get("openId")) + miniUser.set("open_id", credentials.get("openId")) .set("app_id", credentials.get("appId")) .set("brand_id", brand.getString("id")) .set("nick_name", credentials.get("nickName")) @@ -126,10 +124,18 @@ public class MiniLoginStrategy implements LoginStrategy { .set("create_user_id", 1) .set("update_user_id", 1); int save = Db.insert("cp_mini_user", miniUser); + //插入中间表 + Row miniMidUser = new Row(); + miniMidUser.set("user_id", loginInfo.getUserId()) + .set("mini_id",miniUser.getString("id")) + .set("create_time", now) + .set("update_time", now) + .set("create_user_id", 1) + .set("update_user_id", 1); + Db.insert("cp_mini_user_mid_sys", miniMidUser); if (save > 0) { loginInfo.setOpenId((String) credentials.get("openId")) .setAppId((String) credentials.get("appId")) - .setUserId(loginInfo.getUserId()) .setBrandId(brand.getString("id")) .setNickName((String) credentials.get("nickName")) .setAvatar((String) credentials.get("avatar")) @@ -137,9 +143,24 @@ public class MiniLoginStrategy implements LoginStrategy { .setSourceType(sourceType); } } else { + //查询中间表 + long count = DbChain.table("cp_mini_user_mid_sys") + .where("mini_id = ?", row.getString("id")) + .and("user_id = ?", loginInfo.getUserId()) + .count(); + if (count == 0) { + //插入中间表 + Row miniMidUser = new Row(); + miniMidUser.set("user_id", loginInfo.getUserId()) + .set("mini_id", row.getString("id")) + .set("create_time", now) + .set("update_time", now) + .set("create_user_id", 1) + .set("update_user_id", 1); + Db.insert("cp_mini_user_mid_sys", miniMidUser); + } loginInfo.setOpenId(row.getString("openId")) .setAppId(row.getString("appId")) - .setUserId(row.getString("userId")) .setBrandId(row.getString("brandId")) .setNickName(row.getString("nickName")) .setAvatar(row.getString("avatar")) diff --git a/Cpop-Mall/Cpop-Mall-Web/Mall-DockerD-Dockerfile b/Cpop-Mall/Cpop-Mall-Web/Mall-DockerD-Dockerfile new file mode 100644 index 0000000..f4a4096 --- /dev/null +++ b/Cpop-Mall/Cpop-Mall-Web/Mall-DockerD-Dockerfile @@ -0,0 +1,5 @@ +FROM openjdk:8-jdk +LABEL authors="Lost" +RUN mkdir -p /root/Cpop-Mall/ +ADD ./target/Cpop-Mall-Web.jar /root/Cpop-Mall/Cpop-Mall-Web.jar +ENTRYPOINT ["sh", "-c", "java -jar /root/Cpop-Mall/Cpop-Mall-Web.jar --spring.profiles.active=dockerD,core,pay"] \ No newline at end of file diff --git a/Cpop-Mall/Cpop-Mall-Web/src/main/resources/application-dockerD.yml b/Cpop-Mall/Cpop-Mall-Web/src/main/resources/application-dockerD.yml new file mode 100644 index 0000000..8202011 --- /dev/null +++ b/Cpop-Mall/Cpop-Mall-Web/src/main/resources/application-dockerD.yml @@ -0,0 +1,123 @@ +# 项目相关配置 +cpop: + # 文件路径 示例( Windows配置W:/WorkSpace/java/uploadPath,Linux配置 /home/baseFramework/uploadPath) + profile: E:/Cpop/uploadPath + jwt: + #白名单 + whiteList: /login,/miniLogin,/wxPay/callback/notify/**,/mini/brand/jamboxBrandIsInMall/*,/doc.html,/webjars/**,/favicon.ico,/v2/api-docs/**,/swagger-resources + gateway: + rsa-keypair: + # 公钥文件 + publicKeyFile: /root/Cpop-Oam/keyPair/publicKey + # 公钥文件 + privateKeyFile: /root/Cpop-Oam/keyPair/privateKey + +# DataSource Config +spring: + application: + name: Cpop-Mall-Dev + #redis配置 + redis: + #地址 + host: gz-crs-lv77ii2t.sql.tencentcdb.com + #端口 + port: 27714 + #数据库 + database: 3 + #密码 + password: Cpop2022@ + #连接超时 + timeout: 5000 + jedis: + pool: + # + min-idle: 0 + # + max-idle: 8 + # + max-active: 8 + # + max-wait: -1ms + client-type: jedis + data: + mongodb: + host: localhost + port: 27017 + database: cpop-union + +server: + port: 9430 + servlet: + context-path: /Cpop-Mall + +#Mybatis-Flex +mybatis-flex: + configuration: + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + datasource: + mall: + url: jdbc:mysql://192.168.3.61:3306/cpop_dev?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 + username: root + password: Admin@123 + jambox: + url: jdbc:mysql://sh-cynosdbmysql-grp-fggo83js.sql.tencentcdb.com:20965/jambox_test?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true + username: root + password: Customer0401 + +# springdoc-openapi项目配置 +knife4j: + enable: true + openapi: + title: Cpop-Mall开发API + description: Cpop-Mall开发API + email: + concat: DB + url: https://api.jamboxsys.com + version: 1.0.0 + license: Apache 2.0 + license-url: https://stackoverflow.com/ + terms-of-service-url: https://api.jamboxsys.com + group: + #商城 + Mall-Backstage: + #后台 + group-name: Mall-Backstage + api-rule: package + api-rule-resources: + - com.cpop.mall.business.controller.backstage + Mall-Mini: + #小程序 + group-name: Mall-Mini + api-rule: package + api-rule-resources: + - com.cpop.mall.business.controller.mini + Mall-Test: + #测试 + group-name: Mall-Test + api-rule: package + api-rule-resources: + - com.cpop.mall.business.controller.test + #系统 + System: + group-name: System + api-rule: package + api-rule-resources: + - com.cpop.system + +#商城相关配置文件 +mall: + cloudBaseUrl: https://test.cpopsz.com/test/ass/ + +#微信支付 +wx: + pay: + # p12证书的位置,可以指定绝对路径,也可以指定类路径(以classpath:开头) + keyPath: /root/Cpop-Oam/keyPair/wxPay_cert.p12 + # 私钥证书 + privateKeyPath: /root/Cpop-Oam/keyPair/wxPay_key.pem + # 私钥文件 + privateCertPath: /root/Cpop-Oam/keyPair/wxPay_cert.pem + #支付通知地址 + notifyUrl: https://frp-oak.top:11899/Cpop-Mall/callback/wxPay/notify/order + #退款通知地址 + notifyRefund: https://frp-oak.top:11899/Cpop-Mall/callback/wxPay/notify/refund diff --git a/Cpop-Mini/src/main/java/com/cpop/mini/business/entity/MiniUser.java b/Cpop-Mini/src/main/java/com/cpop/mini/business/entity/MiniUser.java index d979225..7782265 100644 --- a/Cpop-Mini/src/main/java/com/cpop/mini/business/entity/MiniUser.java +++ b/Cpop-Mini/src/main/java/com/cpop/mini/business/entity/MiniUser.java @@ -46,9 +46,9 @@ public class MiniUser extends BaseEntity implements Serializable { private String appId; /** - * 用户id + * 品牌id */ - private String userId; + private String brandId; /** * 小程序昵称 diff --git a/Cpop-Mini/src/main/java/com/cpop/mini/business/entity/MiniUserMidSys.java b/Cpop-Mini/src/main/java/com/cpop/mini/business/entity/MiniUserMidSys.java index 0fdbf3a..3db3866 100644 --- a/Cpop-Mini/src/main/java/com/cpop/mini/business/entity/MiniUserMidSys.java +++ b/Cpop-Mini/src/main/java/com/cpop/mini/business/entity/MiniUserMidSys.java @@ -39,8 +39,4 @@ public class MiniUserMidSys extends BaseEntity implements Serializable { @Id private String userId; - - - - } diff --git a/Cpop-Oam/Cpop-Oam-Web/src/test/java/com/cpop/oam/web/CpopDataSyncTests.java b/Cpop-Oam/Cpop-Oam-Web/src/test/java/com/cpop/oam/web/CpopDataSyncTests.java index c3a7181..98dc950 100644 --- a/Cpop-Oam/Cpop-Oam-Web/src/test/java/com/cpop/oam/web/CpopDataSyncTests.java +++ b/Cpop-Oam/Cpop-Oam-Web/src/test/java/com/cpop/oam/web/CpopDataSyncTests.java @@ -11,6 +11,11 @@ import com.cpop.jambox.business.service.BrandExtendService; import com.cpop.jambox.business.service.CardTemplateExtendService; import com.cpop.jambox.business.service.CardTemplateService; import com.cpop.jambox.business.service.StoreExtendService; +import com.cpop.oam.business.entity.Task; +import com.cpop.oam.business.entity.TaskWorkOrder; +import com.cpop.oam.business.mapper.TaskWorkOrderMapper; +import com.cpop.oam.business.service.TaskService; +import com.cpop.oam.business.service.TaskWorkOrderService; import com.cpop.system.business.entity.Store; import com.cpop.system.business.entity.StoreSign; import com.cpop.system.business.entity.WxPayScore; @@ -29,6 +34,7 @@ import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ActiveProfiles; +import java.time.Duration; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneId; @@ -40,6 +46,8 @@ import java.util.Map; import java.util.stream.Collectors; import static com.cpop.jambox.business.entity.table.StoreExtendTableDef.STORE_EXTEND; +import static com.cpop.oam.business.entity.table.TaskTableDef.TASK; +import static com.cpop.oam.business.entity.table.TaskWorkOrderTableDef.TASK_WORK_ORDER; import static com.cpop.system.business.entity.table.StoreSignTableDef.STORE_SIGN; import static com.cpop.system.business.entity.table.StoreTableDef.STORE; import static com.mybatisflex.core.query.QueryMethods.count; @@ -318,4 +326,29 @@ public class CpopDataSyncTests { storeService.removeByIds(collect); } + @Test + public void syncTaskOrderReceivingTime(){ + List list = SpringUtils.getBean(TaskService.class).queryChain() + .leftJoin(TASK_WORK_ORDER).on(TASK_WORK_ORDER.TASK_ID.eq(TASK.ID)) + .where(TASK.TASK_TYPE.eq(2)) + .where(TASK_WORK_ORDER.CREATE_TIME.ge(LocalDateTime.of(2024, 1, 11, 0, 0, 0))) + .list(); + List taskWorkOrders = new ArrayList<>(); + list.forEach(item->{ + if (item.getTaskReceiptTime() != null){ + TaskWorkOrder taskWorkOrder = new TaskWorkOrder(); + Long minutes = Duration.between(item.getCreateTime(), item.getTaskReceiptTime()).toMinutes(); + taskWorkOrder.setTaskId(item.getId()) + .setReceivingTime(minutes.intValue()); + taskWorkOrders.add(taskWorkOrder); + } + }); + Db.executeBatch(taskWorkOrders, TaskWorkOrderMapper.class, (mapper, data) -> { + UpdateChain.of(mapper) + .set(TASK_WORK_ORDER.RECEIVING_TIME, data.getReceivingTime()) + .where(TASK_WORK_ORDER.TASK_ID.eq(data.getTaskId())) + .update(); + }); + } + } diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/backstage/BackstageTaskWorkOrderController.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/backstage/BackstageTaskWorkOrderController.java index 582d0e6..7979864 100644 --- a/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/backstage/BackstageTaskWorkOrderController.java +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/controller/backstage/BackstageTaskWorkOrderController.java @@ -6,11 +6,7 @@ import com.cpop.oam.business.bo.PauseWorkOrderBo; import com.cpop.oam.business.bo.TaskWorkOrderBo; import com.cpop.oam.business.bo.TaskWorkOrderRecordBo; import com.cpop.oam.business.service.TaskWorkOrderService; -import com.cpop.oam.business.vo.StoreListVo; -import com.cpop.oam.business.vo.TaskWorkOrderPageVo; -import com.cpop.oam.business.vo.TaskWorkOrderReceiveDealPauseVo; -import com.cpop.oam.business.vo.TaskWorkOrderRecordListVo; -import com.cpop.oam.business.vo.WorkOrderDutyVo; +import com.cpop.oam.business.vo.*; import com.cpop.system.business.service.BrandService; import com.cpop.system.business.service.StoreService; import com.mybatisflex.core.paginate.Page; @@ -18,10 +14,12 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.format.annotation.DateTimeFormat; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.time.LocalDate; import java.util.List; import static com.cpop.system.business.entity.table.BrandTableDef.BRAND; @@ -93,8 +91,7 @@ public class BackstageTaskWorkOrderController { **/ @ApiOperation("工单模块-工单提交-新增工单") @PostMapping("/insertWorkOrder") - public R insertWorkOrder(@RequestBody @Validated - TaskWorkOrderBo bo) { + public R insertWorkOrder(@RequestBody @Validated TaskWorkOrderBo bo) { taskWorkOrderService.insertWorkOrder(bo); return R.ok(); } @@ -107,8 +104,7 @@ public class BackstageTaskWorkOrderController { */ @ApiOperation("工单模块-工单提交-工单记录列表") @GetMapping("/getWorkOrderRecordList/{workOrderId}") - public R> getWorkOrderRecordList(@PathVariable @ApiParam("工单id") - String workOrderId) { + public R> getWorkOrderRecordList(@PathVariable @ApiParam("工单id") String workOrderId) { List list = taskWorkOrderService.getWorkOrderRecordList(workOrderId); return R.ok(list); } @@ -121,8 +117,7 @@ public class BackstageTaskWorkOrderController { */ @ApiOperation("工单模块-工单提交-新增工单记录") @PostMapping("/insertWorkOrderRecord") - public R insertWorkOrderRecord(@RequestBody @Validated - TaskWorkOrderRecordBo bo) { + public R insertWorkOrderRecord(@RequestBody @Validated TaskWorkOrderRecordBo bo) { taskWorkOrderService.insertWorkOrderRecord(bo); return R.ok(); } @@ -135,8 +130,7 @@ public class BackstageTaskWorkOrderController { */ @ApiOperation("工单模块-工单提交-工单提醒") @PutMapping("/workOrderRemind/{workOrderId}") - public R workOrderRemind(@PathVariable @ApiParam("工单id") - String workOrderId) { + public R workOrderRemind(@PathVariable @ApiParam("工单id") String workOrderId) { taskWorkOrderService.workOrderRemind(workOrderId); return R.ok(); } @@ -149,8 +143,7 @@ public class BackstageTaskWorkOrderController { */ @ApiOperation("工单模块-工单提交-工单转需求") @PutMapping("/workOrderToDemand/{workOrderId}") - public R workOrderToDemand(@PathVariable @ApiParam("工单id") - String workOrderId) { + public R workOrderToDemand(@PathVariable @ApiParam("工单id") String workOrderId) { taskWorkOrderService.workOrderToDemand(workOrderId); return R.ok(); } @@ -163,8 +156,7 @@ public class BackstageTaskWorkOrderController { */ @ApiOperation("工单模块-工单提交-工单暂停") @PutMapping("/pauseWorkOrder") - public R pauseWorkOrder(@RequestBody @Validated - PauseWorkOrderBo bo) { + public R pauseWorkOrder(@RequestBody @Validated PauseWorkOrderBo bo) { taskWorkOrderService.pauseWorkOrder(bo); return R.ok(); } @@ -177,8 +169,7 @@ public class BackstageTaskWorkOrderController { */ @ApiOperation("工单模块-工单提交-工单办结") @PutMapping("/workOrderFinish/{workOrderId}") - public R workOrderFinish(@PathVariable("workOrderId") @ApiParam("工单id") - String workOrderId) { + public R workOrderFinish(@PathVariable("workOrderId") @ApiParam("工单id") String workOrderId) { taskWorkOrderService.workOrderFinish(workOrderId); return R.ok(); } @@ -191,8 +182,7 @@ public class BackstageTaskWorkOrderController { */ @ApiOperation("工单模块-工单提交-获取品牌列表") @GetMapping("/getBrandList") - public R> getBrandList(@ApiParam("品牌名") - String brandName) { + public R> getBrandList(@ApiParam("品牌名") String brandName) { List list = brandService.queryChain().and(BRAND.BRAND_NAME.like(brandName)).listAs(BrandListVo.class); return R.ok(list); } @@ -205,10 +195,26 @@ public class BackstageTaskWorkOrderController { */ @ApiOperation("工单模块-工单提交-获取校区/店铺列表") @GetMapping("/getStoreList") - public R> getStoreList(@ApiParam("品牌id") - String brandId) { + public R> getStoreList(@ApiParam("品牌id") String brandId) { List list = storeService.queryChain().and(STORE.BRAND_ID.eq(brandId)).listAs(StoreListVo.class); return R.ok(list); } + /** + * 工单统计-获取工单统计分页 + * @author DB + * @since 2024/1/31 + * @param staffId 员工id + * @param startDate 开始日期 + * @param endDate 结束日期 + * @return R> + */ + @ApiOperation("工单统计-获取工单统计分页") + @GetMapping("/getWorkOrderStatPage") + public R> getWorkOrderStatPage(@ApiParam("员工id") @RequestParam(value = "staffId", required = false) String staffId, + @RequestParam(value = "startDate", required = false) @ApiParam("开始日期") @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate startDate, + @RequestParam(value = "endDate", required = false) @ApiParam("结束日期") @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate endDate) { + Page page = taskWorkOrderService.getWorkOrderStatPage(staffId, startDate, endDate); + return R.ok(page); + } } diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/TaskWorkOrderService.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/TaskWorkOrderService.java index b76b795..0507e9c 100644 --- a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/TaskWorkOrderService.java +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/TaskWorkOrderService.java @@ -1,16 +1,12 @@ package com.cpop.oam.business.service; -import com.cpop.oam.business.vo.TaskWorkOrderPersonVo; -import com.cpop.oam.business.vo.TaskWorkOrderReceiveDealPauseVo; -import com.cpop.oam.business.vo.WorkOrderDutyVo; +import com.cpop.oam.business.vo.*; import com.mybatisflex.core.paginate.Page; import com.mybatisflex.core.service.IService; import com.cpop.oam.business.bo.PauseWorkOrderBo; import com.cpop.oam.business.bo.TaskWorkOrderBo; import com.cpop.oam.business.bo.TaskWorkOrderRecordBo; import com.cpop.oam.business.entity.TaskWorkOrder; -import com.cpop.oam.business.vo.TaskWorkOrderPageVo; -import com.cpop.oam.business.vo.TaskWorkOrderRecordListVo; import java.time.LocalDate; import java.util.List; @@ -115,4 +111,15 @@ public interface TaskWorkOrderService extends IService { * @since 2023/12/04 */ void whetherReceive(String taskWorkOrderId); + + /** + * 工单统计-获取工单统计分页 + * @author DB + * @since 2024/1/31 + * @param staffId 员工id + * @param startDate 开始日期 + * @param endDate 结束日期 + * @return R> + */ + Page getWorkOrderStatPage(String staffId,LocalDate startDate,LocalDate endDate); } diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/TaskWorkOrderServiceImpl.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/TaskWorkOrderServiceImpl.java index dded892..abe341f 100644 --- a/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/TaskWorkOrderServiceImpl.java +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/service/impl/TaskWorkOrderServiceImpl.java @@ -39,21 +39,25 @@ import org.springframework.transaction.annotation.Transactional; import java.io.IOException; import java.sql.Date; import java.text.ParseException; +import java.time.Duration; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.format.DateTimeFormatter; +import java.time.temporal.TemporalAdjusters; import java.util.*; import java.util.stream.Collectors; import static com.cpop.core.base.table.table.SysUserTableDef.SYS_USER; import static com.cpop.oam.business.entity.table.DutyTableDef.DUTY; import static com.cpop.oam.business.entity.table.StaffTableDef.STAFF; +import static com.cpop.oam.business.entity.table.TaskStaffGroupTableDef.TASK_STAFF_GROUP; import static com.cpop.oam.business.entity.table.TaskTableDef.TASK; import static com.cpop.oam.business.entity.table.TaskWorkOrderRecordTableDef.TASK_WORK_ORDER_RECORD; import static com.cpop.oam.business.entity.table.TaskWorkOrderTableDef.TASK_WORK_ORDER; import static com.cpop.system.business.entity.table.BrandTableDef.BRAND; import static com.cpop.system.business.entity.table.StoreTableDef.STORE; +import static com.mybatisflex.core.query.QueryMethods.dateFormat; /** * 任务-工单表 服务层实现。 @@ -63,8 +67,7 @@ import static com.cpop.system.business.entity.table.StoreTableDef.STORE; */ @Slf4j @Service("taskWorkOrderService") -public class TaskWorkOrderServiceImpl extends ServiceImpl - implements TaskWorkOrderService { +public class TaskWorkOrderServiceImpl extends ServiceImpl implements TaskWorkOrderService { @Autowired private Scheduler scheduler; @@ -199,7 +202,8 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl item.field(TaskWorkOrderPageVo::getFinishStaffName) .queryWrapper(finishStaff -> queryChain().select(STAFF.NAME.as("finishStaffName")) @@ -414,7 +418,6 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl phoneList = new ArrayList<>(); StaffService staffService = SpringUtils.getBean(StaffService.class); - if (loginUserInfo.getInteger("staffType") == 1) { // 负责人手机号 StaffInfoVo responsibleStaff = staffService.getStaffInfo(task.getResponsibleStaffId()); @@ -536,12 +539,19 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl phoneList = new ArrayList<>(); phoneList.add(responsibleStaff.getPhoneNumber()); phoneList.add(loginUserInfo.getString("phoneNumber")); @@ -550,8 +560,7 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl staffIds = new HashSet<>(); @@ -649,7 +668,7 @@ public class TaskWorkOrderServiceImpl extends ServiceImpl> + */ + @Override + public Page getWorkOrderStatPage(String staffId,LocalDate startDate,LocalDate endDate) { + PageDomain pageDomain = SqlUtils.getInstance().getPageDomain(); + QueryWrapper queryWrapper = QueryWrapper.create(); + if (startDate == null && endDate == null) { + LocalDate now = LocalDate.now(); + // 获取目标月的第一天 + LocalDate firstDay = now.with(TemporalAdjusters.firstDayOfMonth()); + // 获取目标月的最后一天 + LocalDate lastDay = now.with(TemporalAdjusters.lastDayOfMonth()); + //获取当月绩点 + queryWrapper.where(dateFormat(TASK_WORK_ORDER.CREATE_TIME, "%Y-%m-%d").between(firstDay, lastDay)); + } else { + queryWrapper.where(dateFormat(TASK_WORK_ORDER.CREATE_TIME, "%Y-%m-%d").between(startDate, endDate)); + } + return this.mapper.paginateAs(Page.of(pageDomain.getPageNum(), pageDomain.getPageSize()), queryWrapper + .select(TASK_WORK_ORDER.ID,BRAND.BRAND_NAME,STORE.STORE_NAME,TASK_WORK_ORDER.RECEIVING_TIME,TASK.TASK_CONTENT,TASK_WORK_ORDER.PAUSE_STAFF_ID,TASK_WORK_ORDER.PAUSE_EXPIRE_TIME, + TASK_WORK_ORDER.PAUSE_RECORD_TIME,TASK_WORK_ORDER.FINISH_STAFF_ID,TASK_WORK_ORDER.FINISH_TIME,TASK.RECORD_STAFF_ID,TASK.RESPONSIBLE_STAFF_ID,TASK.TASK_RECEIPT_TIME, + TASK_STAFF_GROUP.GRADE_POINT,TASK_STAFF_GROUP.REMARK,TASK.TASK_STATUS) + .leftJoin(BRAND).on(BRAND.ID.eq(TASK_WORK_ORDER.BRAND_ID)) + .leftJoin(STORE).on(STORE.ID.eq(TASK_WORK_ORDER.STORE_ID)) + .leftJoin(TASK).on(TASK.ID.eq(TASK_WORK_ORDER.TASK_ID)) + .leftJoin(TASK_STAFF_GROUP).on(TASK_STAFF_GROUP.TASK_ID.eq(TASK.ID)) + .and(TASK.RESPONSIBLE_STAFF_ID.eq(staffId)) + .orderBy(TASK_WORK_ORDER.CREATE_TIME.desc()), + TaskWorkOrderStatPageVo.class, + // 暂停人 + item -> item.field(TaskWorkOrderStatPageVo::getPauseStaffName) + .queryWrapper(pauseStaffName -> { + if (StringUtils.isNotBlank(pauseStaffName.getPauseStaffId())) { + return queryChain().select(STAFF.NAME.as(TaskWorkOrderStatPageVo::getPauseStaffName)) + .from(STAFF) + .where(STAFF.ID.eq(pauseStaffName.getPauseStaffId())); + } else { + return null; + } + }), + // 办结人 + item -> item.field(TaskWorkOrderStatPageVo::getFinishStaffName) + .queryWrapper(finishStaffName -> { + if (StringUtils.isNotBlank(finishStaffName.getFinishStaffId())) { + return queryChain().select(STAFF.NAME.as(TaskWorkOrderStatPageVo::getFinishStaffName)) + .from(STAFF) + .where(STAFF.ID.eq(finishStaffName.getFinishStaffId())); + } else { + return null; + } + }), + // 记录人 + item -> item.field(TaskWorkOrderStatPageVo::getRecordStaffName) + .queryWrapper(recordStaffName -> { + if (StringUtils.isNotBlank(recordStaffName.getRecordStaffId())) { + return queryChain().select(STAFF.NAME.as(TaskWorkOrderStatPageVo::getRecordStaffName)) + .from(STAFF) + .where(STAFF.ID.eq(recordStaffName.getRecordStaffId())); + } else { + return null; + } + }), + // 负责人 + item -> item.field(TaskWorkOrderStatPageVo::getResponsibleStaffName) + .queryWrapper(responsibleStaffName -> { + if (StringUtils.isNotBlank(responsibleStaffName.getResponsibleStaffId())){ + return queryChain().select(STAFF.NAME.as(TaskWorkOrderStatPageVo::getResponsibleStaffName)) + .from(STAFF) + .where(STAFF.ID.eq(responsibleStaffName.getResponsibleStaffId())); + } else { + return null; + } + })); + } } diff --git a/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/TaskWorkOrderStatPageVo.java b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/TaskWorkOrderStatPageVo.java new file mode 100644 index 0000000..08308bc --- /dev/null +++ b/Cpop-Oam/src/main/java/com/cpop/oam/business/vo/TaskWorkOrderStatPageVo.java @@ -0,0 +1,144 @@ +package com.cpop.oam.business.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.time.LocalDateTime; + +/** + * @author DB + * @version 1.0.0 + * @since 2024-01-31 12:39 + */ +@Data +@Accessors(chain = true) +@ApiModel(value = "TaskWorkOrderStatPageVo对象", description = "工单统计") +public class TaskWorkOrderStatPageVo { + + /** + * id + */ + @ApiModelProperty(value = "id") + private String id; + + /** + * 品牌 + */ + @ApiModelProperty(value = "品牌") + private String brandName; + + /** + * 校区店铺 + */ + @ApiModelProperty(value = "校区店铺") + private String storeName; + + /** + * 接收用时 + */ + @ApiModelProperty(value = "接收用时") + private Integer receivingTime; + + /** + * 任务内容 + */ + @ApiModelProperty("任务内容") + private String taskContent; + + /** + * 暂停员工id + */ + @ApiModelProperty("暂停员工id") + private String pauseStaffId; + + /** + * 暂停员工 + */ + @ApiModelProperty("暂停员工") + private String pauseStaffName; + + /** + * 暂停记录时间 + */ + @ApiModelProperty("暂停记录时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime pauseRecordTime; + + /** + * 暂停到期时间 + */ + @ApiModelProperty("暂停到期时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime pauseExpireTime; + + /** + * 办结员工id + */ + @ApiModelProperty("办结员工id") + private String finishStaffId; + + /** + * 办结员工 + */ + @ApiModelProperty("办结员工") + private String finishStaffName; + + /** + * 办结时间 + */ + @ApiModelProperty("办结时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime finishTime; + + /** + * 记录员工id + */ + @ApiModelProperty("记录员工id") + private String recordStaffId; + + /** + * 记录员工 + */ + @ApiModelProperty("记录员工") + private String recordStaffName; + + /** + * 主要负责员工id + */ + @ApiModelProperty("主要负责员工id") + private String responsibleStaffId; + + /** + * 主要负责员工 + */ + @ApiModelProperty("主要负责员工") + private String responsibleStaffName; + + /** + * 任务接收时间 + */ + @ApiModelProperty("任务接收时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime taskReceiptTime; + + /** + * 绩点 + */ + @ApiModelProperty("绩点") + private Integer gradePoint; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String remark; + + /** + * 任务状态 + */ + @ApiModelProperty("任务状态") + private Integer taskStatus; +} diff --git a/Cpop-System/src/main/java/com/cpop/system/business/controller/mini/MiniSysCommonController.java b/Cpop-System/src/main/java/com/cpop/system/business/controller/mini/MiniSysCommonController.java index e6d49bf..ce3ce70 100644 --- a/Cpop-System/src/main/java/com/cpop/system/business/controller/mini/MiniSysCommonController.java +++ b/Cpop-System/src/main/java/com/cpop/system/business/controller/mini/MiniSysCommonController.java @@ -43,7 +43,7 @@ public class MiniSysCommonController { */ @Deprecated @ApiOperation("小程序同步品牌和校区") - @PostMapping("/syncBrandAndStore") + @PostMapping("/miniSyncBrandAndStore") public R miniSyncBrandAndStore(@RequestBody SyncBrandAndStoreBo bo) { storeService.miniSyncBrandAndStore(bo); return R.ok(); diff --git a/Cpop-System/src/main/java/com/cpop/system/business/controller/mini/SysCommonController.java b/Cpop-System/src/main/java/com/cpop/system/business/controller/mini/SysCommonController.java deleted file mode 100644 index 620adf8..0000000 --- a/Cpop-System/src/main/java/com/cpop/system/business/controller/mini/SysCommonController.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.cpop.system.business.controller.mini; - -import com.cpop.core.base.R; -import com.cpop.system.business.bo.SyncBrandAndStoreBo; -import com.cpop.system.business.service.StoreService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * @author DB - * @createTime 2023/09/13 15:10 - * @description 通用接口 - */ -@Slf4j -@Api(tags = "通用接口") -@RestController -@RequestMapping("sysCommon") -@Deprecated -public class SysCommonController { - - @Autowired - private StoreService storeService; - - /** - * 小程序同步品牌和校区 - * @author DB - * @since 2023/12/21 - * @param bo 请求参数 - * @return R - */ - @Deprecated - @ApiOperation("小程序同步品牌和校区") - @PostMapping("/syncBrandAndStore") - public R miniSyncBrandAndStore(@RequestBody SyncBrandAndStoreBo bo) { - storeService.miniSyncBrandAndStore(bo); - return R.ok(); - } -}