From 014e591916dea4cb2cb1b21fec69078042bc5325 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=86=E6=98=9F=E9=9C=96?= <729219176@qq.com> Date: Fri, 27 Sep 2024 12:14:59 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=A3=B0=E9=9F=B3?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E5=90=8E=E5=8F=B0=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/ghy/GhyApplication.java | 2 + .../config/SysGlobalConfigController.java | 57 +++++++ .../order/OrderDetailController.java | 14 ++ .../order/OrderMasterController.java | 14 ++ .../web/pojo/vo/SysGlobalConfigRequestVO.java | 54 ++++++ .../pojo/vo/SysGlobalConfigResponseVO.java | 116 +++++++++++++ .../templates/config/globalConfig/edit.html | 134 +++++++++++++++ .../ghy/common/annotation/SysConstants.java | 37 +++++ .../enums/SysGlobalConfigDataTypeEnum.java | 89 ++++++++++ .../ghy/common/enums/SysGlobalConfigEnum.java | 82 ++++++++++ .../java/com/ghy/common/utils/DateUtils.java | 40 +++++ .../ghy/common/utils/ObjectVerifyUtils.java | 67 ++++++++ .../ghy/order/mapper/OrderDetailMapper.java | 3 + .../ghy/order/mapper/OrderMasterMapper.java | 5 + .../pojo/dto/OrderDetailStatisticsDTO.java | 39 +++++ .../pojo/dto/OrderMasterStatisticsDTO.java | 69 ++++++++ .../quartz/OrderMasterStatisticsTask.java | 37 +++++ .../ghy/order/service/OrderDetailService.java | 13 ++ .../ghy/order/service/OrderMasterService.java | 13 ++ .../service/impl/OrderDetailServiceImpl.java | 107 +++++++++++- .../service/impl/OrderMasterServiceImpl.java | 154 ++++++++++++++++++ .../mapper/order/OrderDetailMapper.xml | 124 ++++++++------ .../mapper/order/OrderMasterMapper.xml | 15 ++ .../ghy/system/domain/SysGlobalConfig.java | 73 +++++++++ .../system/mapper/SysGlobalConfigMapper.java | 38 +++++ .../service/ISysGlobalConfigService.java | 63 +++++++ .../impl/SysGlobalConfigServiceImpl.java | 112 +++++++++++++ .../mapper/system/SysGlobalConfigMapper.xml | 105 ++++++++++++ 28 files changed, 1619 insertions(+), 57 deletions(-) create mode 100644 ghy-admin/src/main/java/com/ghy/web/controller/config/SysGlobalConfigController.java create mode 100644 ghy-admin/src/main/java/com/ghy/web/pojo/vo/SysGlobalConfigRequestVO.java create mode 100644 ghy-admin/src/main/java/com/ghy/web/pojo/vo/SysGlobalConfigResponseVO.java create mode 100644 ghy-admin/src/main/resources/templates/config/globalConfig/edit.html create mode 100644 ghy-common/src/main/java/com/ghy/common/annotation/SysConstants.java create mode 100644 ghy-common/src/main/java/com/ghy/common/enums/SysGlobalConfigDataTypeEnum.java create mode 100644 ghy-common/src/main/java/com/ghy/common/enums/SysGlobalConfigEnum.java create mode 100644 ghy-common/src/main/java/com/ghy/common/utils/ObjectVerifyUtils.java create mode 100644 ghy-order/src/main/java/com/ghy/order/pojo/dto/OrderDetailStatisticsDTO.java create mode 100644 ghy-order/src/main/java/com/ghy/order/pojo/dto/OrderMasterStatisticsDTO.java create mode 100644 ghy-order/src/main/java/com/ghy/order/quartz/OrderMasterStatisticsTask.java create mode 100644 ghy-system/src/main/java/com/ghy/system/domain/SysGlobalConfig.java create mode 100644 ghy-system/src/main/java/com/ghy/system/mapper/SysGlobalConfigMapper.java create mode 100644 ghy-system/src/main/java/com/ghy/system/service/ISysGlobalConfigService.java create mode 100644 ghy-system/src/main/java/com/ghy/system/service/impl/SysGlobalConfigServiceImpl.java create mode 100644 ghy-system/src/main/resources/mapper/system/SysGlobalConfigMapper.xml diff --git a/ghy-admin/src/main/java/com/ghy/GhyApplication.java b/ghy-admin/src/main/java/com/ghy/GhyApplication.java index 9fe241ad..665e3300 100644 --- a/ghy-admin/src/main/java/com/ghy/GhyApplication.java +++ b/ghy-admin/src/main/java/com/ghy/GhyApplication.java @@ -4,6 +4,7 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.context.annotation.Bean; +import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.web.client.RestTemplate; /** @@ -11,6 +12,7 @@ import org.springframework.web.client.RestTemplate; * * @author clunt */ +@EnableScheduling @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class }) public class GhyApplication { diff --git a/ghy-admin/src/main/java/com/ghy/web/controller/config/SysGlobalConfigController.java b/ghy-admin/src/main/java/com/ghy/web/controller/config/SysGlobalConfigController.java new file mode 100644 index 00000000..7f5add09 --- /dev/null +++ b/ghy-admin/src/main/java/com/ghy/web/controller/config/SysGlobalConfigController.java @@ -0,0 +1,57 @@ +package com.ghy.web.controller.config; + +import com.ghy.common.core.domain.AjaxResult; +import com.ghy.system.service.ISysGlobalConfigService; +import com.ghy.web.pojo.vo.SysGlobalConfigRequestVO; +import com.ghy.web.pojo.vo.SysGlobalConfigResponseVO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.*; + +/** + * @Author: 但星霖 + * @Date: 2023-11-09 14:42 + * @Version: 1.0 + * @Description: web-系统配置控制层 + */ +@RestController +@RequestMapping("/web/sys/global/config") +@Tag(name = "web-系统配置控制层") +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +public class SysGlobalConfigController { + + private String prefix = "config/globalConfig"; + + @RequiresPermissions("sys:order:audio:config") + @GetMapping() + public String place() { + return prefix + "/edit"; + } + + private final ISysGlobalConfigService service; + + + @Operation(summary = "系统配置查询接口(根据类型查询)", method = "GET") + @Parameters({ + @Parameter(name = "typeId", description = "配置类型Code", required = true, in = ParameterIn.PATH) + }) + @GetMapping(path = "/search/type/{typeId}", produces = MediaType.APPLICATION_JSON_VALUE) + public AjaxResult searchByType(@PathVariable("typeId") Integer typeId) { + return AjaxResult.success(SysGlobalConfigResponseVO.toVo(service.loadByConfigType(typeId))); + } + + @RequiresPermissions("sys:order:audio:config:update") + @Operation(summary = "系统配置修改", method = "PUT") + @PutMapping(path = "/update", produces = MediaType.APPLICATION_JSON_VALUE) + public AjaxResult update(@RequestBody SysGlobalConfigRequestVO sysConfigRequestVO) { + return AjaxResult.success(service.update(SysGlobalConfigRequestVO.toModel(sysConfigRequestVO))); + } + +} diff --git a/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderDetailController.java b/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderDetailController.java index 62ab9bf9..ae2ccbae 100644 --- a/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderDetailController.java +++ b/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderDetailController.java @@ -34,9 +34,11 @@ import com.ghy.worker.domain.WorkerCertification; import com.ghy.worker.service.IWorkerCertificationService; import com.ghy.worker.service.WorkerService; import com.huifu.adapay.core.exception.BaseAdaPayException; +import io.swagger.v3.oas.annotations.Operation; import org.apache.commons.collections.CollectionUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Controller; import org.springframework.transaction.annotation.Transactional; @@ -1296,4 +1298,16 @@ public class OrderDetailController extends BaseController { public AjaxResult afterDetailOrderCount(OrderDetail orderDetail) { return AjaxResult.success(orderDetailService.afterDetailOrderCount(orderDetail)); } + + @Operation(summary = "获取当天订单统计数据", method = "GET") + @GetMapping(path = "/statistics/now", produces = MediaType.APPLICATION_JSON_VALUE) + public AjaxResult statisticsNow() { + return AjaxResult.success(orderDetailService.orderStatisticsReturnByNow()); + } + + @Operation(summary = "获取全部订单统计数据", method = "GET") + @GetMapping(path = "/statistics", produces = MediaType.APPLICATION_JSON_VALUE) + public AjaxResult statistics() { + return AjaxResult.success(orderDetailService.orderStatisticsReturn()); + } } diff --git a/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderMasterController.java b/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderMasterController.java index 3432431c..aded6116 100644 --- a/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderMasterController.java +++ b/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderMasterController.java @@ -45,12 +45,14 @@ import com.ghy.worker.domain.WorkerCertification; import com.ghy.worker.service.IWorkerCertificationService; import com.ghy.worker.service.WorkerService; import com.huifu.adapay.core.exception.BaseAdaPayException; +import io.swagger.v3.oas.annotations.Operation; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.exception.ExceptionUtils; import org.apache.ibatis.annotations.Param; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; import org.springframework.stereotype.Controller; import org.springframework.transaction.annotation.Transactional; import org.springframework.ui.ModelMap; @@ -1613,4 +1615,16 @@ public class OrderMasterController extends BaseController { } return AjaxResult.success(orderMasterService.countOrderMasterList(orderMaster)); } + + @Operation(summary = "获取当天订单统计数据", method = "GET") + @GetMapping(path = "/statistics/now", produces = MediaType.APPLICATION_JSON_VALUE) + public AjaxResult statisticsNow() { + return AjaxResult.success(orderMasterService.orderStatisticsReturnByNow()); + } + + @Operation(summary = "获取全部订单统计数据", method = "GET") + @GetMapping(path = "/statistics", produces = MediaType.APPLICATION_JSON_VALUE) + public AjaxResult statistics() { + return AjaxResult.success(orderMasterService.orderStatisticsReturn()); + } } diff --git a/ghy-admin/src/main/java/com/ghy/web/pojo/vo/SysGlobalConfigRequestVO.java b/ghy-admin/src/main/java/com/ghy/web/pojo/vo/SysGlobalConfigRequestVO.java new file mode 100644 index 00000000..604455e0 --- /dev/null +++ b/ghy-admin/src/main/java/com/ghy/web/pojo/vo/SysGlobalConfigRequestVO.java @@ -0,0 +1,54 @@ +package com.ghy.web.pojo.vo; + +import com.ghy.system.domain.SysGlobalConfig; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; +import lombok.experimental.Accessors; +import org.springframework.beans.BeanUtils; + +/** + * @Author 但星霖 + * @Date 2023-03-20 20:37:16 + * 说明:系统配置返回vo + */ +@Data +@ToString +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +@Schema(description = "系统配置请求返回vo") +public class SysGlobalConfigRequestVO { + + @Schema(description = "配置项主键ID") + private Long id; + + @Schema(description = "配置项名称") + private String name; + + @Schema(description = "配置项内容json串") + private String content; + + @Schema(description = "排序号") + private Integer sort; + + @Schema(description = "描述") + private String describe; + + @Schema(description = "配置类型") + private Integer type; + + @Schema(description = "数据内容类型") + private Integer dataType; + + @Schema(description = "单位") + private String unit; + + public static SysGlobalConfig toModel(SysGlobalConfigRequestVO vo){ + SysGlobalConfig sysConfig = new SysGlobalConfig(); + BeanUtils.copyProperties(vo, sysConfig); + return sysConfig; + } +} diff --git a/ghy-admin/src/main/java/com/ghy/web/pojo/vo/SysGlobalConfigResponseVO.java b/ghy-admin/src/main/java/com/ghy/web/pojo/vo/SysGlobalConfigResponseVO.java new file mode 100644 index 00000000..60e9886d --- /dev/null +++ b/ghy-admin/src/main/java/com/ghy/web/pojo/vo/SysGlobalConfigResponseVO.java @@ -0,0 +1,116 @@ +package com.ghy.web.pojo.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.ghy.common.annotation.SysConstants; +import com.ghy.common.enums.SysGlobalConfigDataTypeEnum; +import com.ghy.common.enums.SysGlobalConfigEnum; +import com.ghy.common.utils.ObjectVerifyUtils; +import com.ghy.system.domain.SysGlobalConfig; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; +import lombok.experimental.Accessors; +import org.springframework.beans.BeanUtils; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * @Author 但星霖 + * @Date 2023-03-20 20:37:16 + * 说明:系统配置返回vo + */ +@Data +@ToString +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +@Schema(description = "系统配置返回vo") +public class SysGlobalConfigResponseVO { + + @Schema(description = "配置项主键ID") + private Long id; + + @Schema(description = "配置项名称") + private String name; + + @Schema(description = "配置项内容json串") + private String content; + + @Schema(description = "排序号") + private Integer sort; + + @Schema(description = "描述") + private String describe; + + @Schema(description = "配置类型") + private Integer type; + + @Schema(description = "配置类型枚举") + private SysGlobalConfigEnum typeEnum; + + @Schema(description = "配置类型Desc") + private String typeEnumDesc; + + @Schema(description = "数据内容类型") + private Integer dataType; + + @Schema(description = "数据内容类型") + private SysGlobalConfigDataTypeEnum dataTypeEnum; + + @Schema(description = "数据内容类型") + private String dataTypeEnumDesc; + + @Schema(description = "单位") + private String unit; + + @JsonInclude(value = JsonInclude.Include.NON_NULL) + @JsonFormat(pattern = SysConstants.DATE_TIME_FORMAT, locale = "zh", timezone = "GMT+8") + @Schema(description = "创建时间") + private Date createTime; + + @JsonInclude(value = JsonInclude.Include.NON_NULL) + @JsonFormat(pattern = SysConstants.DATE_TIME_FORMAT, locale = "zh", timezone = "GMT+8") + @Schema(description = "更新时间") + private Date updateTime; + + public static SysGlobalConfigResponseVO toVo(SysGlobalConfig model) { + if (ObjectVerifyUtils.isNull(model)) { + return null; + } + SysGlobalConfigResponseVO vo = new SysGlobalConfigResponseVO(); + BeanUtils.copyProperties(model, vo); + // 配置类型 + if (ObjectVerifyUtils.isNotNull(model.getType())) { + SysGlobalConfigEnum configEnum = SysGlobalConfigEnum.parse(model.getType()); + if (ObjectVerifyUtils.isNotNull(configEnum)) { + vo.setTypeEnum(configEnum); + vo.setTypeEnumDesc(configEnum.desc()); + } + } + // 配置类型数据类型 + if (ObjectVerifyUtils.isNotNull(model.getDataType())) { + SysGlobalConfigDataTypeEnum sysConfigDataTypeEnum = SysGlobalConfigDataTypeEnum.parse(model.getDataType()); + if (ObjectVerifyUtils.isNotNull(sysConfigDataTypeEnum)) { + vo.setDataTypeEnum(sysConfigDataTypeEnum); + vo.setDataTypeEnumDesc(sysConfigDataTypeEnum.desc()); + } + } + // 时间类单独处理 + vo.setCreateTime(ObjectVerifyUtils.isNotNull(model.getCreateTime()) ? new Date(model.getCreateTime()) : null); + vo.setUpdateTime(ObjectVerifyUtils.isNotNull(model.getUpdateTime()) ? new Date(model.getUpdateTime()) : null); + return vo; + } + + public static List toVoList(List sysConfigList) { + List voList = new ArrayList<>(); + if (ObjectVerifyUtils.isNotEmpty(sysConfigList)) { + sysConfigList.forEach(sysConfig -> voList.add(toVo(sysConfig))); + } + return voList; + } +} diff --git a/ghy-admin/src/main/resources/templates/config/globalConfig/edit.html b/ghy-admin/src/main/resources/templates/config/globalConfig/edit.html new file mode 100644 index 00000000..96bee0a0 --- /dev/null +++ b/ghy-admin/src/main/resources/templates/config/globalConfig/edit.html @@ -0,0 +1,134 @@ + + + + + + + + + + +
+
+ +

基本信息

+
+
+
+ +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+ + + + + + + + + + + + + +

其他信息

+
+
+
+ +
+ +
+
+
+
+
+
+ + + + + + + \ No newline at end of file diff --git a/ghy-common/src/main/java/com/ghy/common/annotation/SysConstants.java b/ghy-common/src/main/java/com/ghy/common/annotation/SysConstants.java new file mode 100644 index 00000000..d0ac337c --- /dev/null +++ b/ghy-common/src/main/java/com/ghy/common/annotation/SysConstants.java @@ -0,0 +1,37 @@ +package com.ghy.common.annotation; + +import java.util.Date; + +public interface SysConstants { + + /** + * 系统启动时间 + */ + Date SYSTEM_START_TIME = new Date(); + + /** + * 系统默认编码 + */ + String DEFAULT_CHAR_SET = "UTF-8"; + + /** + * 日期格式 + */ + String DATE_FORMAT = "yyyy-MM-dd"; + + /** + * 只要月份日期格式 + */ + String NOVEMBER_DATE_FORMAT = "MM-dd"; + + /** + * 日期时间格式 + */ + String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; + + /** + * 登陆后的标志 + */ + String TOKEN_PARA_NAME = "Authentication"; + +} diff --git a/ghy-common/src/main/java/com/ghy/common/enums/SysGlobalConfigDataTypeEnum.java b/ghy-common/src/main/java/com/ghy/common/enums/SysGlobalConfigDataTypeEnum.java new file mode 100644 index 00000000..1431df97 --- /dev/null +++ b/ghy-common/src/main/java/com/ghy/common/enums/SysGlobalConfigDataTypeEnum.java @@ -0,0 +1,89 @@ +package com.ghy.common.enums; + +import org.apache.commons.lang3.StringUtils; + +import java.util.Arrays; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @Author 但星霖 + * @Date 2023-03-30 11:26:22 + * 说明:系统全局配置枚举相关 + */ +public enum SysGlobalConfigDataTypeEnum implements IEnumType { + + VALUE_TIME_SECS(1, "时间-秒"), + VALUE_TIME_MIN(2, "时间-分"), + VALUE_TIME_HOUR(3, "时间-时"), + VALUE_TIME_DAY(4, "时间-天"), + VALUE_TIME_WEEK(5, "时间-周"), + VALUE_TIME_MONTH(6, "时间-月"), + VALUE_TIME_YEAR(7, "时间-年"), + VALUE_TEXT(10, "文本"), + VALUE_JSON(11, "JSON"), + ; + + private final int code; + private final String desc; + + private final static Map BY_CODE_MAP + = Arrays.stream(SysGlobalConfigDataTypeEnum.values()).collect(Collectors.toMap(SysGlobalConfigDataTypeEnum::code, code -> code)); + + private final static Map BY_NAME_MAP + = Arrays.stream(SysGlobalConfigDataTypeEnum.values()).collect(Collectors.toMap(code -> code.name().toLowerCase(), code -> code)); + + + /** + * @param code 代码 + * @param desc 描述 + */ + SysGlobalConfigDataTypeEnum(final int code, final String desc) { + this.code = code; + this.desc = desc; + } + + @Override + public int code() { + return this.code; + } + + @Override + public String desc() { + return this.desc; + } + + /** + * @param code 代码 + * @return 转换出来的状态码 + */ + public static SysGlobalConfigDataTypeEnum parse(Integer code) { + return BY_CODE_MAP.get(code); + } + + public static SysGlobalConfigDataTypeEnum parse(Integer code, SysGlobalConfigDataTypeEnum defaultState) { + return BY_CODE_MAP.getOrDefault(code, defaultState); + } + + /** + * @param name 名字 + * @return 转换出来的状态码 + */ + public static SysGlobalConfigDataTypeEnum parse(String name) { + if (StringUtils.isBlank(name)) { + return null; + } + return BY_NAME_MAP.get(name.trim().toLowerCase()); + } + + public static SysGlobalConfigDataTypeEnum parse(String name, SysGlobalConfigDataTypeEnum defaultState) { + if (StringUtils.isBlank(name)) { + return defaultState; + } + return BY_NAME_MAP.getOrDefault(name.trim().toLowerCase(), defaultState); + } +} + + + + diff --git a/ghy-common/src/main/java/com/ghy/common/enums/SysGlobalConfigEnum.java b/ghy-common/src/main/java/com/ghy/common/enums/SysGlobalConfigEnum.java new file mode 100644 index 00000000..1945f4e7 --- /dev/null +++ b/ghy-common/src/main/java/com/ghy/common/enums/SysGlobalConfigEnum.java @@ -0,0 +1,82 @@ +package com.ghy.common.enums; + + +import org.apache.commons.lang3.StringUtils; + +import java.util.Arrays; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @Author 但星霖 + * @Date 2023-03-30 11:26:22 + * 说明:系统配置枚举相关 + */ +public enum SysGlobalConfigEnum implements IEnumType { + + ORDER_REMIND_AUDIO_CONFIG(1001, "订单提醒音频配置"), + ; + + private final int code; + private final String desc; + + private final static Map BY_CODE_MAP + = Arrays.stream(SysGlobalConfigEnum.values()).collect(Collectors.toMap(SysGlobalConfigEnum::code, code -> code)); + + private final static Map BY_NAME_MAP + = Arrays.stream(SysGlobalConfigEnum.values()).collect(Collectors.toMap(code -> code.name().toLowerCase(), code -> code)); + + + /** + * @param code 代码 + * @param desc 描述 + */ + SysGlobalConfigEnum(final int code, final String desc) { + this.code = code; + this.desc = desc; + } + + @Override + public int code() { + return this.code; + } + + @Override + public String desc() { + return this.desc; + } + + /** + * @param code 代码 + * @return 转换出来的状态码 + */ + public static SysGlobalConfigEnum parse(Integer code) { + return BY_CODE_MAP.get(code); + } + + public static SysGlobalConfigEnum parse(Integer code, SysGlobalConfigEnum defaultState) { + return BY_CODE_MAP.getOrDefault(code, defaultState); + } + + /** + * @param name 名字 + * @return 转换出来的状态码 + */ + public static SysGlobalConfigEnum parse(String name) { + if (StringUtils.isBlank(name)) { + return null; + } + return BY_NAME_MAP.get(name.trim().toLowerCase()); + } + + public static SysGlobalConfigEnum parse(String name, SysGlobalConfigEnum defaultState) { + if (StringUtils.isBlank(name)) { + return defaultState; + } + return BY_NAME_MAP.getOrDefault(name.trim().toLowerCase(), defaultState); + } +} + + + + diff --git a/ghy-common/src/main/java/com/ghy/common/utils/DateUtils.java b/ghy-common/src/main/java/com/ghy/common/utils/DateUtils.java index b2a5cf42..0651f346 100644 --- a/ghy-common/src/main/java/com/ghy/common/utils/DateUtils.java +++ b/ghy-common/src/main/java/com/ghy/common/utils/DateUtils.java @@ -3,6 +3,11 @@ package com.ghy.common.utils; import java.lang.management.ManagementFactory; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.time.Instant; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.util.Calendar; import java.util.Date; import org.apache.commons.lang3.time.DateFormatUtils; @@ -28,6 +33,19 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM", "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"}; + /** + * 时间转换 + * + * @param dateTime 时间 + * @return 转换后的时间类型 + */ + public static String timeFormat(Date dateTime) { + Instant instant = dateTime.toInstant(); + ZoneId zone = ZoneId.systemDefault(); + LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone); + return localDateTime.format(DateTimeFormatter.ofPattern(YYYY_MM_DD_HH_MM_SS)); + } + /** * 获取当前Date型日期 * @@ -169,4 +187,26 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DateUtils.YYYY_MM_DD_HH_MM_SS); return simpleDateFormat.format(date); } + + // 获取传入时间的指定当天开始时间 + public static Date getDayStartTime(Long time) { + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(time); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + return calendar.getTime(); + } + + // 获取传入时间的指定当天结算时间 + public static Date getDayEndTime(Long time) { + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(time); + calendar.set(Calendar.HOUR_OF_DAY, 23); + calendar.set(Calendar.MINUTE, 59); + calendar.set(Calendar.SECOND, 59); + calendar.set(Calendar.MILLISECOND, 999); + return calendar.getTime(); + } } diff --git a/ghy-common/src/main/java/com/ghy/common/utils/ObjectVerifyUtils.java b/ghy-common/src/main/java/com/ghy/common/utils/ObjectVerifyUtils.java new file mode 100644 index 00000000..cf5115a6 --- /dev/null +++ b/ghy-common/src/main/java/com/ghy/common/utils/ObjectVerifyUtils.java @@ -0,0 +1,67 @@ +package com.ghy.common.utils; + +import java.lang.reflect.Array; +import java.util.Collection; +import java.util.Iterator; +import java.util.Map; + +/** + * @Date: 2024-09-26 22:49 + * @Author: 但星霖 + * @Version: v1.0 + * @Description: 参数校验工具类 + */ +public class ObjectVerifyUtils { + + public static boolean isEmpty(Collection coll) { + return coll == null || coll.isEmpty(); + } + + + public static boolean isNotEmpty(Collection coll) { + return !isEmpty(coll); + } + + + public static boolean isNull(Object... objs) { + Object[] var1 = objs; + int var2 = objs.length; + + for(int var3 = 0; var3 < var2; ++var3) { + Object obj = var1[var3]; + if (isEmpty(obj)) { + return true; + } + } + + return false; + } + + public static boolean isNotNull(Object... obj) { + return !isNull(obj); + } + + public static boolean isNotEmpty(Object obj) { + return !isEmpty(obj); + } + + public static boolean isEmpty(Object obj) { + if (obj == null) { + return true; + } else if (obj.getClass().isArray()) { + return Array.getLength(obj) == 0; + } else if (obj instanceof CharSequence) { + return ((CharSequence)obj).length() == 0; + } else if (obj instanceof Collection) { + return ((Collection)obj).isEmpty(); + } else if (obj instanceof Map) { + return ((Map)obj).isEmpty(); + } else if (obj instanceof Iterable) { + return !((Iterable)obj).iterator().hasNext(); + } else if (obj instanceof Iterator) { + return !((Iterator)obj).hasNext(); + } else { + return false; + } + } +} diff --git a/ghy-order/src/main/java/com/ghy/order/mapper/OrderDetailMapper.java b/ghy-order/src/main/java/com/ghy/order/mapper/OrderDetailMapper.java index bd314047..26c08cd0 100644 --- a/ghy-order/src/main/java/com/ghy/order/mapper/OrderDetailMapper.java +++ b/ghy-order/src/main/java/com/ghy/order/mapper/OrderDetailMapper.java @@ -117,4 +117,7 @@ public interface OrderDetailMapper { int deleteByMaster(Long masterId); OrderDetailCount differentStatusOrderCount(OrderDetail orderDetail); + + // 根据开始/结算时间进行查询有效的订单详情数据。 + List searchByOrderStartTime(@Param("startTime") Date startTime, @Param("endTime") Date endTime); } diff --git a/ghy-order/src/main/java/com/ghy/order/mapper/OrderMasterMapper.java b/ghy-order/src/main/java/com/ghy/order/mapper/OrderMasterMapper.java index f1ecd051..b9e718ba 100644 --- a/ghy-order/src/main/java/com/ghy/order/mapper/OrderMasterMapper.java +++ b/ghy-order/src/main/java/com/ghy/order/mapper/OrderMasterMapper.java @@ -5,6 +5,7 @@ import com.ghy.order.domain.OrderMasterCount; import org.apache.ibatis.annotations.Param; import java.util.Collection; +import java.util.Date; import java.util.List; /** @@ -110,4 +111,8 @@ public interface OrderMasterMapper { int removeWorker(Long id); OrderMasterCount differentStatusOrderCount(OrderMaster orderMaster); + + + // 根据开始/结算时间进行查询有效的订单主数据。 + List searchByOrderStartTime(@Param("startTime") Date startTime, @Param("endTime") Date endTime); } diff --git a/ghy-order/src/main/java/com/ghy/order/pojo/dto/OrderDetailStatisticsDTO.java b/ghy-order/src/main/java/com/ghy/order/pojo/dto/OrderDetailStatisticsDTO.java new file mode 100644 index 00000000..842b17c5 --- /dev/null +++ b/ghy-order/src/main/java/com/ghy/order/pojo/dto/OrderDetailStatisticsDTO.java @@ -0,0 +1,39 @@ +package com.ghy.order.pojo.dto; + +import lombok.Data; + +/** + * @Date: 2024-09-12 23:12 + * @Author: 但星霖 + * @Version: v1.0 + * @Description: 订单详情统计dto + */ +@Data +public class OrderDetailStatisticsDTO { + + /** + * '0. 1.待排期 2.待上门 3.服务中 4.已完成 5.已取消', + */ + + // 待接单 数量 + private Integer pendingOrderNumber = 0; + + // 待排期 数量 + private Integer waitingDateNumber = 0; + + // 待上门 数量 + private Integer waitSeeNumber = 0; + + // 服务中 数量 + private Integer inServiceNumber = 0; + + // 已完成 数量 + private Integer completedNumber = 0; + + // 已取消 数量 + private Integer canceledNumber = 0; + + // 总数 + private Integer totalOrderNumber = 0; + +} diff --git a/ghy-order/src/main/java/com/ghy/order/pojo/dto/OrderMasterStatisticsDTO.java b/ghy-order/src/main/java/com/ghy/order/pojo/dto/OrderMasterStatisticsDTO.java new file mode 100644 index 00000000..5d7da7f2 --- /dev/null +++ b/ghy-order/src/main/java/com/ghy/order/pojo/dto/OrderMasterStatisticsDTO.java @@ -0,0 +1,69 @@ +package com.ghy.order.pojo.dto; + +import lombok.Data; + +/** + * @Date: 2024-09-12 23:12 + * @Author: 但星霖 + * @Version: v1.0 + * @Description: 主订单统计dto + */ +@Data +public class OrderMasterStatisticsDTO { + + /** + * 订单总数 + */ + private Integer totalOrderNumber = 0; + + /** + * 已取消订单数量 + */ + private Integer cancelNumber = 0; + + /** + * 已完成订单数量 + */ + private Integer finishNumber = 0; + + /** + * 待确认订单数量 + */ + private Integer finishCheckNumber = 0; + + /** + * 服务中订单数量 + */ + private Integer serverNumber = 0; + + /** + * 待上门订单数量 + */ + private Integer goingNumber = 0; + + /** + * 待排期订单数量 + */ + private Integer plainNumber = 0; + + /** + * 待接单订单数量 + */ + private Integer receiveNumber = 0; + + /** + * 待确认时申请取消订单数量 + */ + private Integer finishCheckCancelNumber = 0; + + /** + * 服务中申请取消订单数量 + */ + private Integer serverCancelNumber = 0; + + /** + * 待上门时申请取消订单数量 + */ + private Integer goingCancelNumber = 0; + +} diff --git a/ghy-order/src/main/java/com/ghy/order/quartz/OrderMasterStatisticsTask.java b/ghy-order/src/main/java/com/ghy/order/quartz/OrderMasterStatisticsTask.java new file mode 100644 index 00000000..34f62277 --- /dev/null +++ b/ghy-order/src/main/java/com/ghy/order/quartz/OrderMasterStatisticsTask.java @@ -0,0 +1,37 @@ +package com.ghy.order.quartz; + +import com.ghy.common.utils.DateUtils; +import com.ghy.order.service.OrderMasterService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.util.Date; + +/** + * @Date: 2024-09-21 00:23 + * @Author: 但星霖 + * @Version: v1.0 + * @Description: 订单统计定时任务 + */ +@Slf4j +@Component +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +public class OrderMasterStatisticsTask { + + private final OrderMasterService orderMasterService; + + @Scheduled(cron = "0 0/5 * * * ?") + public void orderMasterStatistics() { + log.info("{}开始全部主订单统计任务。", DateUtils.timeFormat(new Date())); + orderMasterService.orderStatisticsDispose(); + } + + @Scheduled(cron = "0 0/5 * * * ?") + public void orderMasterStatisticsByNow() { + log.info("{}开始当天主订单统计任务。", DateUtils.timeFormat(new Date())); + orderMasterService.orderStatisticsDisposeByNow(); + } +} diff --git a/ghy-order/src/main/java/com/ghy/order/service/OrderDetailService.java b/ghy-order/src/main/java/com/ghy/order/service/OrderDetailService.java index f8705a92..6348df36 100644 --- a/ghy-order/src/main/java/com/ghy/order/service/OrderDetailService.java +++ b/ghy-order/src/main/java/com/ghy/order/service/OrderDetailService.java @@ -2,6 +2,7 @@ package com.ghy.order.service; import com.ghy.common.enums.OrderStatus; import com.ghy.order.domain.*; +import com.ghy.order.pojo.dto.OrderDetailStatisticsDTO; import com.ghy.payment.domain.FinancialChangeRecord; import com.huifu.adapay.core.exception.BaseAdaPayException; @@ -188,4 +189,16 @@ public interface OrderDetailService { OrderDetailCount differentStatusOrderCount(OrderDetail orderDetail); Long afterDetailOrderCount(OrderDetail orderDetail); + + // 订单详情数据统计返回 每次都统计全表 数据量比较小 + OrderDetailStatisticsDTO orderStatisticsReturn(); + + // 订单详情数据统计返回 每次都统计全表 数据量比较小 + OrderDetailStatisticsDTO orderStatisticsDispose(); + + // 订单详情数据统计返回 根据时间统计当前日期天 + OrderDetailStatisticsDTO orderStatisticsReturnByNow(); + + // 订单详情数据统计返回 根据时间统计当前日期天 + OrderDetailStatisticsDTO orderStatisticsDisposeByNow(); } diff --git a/ghy-order/src/main/java/com/ghy/order/service/OrderMasterService.java b/ghy-order/src/main/java/com/ghy/order/service/OrderMasterService.java index db22102c..9728a061 100644 --- a/ghy-order/src/main/java/com/ghy/order/service/OrderMasterService.java +++ b/ghy-order/src/main/java/com/ghy/order/service/OrderMasterService.java @@ -3,6 +3,7 @@ package com.ghy.order.service; import com.ghy.common.core.domain.AjaxResult; import com.ghy.order.domain.OrderMaster; import com.ghy.order.domain.OrderMasterCount; +import com.ghy.order.pojo.dto.OrderMasterStatisticsDTO; import com.ghy.order.request.AppOrderRequest; import com.ghy.order.request.OrderChangePriceReq; import com.huifu.adapay.core.exception.BaseAdaPayException; @@ -175,4 +176,16 @@ public interface OrderMasterService { */ AjaxResult batchChangePrice(OrderChangePriceReq changePriceReq); + // 订单主表数据统计返回 每次都统计全表 数据量比较小 + OrderMasterStatisticsDTO orderStatisticsReturn(); + + // 订单主表数据统计返回 每次都统计全表 数据量比较小 + OrderMasterStatisticsDTO orderStatisticsDispose(); + + // 订单主表数据统计返回 根据时间统计当前日期天 + OrderMasterStatisticsDTO orderStatisticsReturnByNow(); + + // 订单主表数据统计返回 根据时间统计当前日期天 + OrderMasterStatisticsDTO orderStatisticsDisposeByNow(); + } diff --git a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderDetailServiceImpl.java b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderDetailServiceImpl.java index 10b209f4..df6bc2b6 100644 --- a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderDetailServiceImpl.java +++ b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderDetailServiceImpl.java @@ -10,10 +10,7 @@ import com.ghy.common.constant.UserConstants; import com.ghy.common.core.text.Convert; import com.ghy.common.enums.*; import com.ghy.common.exception.base.BaseException; -import com.ghy.common.utils.AdapayUtils; -import com.ghy.common.utils.MoneyUtil; -import com.ghy.common.utils.ObjectUtils; -import com.ghy.common.utils.StringUtils; +import com.ghy.common.utils.*; import com.ghy.customer.domain.Customer; import com.ghy.customer.service.CustomerService; import com.ghy.goods.domain.DeptGoodsCategory; @@ -26,6 +23,7 @@ import com.ghy.order.domain.*; import com.ghy.order.mapper.OrderAddSubtractMapper; import com.ghy.order.mapper.OrderDetailMapper; import com.ghy.order.mapper.OrderMasterMapper; +import com.ghy.order.pojo.dto.OrderDetailStatisticsDTO; import com.ghy.order.service.*; import com.ghy.payment.domain.FinancialChangeRecord; import com.ghy.payment.domain.FinancialDetail; @@ -116,6 +114,9 @@ public class OrderDetailServiceImpl implements OrderDetailService { @Value("${adapay.fee_rate:0.008}") private String feeRate; + private final OrderDetailStatisticsDTO statisticsDTO = new OrderDetailStatisticsDTO(); + private final OrderDetailStatisticsDTO statisticsDTOByNow = new OrderDetailStatisticsDTO(); + @Override public int insertOrderDetail(OrderDetail orderDetail) { return orderDetailMapper.insertOrderDetail(orderDetail); @@ -1184,4 +1185,102 @@ public class OrderDetailServiceImpl implements OrderDetailService { } return this.countOrderDetailList(orderDetail); } + + @Override + public OrderDetailStatisticsDTO orderStatisticsReturn() { + return statisticsDTO; + } + + @Override + public OrderDetailStatisticsDTO orderStatisticsDispose() { + // 拿到当前时间 + Long time = System.currentTimeMillis(); + // 根据时间返回查询 + List orderDetails = orderDetailMapper.searchByOrderStartTime(DateUtils.getDayStartTime(time), DateUtils.getDayEndTime(time)); + // 订单数据统计 + if (orderDetails != null && !orderDetails.isEmpty()) { + // 根据map数据进行数据分类处理 根据订单状态类型进行数据分类处理。 + Map> masterOrderMap = orderDetails.stream().collect(Collectors.groupingBy(OrderDetail::getOrderStatus)); + // 循环订单状态类型进行状态类型 switch进行归类处理。 + for (Integer orderStateKey : masterOrderMap.keySet()) { + /** + * 0.待接单 1.待排期 2.待上门 3.服务中 4.已完成 5.已取消 + */ + switch (orderStateKey) { + case 0: + statisticsDTO.setPendingOrderNumber(masterOrderMap.get(orderStateKey).size()); + break; + case 1: + statisticsDTO.setWaitingDateNumber(masterOrderMap.get(orderStateKey).size()); + break; + case 2: + statisticsDTO.setWaitSeeNumber(masterOrderMap.get(orderStateKey).size()); + break; + case 3: + statisticsDTO.setInServiceNumber(masterOrderMap.get(orderStateKey).size()); + break; + case 4: + statisticsDTO.setCompletedNumber(masterOrderMap.get(orderStateKey).size()); + break; + case 5: + statisticsDTO.setCanceledNumber(masterOrderMap.get(orderStateKey).size()); + break; + default: + break; + } + } + // 总数 + statisticsDTO.setTotalOrderNumber(orderDetails.size()); + } + return statisticsDTO; + } + + @Override + public OrderDetailStatisticsDTO orderStatisticsReturnByNow() { + return statisticsDTOByNow; + } + + @Override + public OrderDetailStatisticsDTO orderStatisticsDisposeByNow() { + // 拿到当前时间 + Long time = System.currentTimeMillis(); + // 根据时间返回查询 + List orderDetails = orderDetailMapper.searchByOrderStartTime(DateUtils.getDayStartTime(time), DateUtils.getDayEndTime(time)); + // 订单数据统计 + if (orderDetails != null && !orderDetails.isEmpty()) { + // 根据map数据进行数据分类处理 根据订单状态类型进行数据分类处理。 + Map> masterOrderMap = orderDetails.stream().collect(Collectors.groupingBy(OrderDetail::getOrderStatus)); + // 循环订单状态类型进行状态类型 switch进行归类处理。 + for (Integer orderStateKey : masterOrderMap.keySet()) { + /** + * 0.待接单 1.待排期 2.待上门 3.服务中 4.已完成 5.已取消 + */ + switch (orderStateKey) { + case 0: + statisticsDTOByNow.setPendingOrderNumber(masterOrderMap.get(orderStateKey).size()); + break; + case 1: + statisticsDTOByNow.setWaitingDateNumber(masterOrderMap.get(orderStateKey).size()); + break; + case 2: + statisticsDTOByNow.setWaitSeeNumber(masterOrderMap.get(orderStateKey).size()); + break; + case 3: + statisticsDTOByNow.setInServiceNumber(masterOrderMap.get(orderStateKey).size()); + break; + case 4: + statisticsDTOByNow.setCompletedNumber(masterOrderMap.get(orderStateKey).size()); + break; + case 5: + statisticsDTOByNow.setCanceledNumber(masterOrderMap.get(orderStateKey).size()); + break; + default: + break; + } + } + // 总数 + statisticsDTOByNow.setTotalOrderNumber(orderDetails.size()); + } + return statisticsDTOByNow; + } } diff --git a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java index 21d487f4..ed882a4c 100644 --- a/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java +++ b/ghy-order/src/main/java/com/ghy/order/service/impl/OrderMasterServiceImpl.java @@ -14,11 +14,14 @@ import com.ghy.common.enums.OrderStatus; import com.ghy.common.enums.PayStatus; import com.ghy.common.enums.RefundType; import com.ghy.common.utils.AdapayUtils; +import com.ghy.common.utils.DateUtils; +import com.ghy.common.utils.ObjectUtils; import com.ghy.order.domain.OrderDetail; import com.ghy.order.domain.OrderGoods; import com.ghy.order.domain.OrderMaster; import com.ghy.order.domain.OrderMasterCount; import com.ghy.order.mapper.OrderMasterMapper; +import com.ghy.order.pojo.dto.OrderMasterStatisticsDTO; import com.ghy.order.request.AppOrderRequest; import com.ghy.order.request.OrderChangePriceReq; import com.ghy.order.service.OrderDetailService; @@ -48,6 +51,7 @@ import java.math.RoundingMode; import java.text.SimpleDateFormat; import java.util.*; import java.util.concurrent.atomic.AtomicLong; +import java.util.stream.Collectors; /** * 商品模块实现类 @@ -82,6 +86,10 @@ public class OrderMasterServiceImpl implements OrderMasterService { private final static ThreadLocal dateFormat = ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyyMMddHHmmss")); + // 这里没有使用redis 暂时将这个查询统计实体放入内存吧。默认调用的时候直接更新他就可以了。 + private final OrderMasterStatisticsDTO statisticsDTO = new OrderMasterStatisticsDTO(); + private final OrderMasterStatisticsDTO statisticsDTOByNow = new OrderMasterStatisticsDTO(); + @Override public synchronized String createOrderCode() { INDEX.compareAndSet(9999L, 1L); @@ -604,4 +612,150 @@ public class OrderMasterServiceImpl implements OrderMasterService { } return AjaxResult.success(); } + + @Override + public OrderMasterStatisticsDTO orderStatisticsReturn() { + return statisticsDTO; + } + + @Override + public OrderMasterStatisticsDTO orderStatisticsDispose() { + // 根据时间返回查询 + List orderMasters = orderMasterMapper.searchByOrderStartTime(null, null); + // 订单数据统计 + if (orderMasters != null && !orderMasters.isEmpty()) { + // 根据map数据进行数据分类处理 根据订单状态类型进行数据分类处理。 + Map> masterOrderMap = orderMasters.stream().collect(Collectors.groupingBy(OrderMaster::getOrderStatus)); + // 循环订单状态类型进行状态类型 switch进行归类处理。 + for (Integer orderStateKey : masterOrderMap.keySet()) { + /** + * GOING_CANCEL(-2, "待上门时申请取消"), + * SERVER_CANCEL(-3, "服务中申请取消"), + * FINISH_CHECK_CANCEL(-4, "待确认时申请取消"), + * + * RECEIVE(0, "待接单"), + * PLAIN(1, "待排期"), + * GOING(2, "待上门"), + * SERVER(3, "服务中"), + * FINISH_CHECK(4, "待确认"), + * FINISH(5, "已完成"), + * CANCEL(6, "已取消"); + */ + OrderStatus orderStatus = OrderStatus.parse(orderStateKey); + if (ObjectUtils.isNotNull(orderStatus)) { + switch (orderStatus) { + case CANCEL: + statisticsDTO.setCancelNumber(masterOrderMap.get(orderStateKey).size()); + break; + case FINISH: + statisticsDTO.setFinishNumber(masterOrderMap.get(orderStateKey).size()); + break; + case FINISH_CHECK: + statisticsDTO.setFinishCheckNumber(masterOrderMap.get(orderStateKey).size()); + break; + case SERVER: + statisticsDTO.setServerNumber(masterOrderMap.get(orderStateKey).size()); + break; + case GOING: + statisticsDTO.setGoingNumber(masterOrderMap.get(orderStateKey).size()); + break; + case PLAIN: + statisticsDTO.setPlainNumber(masterOrderMap.get(orderStateKey).size()); + break; + case RECEIVE: + statisticsDTO.setReceiveNumber(masterOrderMap.get(orderStateKey).size()); + break; + case GOING_CANCEL: + statisticsDTO.setGoingCancelNumber(masterOrderMap.get(orderStateKey).size()); + break; + case SERVER_CANCEL: + statisticsDTO.setServerCancelNumber(masterOrderMap.get(orderStateKey).size()); + break; + case FINISH_CHECK_CANCEL: + statisticsDTO.setFinishCheckCancelNumber(masterOrderMap.get(orderStateKey).size()); + break; + default: + break; + } + } + } + // 总数 + statisticsDTO.setTotalOrderNumber(orderMasters.size()); + } + return statisticsDTO; + } + + @Override + public OrderMasterStatisticsDTO orderStatisticsReturnByNow() { + return statisticsDTOByNow; + } + + @Override + public OrderMasterStatisticsDTO orderStatisticsDisposeByNow() { + // 拿到当前时间 + Long time = System.currentTimeMillis(); + // 根据时间返回查询 + List orderMasters = orderMasterMapper.searchByOrderStartTime(DateUtils.getDayStartTime(time), DateUtils.getDayEndTime(time)); + // 订单数据统计 + if (orderMasters != null && !orderMasters.isEmpty()) { + // 根据map数据进行数据分类处理 根据订单状态类型进行数据分类处理。 + Map> masterOrderMap = orderMasters.stream().collect(Collectors.groupingBy(OrderMaster::getOrderStatus)); + // 循环订单状态类型进行状态类型 switch进行归类处理。 + for (Integer orderStateKey : masterOrderMap.keySet()) { + /** + * GOING_CANCEL(-2, "待上门时申请取消"), + * SERVER_CANCEL(-3, "服务中申请取消"), + * FINISH_CHECK_CANCEL(-4, "待确认时申请取消"), + * + * RECEIVE(0, "待接单"), + * PLAIN(1, "待排期"), + * GOING(2, "待上门"), + * SERVER(3, "服务中"), + * FINISH_CHECK(4, "待确认"), + * FINISH(5, "已完成"), + * CANCEL(6, "已取消"); + */ + OrderStatus orderStatus = OrderStatus.parse(orderStateKey); + if (ObjectUtils.isNotNull(orderStatus)) { + switch (orderStatus) { + case CANCEL: + statisticsDTOByNow.setCancelNumber(masterOrderMap.get(orderStateKey).size()); + break; + case FINISH: + statisticsDTOByNow.setFinishNumber(masterOrderMap.get(orderStateKey).size()); + break; + case FINISH_CHECK: + statisticsDTOByNow.setFinishCheckNumber(masterOrderMap.get(orderStateKey).size()); + break; + case SERVER: + statisticsDTOByNow.setServerNumber(masterOrderMap.get(orderStateKey).size()); + break; + case GOING: + statisticsDTOByNow.setGoingNumber(masterOrderMap.get(orderStateKey).size()); + break; + case PLAIN: + statisticsDTOByNow.setPlainNumber(masterOrderMap.get(orderStateKey).size()); + break; + case RECEIVE: + statisticsDTOByNow.setReceiveNumber(masterOrderMap.get(orderStateKey).size()); + break; + case GOING_CANCEL: + statisticsDTOByNow.setGoingCancelNumber(masterOrderMap.get(orderStateKey).size()); + break; + case SERVER_CANCEL: + statisticsDTOByNow.setServerCancelNumber(masterOrderMap.get(orderStateKey).size()); + break; + case FINISH_CHECK_CANCEL: + statisticsDTOByNow.setFinishCheckCancelNumber(masterOrderMap.get(orderStateKey).size()); + break; + default: + break; + } + } + } + // 总数 + statisticsDTOByNow.setTotalOrderNumber(orderMasters.size()); + } + return statisticsDTO; + } } diff --git a/ghy-order/src/main/resources/mapper/order/OrderDetailMapper.xml b/ghy-order/src/main/resources/mapper/order/OrderDetailMapper.xml index 30666fbd..215f247e 100644 --- a/ghy-order/src/main/resources/mapper/order/OrderDetailMapper.xml +++ b/ghy-order/src/main/resources/mapper/order/OrderDetailMapper.xml @@ -5,33 +5,33 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -93,10 +93,10 @@ od.timeout_, od.timeout_fine_times FROM order_detail od - LEFT JOIN order_master om ON om.id = od.order_master_id - LEFT JOIN customer_address ca ON ca.customer_address_id = om.address_id - LEFT JOIN goods g ON g.goods_id = om.goods_id - left join worker w on od.worker_id = w.worker_id + LEFT JOIN order_master om ON om.id = od.order_master_id + LEFT JOIN customer_address ca ON ca.customer_address_id = om.address_id + LEFT JOIN goods g ON g.goods_id = om.goods_id + left join worker w on od.worker_id = w.worker_id @@ -322,7 +324,9 @@ - DELETE FROM order_detail WHERE order_master_id = #{masterId} + DELETE + FROM order_detail + WHERE order_master_id = #{masterId} @@ -358,13 +362,13 @@ UPDATE order_detail SET order_status = #{orderStatus}, - update_time = SYSDATE() + update_time = SYSDATE() WHERE id = #{id} UPDATE order_detail - SET timeout_ = #{timeout}, + SET timeout_ = #{timeout}, timeout_fine_times = #{timeoutFineTimes} WHERE id = #{id} @@ -379,16 +383,14 @@ - + INSERT INTO order_detail( code, order_master_id, @@ -430,7 +432,7 @@ + + + diff --git a/ghy-order/src/main/resources/mapper/order/OrderMasterMapper.xml b/ghy-order/src/main/resources/mapper/order/OrderMasterMapper.xml index 390c12ff..0968b568 100644 --- a/ghy-order/src/main/resources/mapper/order/OrderMasterMapper.xml +++ b/ghy-order/src/main/resources/mapper/order/OrderMasterMapper.xml @@ -537,4 +537,19 @@ + + diff --git a/ghy-system/src/main/java/com/ghy/system/domain/SysGlobalConfig.java b/ghy-system/src/main/java/com/ghy/system/domain/SysGlobalConfig.java new file mode 100644 index 00000000..9975de1e --- /dev/null +++ b/ghy-system/src/main/java/com/ghy/system/domain/SysGlobalConfig.java @@ -0,0 +1,73 @@ +package com.ghy.system.domain; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @Author 但星霖 + * @Date 2023-03-23 09:45:52 + * 说明:系统配置表 + */ +@Data +public class SysGlobalConfig implements Serializable { + + /** + * 主键ID + */ + private Long id; + + /** + * 配置项名称 + */ + private String name; + + /** + * 配置项内容json串(界面循环显示json串的key-value) + * 系统配置json字符串/或者文本信息 + */ + private String content; + + /** + * 排序 + */ + private Integer sort; + + /** + * 配置类型 + * 对应枚举 SysConfigEnum + */ + private Integer type; + + /** + * 是否展现给用户查询使用,此字段作用未用于给屏蔽掉查询,此字段为默认1的时候就是为系统变量不可更改。 + */ + private Boolean sysDefault; + + /** + * 描述 + */ + private String describe; + + /** + * 数据内容类型 + * 对应系统枚举字段数据 + * SysConfigDataTypeEnum + */ + private Integer dataType; + + /** + * 创建时间 + */ + private Long createTime; + + /** + * 更新时间 + */ + private Long updateTime; + + /** + * 单位 + */ + private String unit; +} diff --git a/ghy-system/src/main/java/com/ghy/system/mapper/SysGlobalConfigMapper.java b/ghy-system/src/main/java/com/ghy/system/mapper/SysGlobalConfigMapper.java new file mode 100644 index 00000000..db9e4da0 --- /dev/null +++ b/ghy-system/src/main/java/com/ghy/system/mapper/SysGlobalConfigMapper.java @@ -0,0 +1,38 @@ +package com.ghy.system.mapper; + +import com.ghy.system.domain.SysGlobalConfig; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + * @Author: 但星霖 + * @Date: 2023-11-08 16:12 + * @Version: 1.0 + * @Description: 系统配置表数据库访问层 + */ +@Mapper +public interface SysGlobalConfigMapper { + + /** + * 数据新增数据,支持数组,单数据。 + * + * @param sysGlobalConfigs 系统配置数据数组 + * @return 新增的数量信息 + */ + Integer creates(@Param("sysGlobalConfigs") SysGlobalConfig... sysGlobalConfigs); + + // 根据主键id修改 + Integer updateById(@Param("sysGlobalConfig") SysGlobalConfig sysGlobalConfig); + + // 根据主键id查询 + SysGlobalConfig selectById(@Param("id") Long id); + + // 根据主键id删除 + Integer deleteById(@Param("id") Long id); + + // 根据类型查询 + SysGlobalConfig loadByConfigType(@Param("configType") Integer configType); + + // 根据名称校验数据 + SysGlobalConfig vailName(@Param("name") String name); +} diff --git a/ghy-system/src/main/java/com/ghy/system/service/ISysGlobalConfigService.java b/ghy-system/src/main/java/com/ghy/system/service/ISysGlobalConfigService.java new file mode 100644 index 00000000..10c2ab64 --- /dev/null +++ b/ghy-system/src/main/java/com/ghy/system/service/ISysGlobalConfigService.java @@ -0,0 +1,63 @@ +package com.ghy.system.service; + + +import com.ghy.system.domain.SysGlobalConfig; + +/** + * @Author: 但星霖 + * @Date: 2023-11-08 16:12 + * @Version: 1.0 + * @Description: 系统配置表业务接口层 + */ +public interface ISysGlobalConfigService { + + /** + * 系统配置项数据新增 + * + * @param sysConfig 配置项数据实体 + * @return 是否新增成功 + */ + Boolean create(SysGlobalConfig sysConfig); + + /** + * 系统配置项数据修改 根据Id进行修改 + * + * @param sysConfig 配置项数据实体 + * @return 是否修改成功 + */ + Boolean update(SysGlobalConfig sysConfig); + + /** + * 系统配置项数据删除 根据id进行删除 + * + * @param id 系统配置项主键id + * @return 是否删除成功 + */ + Boolean delete(Long id); + + /** + * 根据配置项主键id进行数据查询 + * + * @param id 配置主键id + * @return config配置项实体信息 + */ + SysGlobalConfig loadById(Long id); + + /** + * 根据配置名称进行查询配置项数据 + * + * @param name 配置项名称 + * @param configId 配置Id + * @return 是否可用 + */ + Boolean vailName(String name, Long configId); + + + /** + * 根据type进行查询对应系统配置信息 + * + * @param type 系统配置类型 + * @return SysConfig 系统配置实体 + */ + SysGlobalConfig loadByConfigType(Integer type); +} diff --git a/ghy-system/src/main/java/com/ghy/system/service/impl/SysGlobalConfigServiceImpl.java b/ghy-system/src/main/java/com/ghy/system/service/impl/SysGlobalConfigServiceImpl.java new file mode 100644 index 00000000..0877032c --- /dev/null +++ b/ghy-system/src/main/java/com/ghy/system/service/impl/SysGlobalConfigServiceImpl.java @@ -0,0 +1,112 @@ +package com.ghy.system.service.impl; + +import com.ghy.common.exception.ServiceException; +import com.ghy.common.utils.DateUtils; +import com.ghy.common.utils.ObjectUtils; +import com.ghy.system.domain.SysGlobalConfig; +import com.ghy.system.mapper.SysGlobalConfigMapper; +import com.ghy.system.service.ISysGlobalConfigService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.Objects; + +/** + * @Date: 2024-09-21 23:36 + * @Author: 但星霖 + * @Version: v1.0 + * @Description: 系统配置表业务接口层实现类 + */ +@Slf4j +@Service +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +public class SysGlobalConfigServiceImpl implements ISysGlobalConfigService { + + private final SysGlobalConfigMapper mapper; + + @Override + public Boolean create(SysGlobalConfig sysConfig) { + log.info("{}收到系统配置清数据新增,新增内容:{}", DateUtils.timeFormat(new Date()), sysConfig); + if (!vailName(sysConfig.getName(), null)) { + log.error("系统配置项:{}新增失败,系统配置项名称重复。", sysConfig.getName()); + throw new ServiceException("系统配置项:" + sysConfig.getName() + "新增失败,名称重复。请检查后重新提交"); + } + // 检查新增的类型 + if (ObjectUtils.isNotNull(mapper.loadByConfigType(sysConfig.getType()))) { + log.error("系统配置项:{}新增失败,系统配置类型已存在。", sysConfig.getName()); + throw new ServiceException("系统配置项:" + sysConfig.getName() + "新增失败,系统配置类型已存在。请检查后重新提交"); + } + // 创建时间 + sysConfig.setCreateTime(System.currentTimeMillis()); + // 修改时间 + sysConfig.setUpdateTime(System.currentTimeMillis()); + mapper.creates(sysConfig); + log.info("{}新增系统配置项成功,新增内容:{}", DateUtils.timeFormat(new Date()), sysConfig); + return true; + } + + @Override + public Boolean update(SysGlobalConfig sysConfig) { + log.info("{}收到系统配置清数据修改,新增内容:{}", DateUtils.timeFormat(new Date()), sysConfig); + SysGlobalConfig sysConfigByDbCrw = mapper.selectById(sysConfig.getId()); + if (ObjectUtils.isNull(sysConfigByDbCrw)) { + log.error("系统配置项:{}修改失败,在当前库中未匹配到正常的配置数据。", sysConfig.getId()); + throw new ServiceException("系统配置项:" + sysConfig.getId() + "修改失败,在当前库中未匹配到正常的配置数据。请检查后重新提交"); + } + // 检查新增的类型 + SysGlobalConfig configByTypeInDb = mapper.loadByConfigType(sysConfig.getType()); + if (ObjectUtils.isNotNull(configByTypeInDb) && !Objects.equals(configByTypeInDb.getId(), sysConfig.getId())) { + log.error("系统配置项:{}修改失败,系统配置类型已存在。", sysConfig.getName()); + throw new ServiceException("系统配置项:" + sysConfig.getName() + "修改失败,系统配置类型已存在。请检查后重新提交"); + } + // 内容 + sysConfigByDbCrw.setContent(sysConfig.getContent()); + // 排序 + sysConfigByDbCrw.setSort(sysConfig.getSort()); + // 修改时间 + sysConfigByDbCrw.setUpdateTime(System.currentTimeMillis()); + mapper.updateById(sysConfigByDbCrw); + log.info("{}修改系统配置项成功,替换内容:{}", DateUtils.timeFormat(new Date()), sysConfig); + return Boolean.TRUE; + } + + @Override + public Boolean delete(Long id) { + log.info("{}收到系统配置删除:{}", DateUtils.timeFormat(new Date()), id); + SysGlobalConfig sysConfigByCrw = mapper.selectById(id); + if (ObjectUtils.isNull(sysConfigByCrw)) { + log.error("系统配置项:{}删除失败,在当前库中未匹配到正常的配置数据。", id); + throw new ServiceException("系统配置项:" + id + "删除失败,在当前库中未匹配到正常的配置数据。请检查后重新提交"); + } + mapper.deleteById(sysConfigByCrw.getId()); + log.info("{}删除系统配置项成功,删除系统配置id:{}", DateUtils.timeFormat(new Date()), id); + return Boolean.TRUE; + } + + @Override + public SysGlobalConfig loadById(Long id) { + return mapper.selectById(id); + } + + @Override + public Boolean vailName(String name, Long configId) { + SysGlobalConfig sysConfig = mapper.vailName(name); + if (ObjectUtils.isNull(sysConfig)) { + return true; + } else { + if (ObjectUtils.isNotNull(configId)) { + return Objects.equals(configId, sysConfig.getId()); + } else { + return false; + } + } + } + + @Override + public SysGlobalConfig loadByConfigType(Integer type) { + return mapper.loadByConfigType(type); + } +} diff --git a/ghy-system/src/main/resources/mapper/system/SysGlobalConfigMapper.xml b/ghy-system/src/main/resources/mapper/system/SysGlobalConfigMapper.xml new file mode 100644 index 00000000..3441f2c5 --- /dev/null +++ b/ghy-system/src/main/resources/mapper/system/SysGlobalConfigMapper.xml @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + sys_global_config + + + `id` + , `name`, `content`, `sort`, `type`,`sys_default`, `describe`, `data_type`, `unit`, + `create_time`, `update_time` + + + + INSERT INTO + + (`name`, `content`, `sort`, `type`,`sys_default`, `describe`, `data_type`, `unit`, + `create_time`, `update_time`) + VALUES + + ( + #{item.name}, + #{item.content}, + #{item.sort}, + #{item.type}, + #{item.sysDefault}, + #{item.describe}, + #{item.dataType}, + #{item.unit}, + #{item.createTime}, + #{item.updateTime} + ) + + + + + + + `name` = #{sysGlobalConfig.name}, + `content` = #{sysGlobalConfig.content}, + `sort` = #{sysGlobalConfig.sort}, + `type` = #{sysGlobalConfig.type}, + `sys_default` = #{sysGlobalConfig.sysDefault}, + `describe` = #{sysGlobalConfig.describe}, + `data_type` = #{sysGlobalConfig.dataType}, + `unit` = #{sysGlobalConfig.unit}, + `update_time` = #{sysGlobalConfig.updateTime} + + + `id` = #{sysGlobalConfig.id} + + + + + + + + + delete from + + + `id` = #{id} + + + + + + + \ No newline at end of file From f09fa1e8b65ad2e0a4a35057a0ffad184953f009 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=86=E6=98=9F=E9=9C=96?= <729219176@qq.com> Date: Sun, 29 Sep 2024 07:47:53 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=A3=B0=E9=9F=B3?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E5=90=8E=E5=8F=B0=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/SysGlobalConfigController.java | 7 +- .../order/OrderDetailController.java | 2 + .../order/OrderMasterController.java | 2 + .../web/pojo/vo/SysGlobalConfigRequestVO.java | 2 +- .../pojo/vo/SysGlobalConfigResponseVO.java | 2 +- .../templates/config/globalConfig/edit.html | 187 +++++++++--------- .../resources/templates/order/master.html | 89 +++++++++ .../templates/order/orderManager.html | 90 +++++++++ .../quartz/OrderDetailsStatisticsTask.java | 38 ++++ .../quartz/OrderMasterStatisticsTask.java | 10 +- .../ghy/system/domain/SysGlobalConfig.java | 2 +- .../mapper/system/SysGlobalConfigMapper.xml | 11 +- 12 files changed, 336 insertions(+), 106 deletions(-) create mode 100644 ghy-order/src/main/java/com/ghy/order/quartz/OrderDetailsStatisticsTask.java diff --git a/ghy-admin/src/main/java/com/ghy/web/controller/config/SysGlobalConfigController.java b/ghy-admin/src/main/java/com/ghy/web/controller/config/SysGlobalConfigController.java index 7f5add09..12c62b89 100644 --- a/ghy-admin/src/main/java/com/ghy/web/controller/config/SysGlobalConfigController.java +++ b/ghy-admin/src/main/java/com/ghy/web/controller/config/SysGlobalConfigController.java @@ -13,6 +13,7 @@ import lombok.RequiredArgsConstructor; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; +import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; /** @@ -21,8 +22,8 @@ import org.springframework.web.bind.annotation.*; * @Version: 1.0 * @Description: web-系统配置控制层 */ -@RestController -@RequestMapping("/web/sys/global/config") +@Controller +@RequestMapping("/config/globalConfig") @Tag(name = "web-系统配置控制层") @RequiredArgsConstructor(onConstructor = @__(@Autowired)) public class SysGlobalConfigController { @@ -38,6 +39,7 @@ public class SysGlobalConfigController { private final ISysGlobalConfigService service; + @ResponseBody @Operation(summary = "系统配置查询接口(根据类型查询)", method = "GET") @Parameters({ @Parameter(name = "typeId", description = "配置类型Code", required = true, in = ParameterIn.PATH) @@ -47,6 +49,7 @@ public class SysGlobalConfigController { return AjaxResult.success(SysGlobalConfigResponseVO.toVo(service.loadByConfigType(typeId))); } + @ResponseBody @RequiresPermissions("sys:order:audio:config:update") @Operation(summary = "系统配置修改", method = "PUT") @PutMapping(path = "/update", produces = MediaType.APPLICATION_JSON_VALUE) diff --git a/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderDetailController.java b/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderDetailController.java index ae2ccbae..ac6e9115 100644 --- a/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderDetailController.java +++ b/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderDetailController.java @@ -1299,12 +1299,14 @@ public class OrderDetailController extends BaseController { return AjaxResult.success(orderDetailService.afterDetailOrderCount(orderDetail)); } + @ResponseBody @Operation(summary = "获取当天订单统计数据", method = "GET") @GetMapping(path = "/statistics/now", produces = MediaType.APPLICATION_JSON_VALUE) public AjaxResult statisticsNow() { return AjaxResult.success(orderDetailService.orderStatisticsReturnByNow()); } + @ResponseBody @Operation(summary = "获取全部订单统计数据", method = "GET") @GetMapping(path = "/statistics", produces = MediaType.APPLICATION_JSON_VALUE) public AjaxResult statistics() { diff --git a/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderMasterController.java b/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderMasterController.java index aded6116..c4cca5a9 100644 --- a/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderMasterController.java +++ b/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderMasterController.java @@ -1616,12 +1616,14 @@ public class OrderMasterController extends BaseController { return AjaxResult.success(orderMasterService.countOrderMasterList(orderMaster)); } + @ResponseBody @Operation(summary = "获取当天订单统计数据", method = "GET") @GetMapping(path = "/statistics/now", produces = MediaType.APPLICATION_JSON_VALUE) public AjaxResult statisticsNow() { return AjaxResult.success(orderMasterService.orderStatisticsReturnByNow()); } + @ResponseBody @Operation(summary = "获取全部订单统计数据", method = "GET") @GetMapping(path = "/statistics", produces = MediaType.APPLICATION_JSON_VALUE) public AjaxResult statistics() { diff --git a/ghy-admin/src/main/java/com/ghy/web/pojo/vo/SysGlobalConfigRequestVO.java b/ghy-admin/src/main/java/com/ghy/web/pojo/vo/SysGlobalConfigRequestVO.java index 604455e0..d446b9c6 100644 --- a/ghy-admin/src/main/java/com/ghy/web/pojo/vo/SysGlobalConfigRequestVO.java +++ b/ghy-admin/src/main/java/com/ghy/web/pojo/vo/SysGlobalConfigRequestVO.java @@ -44,7 +44,7 @@ public class SysGlobalConfigRequestVO { private Integer dataType; @Schema(description = "单位") - private String unit; + private String configUnit; public static SysGlobalConfig toModel(SysGlobalConfigRequestVO vo){ SysGlobalConfig sysConfig = new SysGlobalConfig(); diff --git a/ghy-admin/src/main/java/com/ghy/web/pojo/vo/SysGlobalConfigResponseVO.java b/ghy-admin/src/main/java/com/ghy/web/pojo/vo/SysGlobalConfigResponseVO.java index 60e9886d..d94799a8 100644 --- a/ghy-admin/src/main/java/com/ghy/web/pojo/vo/SysGlobalConfigResponseVO.java +++ b/ghy-admin/src/main/java/com/ghy/web/pojo/vo/SysGlobalConfigResponseVO.java @@ -66,7 +66,7 @@ public class SysGlobalConfigResponseVO { private String dataTypeEnumDesc; @Schema(description = "单位") - private String unit; + private String configUnit; @JsonInclude(value = JsonInclude.Include.NON_NULL) @JsonFormat(pattern = SysConstants.DATE_TIME_FORMAT, locale = "zh", timezone = "GMT+8") diff --git a/ghy-admin/src/main/resources/templates/config/globalConfig/edit.html b/ghy-admin/src/main/resources/templates/config/globalConfig/edit.html index 96bee0a0..3938ad18 100644 --- a/ghy-admin/src/main/resources/templates/config/globalConfig/edit.html +++ b/ghy-admin/src/main/resources/templates/config/globalConfig/edit.html @@ -1,134 +1,139 @@ - - + - -
-
- +

基本信息

- +
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
-
-
-
-
- +
- +
- - - - - - - - - - - - - -

其他信息

-
+
- -
- + +
+ +
+
+
+
+
+ +
+
+ 提交
- \ No newline at end of file diff --git a/ghy-admin/src/main/resources/templates/order/master.html b/ghy-admin/src/main/resources/templates/order/master.html index 4d8d4d06..2b464d2a 100644 --- a/ghy-admin/src/main/resources/templates/order/master.html +++ b/ghy-admin/src/main/resources/templates/order/master.html @@ -850,6 +850,95 @@ }); } + // 子订单全部 + var orderDetailsAfterUrl = ""; + // 子订单新订单 + var orderDetailsAfterSalesDisputeUrl = ""; + + //请求接口加载页面输入框值 + function globalConfiginit(){ + $.ajax({ + type: "GET", + dataType:"json", + url: "/config/globalConfig/search/type/1001", + data: { }, + success: function (data) { + var response = JSON.parse(data.data.content); + orderDetailsAfterUrl = response.orderDetailsAfterUrl; + orderDetailsAfterSalesDisputeUrl = response.orderDetailsAfterSalesDisputeUrl; + } + }) + } + + //页面加载 + window.onload = function () { + //请求接口加载页面输入框值 + globalConfiginit(); + } + + // 定义一个要延迟执行的函数 + function delayedFunction() { + console.log(""); + } + + var totalOrderNumber = 0; + var inServiceNumber = 0; + var lastTotalOrderNumber = 0; + var lastInServiceNumber = 0; + + function fetchData() { + $.ajax({ + type: "GET", + dataType: "json", + url: "/order/detail/statistics/now", + data: {}, + success: function (data) { + // 更新当前值 + totalOrderNumber = data.data.totalOrderNumber; + inServiceNumber = data.data.inServiceNumber; + console.log(totalOrderNumber+"-----"+lastTotalOrderNumber ); + // 检查新值是否大于旧值 + if (totalOrderNumber > lastTotalOrderNumber) { + console.log("收到新子订单数据,开始播放。播放通知音频:" + orderDetailsAfterUrl); + // 获取source元素 + var source = document.getElementById('myAudio'); + // 设置新的音频文件路径 + source.src = orderDetailsAfterUrl; + var audio = document.getElementById('myAudio'); + audio.play().catch(function(error) { + console.log('播放失败:', error); + }); + } + + // 设置延迟时间为2000毫秒(2秒) + setTimeout(delayedFunction, 2000); + + if (inServiceNumber > lastInServiceNumber) { + console.log("收到新子单数据,开始播放。播放通知音频:" + orderDetailsAfterSalesDisputeUrl); + // 获取source元素 + var source = document.getElementById('myAudio'); + // 设置新的音频文件路径 + source.src = orderDetailsAfterSalesDisputeUrl; + var audio = document.getElementById('myAudio'); + audio.play().catch(function(error) { + console.log('播放失败:', error); + }); + } + + // 更新上一次的值 + lastTotalOrderNumber = totalOrderNumber; + lastInServiceNumber = inServiceNumber; + } + }); + } + + + + + // 设置定时器,每隔一分钟执行一次 fetchData 函数 + setInterval(fetchData, 60000); + + diff --git a/ghy-admin/src/main/resources/templates/order/orderManager.html b/ghy-admin/src/main/resources/templates/order/orderManager.html index 0a5a7aa8..e9db747b 100644 --- a/ghy-admin/src/main/resources/templates/order/orderManager.html +++ b/ghy-admin/src/main/resources/templates/order/orderManager.html @@ -334,6 +334,7 @@
+ @@ -352,6 +353,7 @@ var prefix = ctx + "order/master"; var customParams = {}; + $(function () { var panehHidden = false; if ($(this).width() < 769) { @@ -1007,6 +1009,94 @@ showPayQrcode(rows.join()); } + // 主订单全部 + var orderMasterHaveReleasedUrl = ""; + // 主订单新订单 + var orderMasterNewOrderUrl = ""; + + //请求接口加载页面输入框值 + function globalConfiginit(){ + $.ajax({ + type: "GET", + dataType:"json", + url: "/config/globalConfig/search/type/1001", + data: { }, + success: function (data) { + var response = JSON.parse(data.data.content); + orderMasterHaveReleasedUrl = response.orderMasterHaveReleasedUrl; + orderMasterNewOrderUrl = response.orderMasterNewOrderUrl; + } + }) + } + + //页面加载 + window.onload = function () { + //请求接口加载页面输入框值 + globalConfiginit(); + } + + // 定义一个要延迟执行的函数 + function delayedFunction() { + console.log(""); + } + + var totalOrderNumber = 0; + var finishCheckNumber = 0; + var lastTotalOrderNumber = 0; + var lastFinishCheckNumber = 0; + + function fetchData() { + $.ajax({ + type: "GET", + dataType: "json", + url: "/order/master/statistics/now", + data: {}, + success: function (data) { + // 更新当前值 + totalOrderNumber = data.data.totalOrderNumber; + finishCheckNumber = data.data.finishCheckNumber; + console.log(totalOrderNumber+"-----"+lastTotalOrderNumber ); + // 检查新值是否大于旧值 + if (totalOrderNumber > lastTotalOrderNumber) { + console.log("收到新总订单数据,开始播放。播放通知音频:" + orderMasterHaveReleasedUrl); + // 获取source元素 + var source = document.getElementById('myAudio'); + // 设置新的音频文件路径 + source.src = orderMasterHaveReleasedUrl; + var audio = document.getElementById('myAudio'); + audio.play().catch(function(error) { + console.log('播放失败:', error); + }); + } + + // 设置延迟时间为2000毫秒(2秒) + setTimeout(delayedFunction, 2000); + + if (finishCheckNumber > lastFinishCheckNumber) { + console.log("收到新订单数据,开始播放。播放通知音频:" + orderMasterNewOrderUrl); + // 获取source元素 + var source = document.getElementById('myAudio'); + // 设置新的音频文件路径 + source.src = orderMasterNewOrderUrl; + var audio = document.getElementById('myAudio'); + audio.play().catch(function(error) { + console.log('播放失败:', error); + }); + } + + // 更新上一次的值 + lastTotalOrderNumber = totalOrderNumber; + lastFinishCheckNumber = finishCheckNumber; + } + }); + } + + + + + // 设置定时器,每隔一分钟执行一次 fetchData 函数 + setInterval(fetchData, 60000); +