From 601a34663428e9e564ed78275763ab479d1b44de Mon Sep 17 00:00:00 2001 From: Gauthier LO Date: Mon, 29 Apr 2024 10:26:06 +0200 Subject: [PATCH] (WIP) Dashboard package status --- .../controller/SecurityController.java | 11 +++- .../controller/admin/AdminController.java | 24 ++++++- .../modules/business/entity/ParcelStatus.java | 62 +++++++++++++++++++ .../business/mapper/ParcelStatusMapper.java | 18 ++++++ .../mapper/ShippingInvoiceMapper.java | 6 +- .../mapper/xml/ParcelStatusMapper.xml | 4 ++ .../mapper/xml/ShippingInvoiceMapper.xml | 31 ++++++++++ .../business/service/DashboardService.java | 2 + .../service/IParcelStatusService.java | 16 +++++ .../service/impl/DashboardServiceImpl.java | 24 +++++-- .../service/impl/ParcelStatusServiceImpl.java | 23 +++++++ .../modules/business/vo/ParcelInfos.java | 16 +++++ .../business/vo/ParcelQtyAndInfos.java | 11 ++++ .../src/main/resources/application-dev.yml | 4 +- 14 files changed, 239 insertions(+), 13 deletions(-) create mode 100644 jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/ParcelStatus.java create mode 100644 jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/ParcelStatusMapper.java create mode 100644 jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/ParcelStatusMapper.xml create mode 100644 jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IParcelStatusService.java create mode 100644 jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/ParcelStatusServiceImpl.java create mode 100644 jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/vo/ParcelInfos.java create mode 100644 jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/vo/ParcelQtyAndInfos.java diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/SecurityController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/SecurityController.java index 00514b07e..414405da7 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/SecurityController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/SecurityController.java @@ -5,6 +5,9 @@ import lombok.extern.slf4j.Slf4j; import org.apache.shiro.SecurityUtils; import org.jeecg.common.api.vo.Result; import org.jeecg.common.system.vo.LoginUser; +import org.jeecg.modules.system.service.ISysDepartService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.env.Environment; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -14,10 +17,14 @@ import org.springframework.web.bind.annotation.RestController; @RequestMapping("/security") @Slf4j public class SecurityController { - + @Autowired + private ISysDepartService sysDepartService; + @Autowired + private Environment env; @GetMapping(value = "/isEmployee") public Result checkIsEmployee () { + String companyOrgCode = sysDepartService.queryCodeByDepartName(env.getProperty("company.orgName")); LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - return Result.ok(!sysUser.getOrgCode().contains("A04")); + return Result.ok(sysUser.getOrgCode().equals(companyOrgCode)); } } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/AdminController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/AdminController.java index 406a4ccb9..c10897ab0 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/AdminController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/AdminController.java @@ -7,8 +7,10 @@ import org.apache.shiro.SecurityUtils; import org.jeecg.common.api.vo.Result; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.modules.business.service.DashboardService; +import org.jeecg.modules.system.service.ISysDepartService; import org.jeecg.modules.system.service.impl.SysBaseApiImpl; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.env.Environment; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; @@ -24,9 +26,13 @@ import java.util.Map; @RequestMapping("/admin") @Slf4j public class AdminController { - @Autowired private DashboardService dashboardService; @Autowired private SysBaseApiImpl sysBaseApi; + @Autowired private ISysDepartService sysDepartService; + @Autowired private Environment env; + + private final Integer PERIOD = 5; + @GetMapping(value = "/kpis") public Result kpis(@RequestParam(value = "period", required = false) String period) { LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); @@ -40,7 +46,21 @@ public class AdminController { start = LocalDateTime.now(ZoneId.of(ZoneId.SHORT_IDS.get("CTT"))).withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0).withNano(0); } Map kpiMap = dashboardService.getKpis(start, end, roles, sysUser.getUsername()); - + System.gc(); return Result.ok(kpiMap); } + + @GetMapping(value = "/packageStatuses") + public Result packageStatuses() { + String companyOrgCode = sysDepartService.queryCodeByDepartName(env.getProperty("company.orgName")); + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + String orgCode = sysUser.getOrgCode(); + if(!companyOrgCode.equals(orgCode)){ + log.info("User {}, tried to access /admin/packageStatuses but is not authorized.", sysUser.getUsername()); + return Result.error(403,"Not authorized to view this page."); + } + Map packageStatuses = dashboardService.getPackageStatuses(PERIOD); + + return Result.ok(packageStatuses); + } } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/ParcelStatus.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/ParcelStatus.java new file mode 100644 index 000000000..ba0af1f6e --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/ParcelStatus.java @@ -0,0 +1,62 @@ +package org.jeecg.modules.business.entity; + +import java.io.Serializable; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * @Description: parce status + * @Author: jeecg-boot + * @Date: 2024-04-18 + * @Version: V1.0 + */ +@Data +@TableName("parcel_status") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="parcel_status对象", description="parce status") +public class ParcelStatus implements Serializable { + private static final long serialVersionUID = 1L; + + /**主键*/ + @TableId(type = IdType.ASSIGN_UUID) + @ApiModelProperty(value = "主键") + private java.lang.String id; + /**创建人*/ + @ApiModelProperty(value = "创建人") + private java.lang.String createBy; + /**创建日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "创建日期") + private java.util.Date createTime; + /**更新人*/ + @ApiModelProperty(value = "更新人") + private java.lang.String updateBy; + /**更新日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "更新日期") + private java.util.Date updateTime; + /**name*/ + @Excel(name = "name", width = 15) + @ApiModelProperty(value = "name") + private java.lang.String name; + /**value*/ + @Excel(name = "value", width = 15) + @ApiModelProperty(value = "value") + private java.lang.String status; + /**transporter api*/ + @Excel(name = "transporter api", width = 15) + @ApiModelProperty(value = "transporter api") + private java.lang.String api; +} diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/ParcelStatusMapper.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/ParcelStatusMapper.java new file mode 100644 index 000000000..fbf3c428b --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/ParcelStatusMapper.java @@ -0,0 +1,18 @@ +package org.jeecg.modules.business.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import org.jeecg.modules.business.entity.ParcelStatus; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.springframework.stereotype.Repository; + +/** + * @Description: parce status + * @Author: jeecg-boot + * @Date: 2024-04-18 + * @Version: V1.0 + */ +@Repository +public interface ParcelStatusMapper extends BaseMapper { +} diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/ShippingInvoiceMapper.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/ShippingInvoiceMapper.java index c62b787a9..d6be546cd 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/ShippingInvoiceMapper.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/ShippingInvoiceMapper.java @@ -4,12 +4,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.jeecg.modules.business.entity.*; import org.jeecg.modules.business.vo.InvoiceKpi; +import org.jeecg.modules.business.vo.ParcelInfos; import org.springframework.stereotype.Repository; - -import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.List; -import java.util.Map; /** * @Description: 物流发票 @@ -28,4 +26,6 @@ public interface ShippingInvoiceMapper extends BaseMapper { InvoiceKpi countShippingInvoices(@Param("start") LocalDateTime start, @Param("end") LocalDateTime end, @Param("showAllData") boolean showAllData, @Param("username") String username); void setPaid(@Param("invoiceNumbers") List invoiceNumbers); Client getClientByInvoiceNumber(@Param("invoiceNumber") String invoiceNumber); + + List getPackageStatusInPeriod(@Param("period") int period); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/ParcelStatusMapper.xml b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/ParcelStatusMapper.xml new file mode 100644 index 000000000..eb982dd0c --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/ParcelStatusMapper.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/ShippingInvoiceMapper.xml b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/ShippingInvoiceMapper.xml index f8aa2e8fc..70a4f45ab 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/ShippingInvoiceMapper.xml +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/ShippingInvoiceMapper.xml @@ -71,4 +71,35 @@ JOIN shipping_invoice s ON s.client_id = c.id WHERE s.invoice_number = #{invoiceNumber} + + \ No newline at end of file diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/DashboardService.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/DashboardService.java index 765485b25..eae64af69 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/DashboardService.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/DashboardService.java @@ -6,4 +6,6 @@ import java.util.Map; public interface DashboardService { Map getKpis(LocalDateTime start, LocalDateTime end, List roles, String username); + + Map getPackageStatuses(int period); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IParcelStatusService.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IParcelStatusService.java new file mode 100644 index 000000000..5416d59ac --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IParcelStatusService.java @@ -0,0 +1,16 @@ +package org.jeecg.modules.business.service; + +import org.jeecg.modules.business.entity.ParcelStatus; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + * @Description: parce status + * @Author: jeecg-boot + * @Date: 2024-04-18 + * @Version: V1.0 + */ +public interface IParcelStatusService extends IService { + +} diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/DashboardServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/DashboardServiceImpl.java index 665312f40..e4a103ce0 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/DashboardServiceImpl.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/DashboardServiceImpl.java @@ -5,9 +5,8 @@ import org.jeecg.modules.business.mapper.PlatformOrderMapper; import org.jeecg.modules.business.mapper.PurchaseOrderMapper; import org.jeecg.modules.business.mapper.ShippingInvoiceMapper; import org.jeecg.modules.business.service.DashboardService; -import org.jeecg.modules.business.vo.InvoiceKpi; -import org.jeecg.modules.business.vo.Kpi; -import org.jeecg.modules.business.vo.OrderKpi; +import org.jeecg.modules.business.service.IParcelStatusService; +import org.jeecg.modules.business.vo.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -17,7 +16,9 @@ import java.time.LocalDateTime; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Objects; +import java.util.function.Function; + +import static java.util.stream.Collectors.*; @Slf4j @Service @@ -75,4 +76,19 @@ public class DashboardServiceImpl implements DashboardService { kpis.put("platformOrders", platformOrders); return kpis; } + + @Override + public Map getPackageStatuses(int period) { + List packageStatusesAndTracking = shippingInvoiceMapper.getPackageStatusInPeriod(period); + System.out.println("got package statuses"); + System.out.println(packageStatusesAndTracking); + return packageStatusesAndTracking.stream().collect( + groupingBy(ParcelInfos::getStatus, mapping(Function.identity(), toList()))).entrySet().stream().collect( + toMap(Map.Entry::getKey, e -> { + ParcelQtyAndInfos parcelQtyAndInfos = new ParcelQtyAndInfos(); + parcelQtyAndInfos.setQuantity(e.getValue().size()); + parcelQtyAndInfos.setParcelInfos(e.getValue()); + return parcelQtyAndInfos; + })); + } } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/ParcelStatusServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/ParcelStatusServiceImpl.java new file mode 100644 index 000000000..eab8b4c56 --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/ParcelStatusServiceImpl.java @@ -0,0 +1,23 @@ +package org.jeecg.modules.business.service.impl; + +import org.jeecg.modules.business.entity.ParcelStatus; +import org.jeecg.modules.business.mapper.ParcelStatusMapper; +import org.jeecg.modules.business.service.IParcelStatusService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +import java.util.List; + +/** + * @Description: parce status + * @Author: jeecg-boot + * @Date: 2024-04-18 + * @Version: V1.0 + */ +@Service +public class ParcelStatusServiceImpl extends ServiceImpl implements IParcelStatusService { + @Autowired + ParcelStatusMapper parcelStatusMapper; +} diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/vo/ParcelInfos.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/vo/ParcelInfos.java new file mode 100644 index 000000000..81442fc1a --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/vo/ParcelInfos.java @@ -0,0 +1,16 @@ +package org.jeecg.modules.business.vo; + +import com.alibaba.fastjson.annotation.JSONField; +import lombok.Data; + +import java.util.List; + +@Data +public class ParcelInfos { + @JSONField(name = "tracking_number") + private String trackingNumbers; + @JSONField(name = "platform_order_id") + private String platformOrderIds; + @JSONField(name = "status") + private String status; +} diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/vo/ParcelQtyAndInfos.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/vo/ParcelQtyAndInfos.java new file mode 100644 index 000000000..b577a83d9 --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/vo/ParcelQtyAndInfos.java @@ -0,0 +1,11 @@ +package org.jeecg.modules.business.vo; + +import lombok.Data; + +import java.util.List; + +@Data +public class ParcelQtyAndInfos { + private Integer quantity; + private List parcelInfos; +} diff --git a/jeecg-module-system/jeecg-system-start/src/main/resources/application-dev.yml b/jeecg-module-system/jeecg-system-start/src/main/resources/application-dev.yml index 13dc71085..5965d0d42 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/resources/application-dev.yml +++ b/jeecg-module-system/jeecg-system-start/src/main/resources/application-dev.yml @@ -160,7 +160,7 @@ spring: slow-sql-millis: 5000 datasource: master: - url: jdbc:mysql://192.168.31.16:3306/wia_app?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai&connectTimeout=5000&socketTimeout=60000 + url: jdbc:mysql://192.168.31.16:3306/wia_app?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai&connectTimeout=5000&socketTimeout=60000&autoReconnect=true&failOverReadOnly=false&maxReconnects=10 username: admin password: WIASourcing2023+ driver-class-name: com.mysql.cj.jdbc.Driver @@ -189,7 +189,7 @@ mybatis-plus: table-underline: true configuration: # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用 - #log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 返回类型为Map,显示null对应的字段 call-setters-on-nulls: true #jeecg专用配置