Commit 2c47bfb5 by 丁伟峰

Merge branch 'feat-dingwf-mvp616' into develop

# Conflicts:
#	project-order/src/main/java/com/alibaba/cloud/integration/order/controller/OrderCreateController.java
2 parents d68a5b6a 7a8173ae
Showing with 1227 additions and 249 deletions
......@@ -19,19 +19,14 @@ package com.alibaba.cloud.integration.order.controller;
import com.alibaba.cloud.integration.common.BusinessException;
import com.alibaba.cloud.integration.common.Result;
import com.alibaba.cloud.integration.order.dto.OrderCreateReqDTO;
import com.alibaba.cloud.integration.order.dto.TimeRangeReqDTO;
import com.alibaba.cloud.integration.order.dto.CapacityQueryReqDTO;
import com.alibaba.cloud.integration.order.service.OrderService;
import com.alibaba.cloud.integration.order.service.ProductService;
import com.alibaba.cloud.integration.order.service.TimeRangeService;
import com.alibaba.cloud.integration.order.service.CapacityQueryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* @author TrevorLink
*/
@RestController
public class OrderCreateController {
......@@ -39,10 +34,7 @@ public class OrderCreateController {
private OrderService orderService;
@Autowired
private ProductService productService;
@Autowired
private TimeRangeService timeRangeService;
private CapacityQueryService capacityQueryService;
@PostMapping("/order/service/create")
public Result<?> createOrder(@Validated @RequestBody OrderCreateReqDTO orderCreateReqDTO) {
......@@ -59,27 +51,21 @@ public class OrderCreateController {
public Result<?> getParameter() {
Result<?> res = null;
try {
res = productService.getProductCategoryList();
res = orderService.initParameter();
} catch (BusinessException e) {
return Result.failed(e.getMessage());
}
return res;
}
@PostMapping("/order/service/timerange")
public Result<?> getTimerange(@Validated @RequestBody TimeRangeReqDTO timeRangeReqDTO) {
@PostMapping("/order/service/capacity/query")
public Result<?> capacityQuery(@Validated @RequestBody CapacityQueryReqDTO capacityQueryReqDTO) {
Result<?> res = null;
try {
res = timeRangeService.getTimeRangeData(timeRangeReqDTO);
res = capacityQueryService.getOneCapacityData(capacityQueryReqDTO);
} catch (BusinessException e) {
return Result.failed(e.getMessage());
}
return res;
}
@GetMapping("/test")
public Result<?> test(@RequestParam(value = "param", required = false) String param) {
System.out.println("test ok");
return Result.success("test ok");
}
}
package com.alibaba.cloud.integration.order.controller;
import com.alibaba.cloud.integration.common.BusinessException;
import com.alibaba.cloud.integration.common.Result;
import com.alibaba.cloud.integration.order.dto.LevelReqDTO;
import com.alibaba.cloud.integration.order.service.OrganizationService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
public class OrganizationController {
@Autowired
OrganizationService organizationService;
@GetMapping("/organization/tree")
public Result<?> organizationTree(LevelReqDTO reqDTO) {
Result<?> res = null;
try {
res = organizationService.getOrganizationTree(reqDTO.getLevelType(), reqDTO.getLevelValue());
} catch (BusinessException e) {
return Result.failed(e.getMessage());
}
return res;
}
@GetMapping("/organization/team/list")
public Result<?> getTeams(LevelReqDTO reqDTO) {
Result<?> res = null;
try {
res = organizationService.getTeamsByLevel(reqDTO.getLevelType(), reqDTO.getLevelValue());
} catch (BusinessException e) {
return Result.failed(e.getMessage());
}
return res;
}
@GetMapping("/organization/engineer/list")
public Result<?> getTeamsEngineers(@RequestParam String[] teamIds) {
Result<?> res = null;
try {
res = organizationService.getEngineersByTeams(teamIds);
} catch (BusinessException e) {
return Result.failed(e.getMessage());
}
return res;
}
}
package com.alibaba.cloud.integration.order.dao;
import com.alibaba.cloud.integration.order.entity.CapacityTeamStatEntity;
import org.hibernate.annotations.Where;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface CapacityTeamStatDao extends JpaRepository<CapacityTeamStatEntity, Long> {
List<CapacityTeamStatEntity> findAllByTeamIdAndSkillTagAndWorkdayBetween(String teamId, String skill, String beginDate, String endDate);
List<CapacityTeamStatEntity> findAllByTeamIdAndLayerAndWorkdayBetween(String teamId, String layer, String beginDate, String endDate);
}
package com.alibaba.cloud.integration.order.dao;
import com.alibaba.cloud.integration.order.entity.EngineerInfoEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface EngineerInfoDao extends JpaRepository {
EngineerInfoEntity getByEngineerCode(String engineerCode);
}
package com.alibaba.cloud.integration.order.dao;
import com.alibaba.cloud.integration.order.entity.MapBlockInfoEntity;
import org.hibernate.annotations.Where;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
@Repository
@Where(clause = "status = 1")
public interface MapBlockInfoDao extends JpaRepository<MapBlockInfoEntity, Integer> {
@Query("select s.teamId from MapBlockInfoEntity s where s.blockId = :blockId and s.layer = :layer")
String getTeamidByBlockidAndLayer(String blockId, String layer);
}
......@@ -3,5 +3,5 @@ package com.alibaba.cloud.integration.order.dao;
import com.alibaba.cloud.integration.order.entity.OrderRequestEntity;
import org.springframework.data.jpa.repository.JpaRepository;
public interface OrderReqeustDao extends JpaRepository <OrderRequestEntity, Long> {
public interface OrderRequestDao extends JpaRepository <OrderRequestEntity, Long> {
}
package com.alibaba.cloud.integration.order.dao;
import com.alibaba.cloud.integration.order.entity.OrgBranchEntity;
import com.alibaba.cloud.integration.order.entity.OrgClusterEntity;
import org.hibernate.annotations.Where;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
@Where(clause = "status = 1")
public interface OrgBranchDao extends JpaRepository<OrgBranchEntity, Integer> {
List<OrgBranchEntity> findAllByClusterId(String clusterId);
OrgBranchEntity getByBranchId(String branchId);
}
package com.alibaba.cloud.integration.order.dao;
import com.alibaba.cloud.integration.order.entity.OrgClusterEntity;
import org.hibernate.annotations.Where;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
@Where(clause = "status = 1")
public interface OrgClusterDao extends JpaRepository <OrgClusterEntity, Integer> {
OrgClusterEntity getByClusterId(String clusterId);
}
package com.alibaba.cloud.integration.order.dao;
import com.alibaba.cloud.integration.order.entity.OrgGroupEntity;
import org.hibernate.annotations.Where;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
@Where(clause = "status = 1")
public interface OrgGroupDao extends JpaRepository<OrgGroupEntity, Integer> {
List<OrgGroupEntity> findAllByBranchId(String branchId);
OrgGroupEntity getByGroupId(String groupId);
}
package com.alibaba.cloud.integration.order.dao;
import com.alibaba.cloud.integration.order.entity.OrgTeamEntity;
import org.hibernate.annotations.Where;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
@Where(clause = "status = 1")
public interface OrgTeamDao extends JpaRepository<OrgTeamEntity, Integer> {
List<OrgTeamEntity> findAllByClusterId(String clusterId);
List<OrgTeamEntity> findAllByBranchId(String branchId);
List<OrgTeamEntity> findAllByGroupId(String groupId);
}
package com.alibaba.cloud.integration.order.dao;
import com.alibaba.cloud.integration.order.entity.OrgTeamEngineerEntity;
import org.hibernate.annotations.Where;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
@Where(clause = "status = 1")
public interface OrgTeamEngineerDao {
List<OrgTeamEngineerEntity> findAllByTeamidIn(String[] teamIds);
}
......@@ -2,6 +2,12 @@ package com.alibaba.cloud.integration.order.dao;
import com.alibaba.cloud.integration.order.entity.ProductCategoryEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
public interface ProductCategoryDao extends JpaRepository<ProductCategoryEntity, Long> {
ProductCategoryEntity getProductCategoryEntityByBrandAndTypeAndSkill(String brand, String type, String skill);
@Query("select p.layer from ProductCategoryEntity p where p.brand = :brand and p.type = :type and p.skill = :skill")
String getLayerByBrandAndTypeAndSkill(String brand, String type, String skill);
}
package com.alibaba.cloud.integration.order.dto;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
@Data
@Accessors(chain = true)
public class BrandDTO {
private String label;
private String value;
private List<KeyValueDTO> categories;
}
package com.alibaba.cloud.integration.order.dto;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
@Data
@Accessors(chain = true)
public class CalendarDTO {
private String week;
private String date;
private List<TimeDTO> times;
}
......@@ -3,9 +3,12 @@ package com.alibaba.cloud.integration.order.dto;
import lombok.Data;
@Data
public class TimeRangeReqDTO {
public class CapacityQueryReqDTO {
private String location;
private String categoryId;
private String address;
private String brand;
private String type;
private String skill;
private String beginDate;
private String endDate;
}
package com.alibaba.cloud.integration.order.dto;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
@Data
@Accessors(chain = true)
public class CapacityQueryRespDTO {
private String beginDate;
private String endDate;
private String remark;
private List<LegendDTO> legend;
private List<CalendarDTO> calendar;
@Data
@Accessors(chain = true)
public static class LegendDTO {
private int type;
private String memo;
}
@Data
@Accessors(chain = true)
public static class CalendarDTO {
private String week;
private String date;
private List<TimeDTO> times;
}
@Data
@Accessors(chain = true)
public static class TimeDTO {
private String text;
private String begin;
private String end;
private int type;
}
}
......@@ -5,7 +5,7 @@ import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
public class LegendDTO {
private int type;
private String memo;
public class LevelReqDTO {
private String levelType;
private String levelValue;
}
......@@ -9,7 +9,8 @@ public class OrderCreateReqDTO {
private String address;
private LocationDTO location;
private String brand;
private String catalogId;
private String type;
private String skill;
private String faultDescribe;
private String expectBegin;
private String expectEnd;
......
package com.alibaba.cloud.integration.order.dto;
import lombok.experimental.Accessors;
import org.checkerframework.checker.units.qual.Acceleration;
import java.util.List;
@lombok.Data
@Accessors(chain = true)
public class OrganizationEngineersRespDTO {
private List<?> engineers;
@lombok.Data
public static class Engineer {
/**
* 技术员id
*/
private String engineerCode;
/**
* 技术员姓名
*/
private String engineerName;
/**
* 所属团队Id
*/
private String teamId;
public Engineer(){
}
public Engineer(String teamId, String engineerCode, String engineerName){
this.teamId = teamId;
this.engineerCode = engineerCode;
this.engineerName = engineerName;
}
}
}
package com.alibaba.cloud.integration.order.dto;
import lombok.experimental.Accessors;
import java.util.List;
@lombok.Data
@Accessors(chain = true)
public class OrganizationTeamsRespDTO {
private List<?> teams;
@lombok.Data
@Accessors(chain = true)
public static class Team {
/**
* 所属的分部ID
*/
private String branchId;
/**
* 所属的大区ID
*/
private String clusterId;
/**
* 所属的分站ID
*/
private String groupId;
/**
* 工作队ID
*/
private String teamId;
/**
* 工作队名称
*/
private String teamName;
/**
* 工作队类型,1-系统默认工作队名称 2-自定义工作队
*/
private long teamType;
}
}
package com.alibaba.cloud.integration.order.dto;
@lombok.Data
public class OrganizationTreeReqDTO {
private String levelType;
private String levelId;
}
package com.alibaba.cloud.integration.order.dto;
import lombok.experimental.Accessors;
import java.util.List;
@lombok.Data
@Accessors(chain = true)
public class OrganizationTreeRespDTO {
private List<?> clusters;
@lombok.Data
@Accessors(chain = true)
public static class Cluster {
/**
* 下级
*/
private List<?> children;
/**
* 大区ID
*/
private String id;
/**
* 大区名称
*/
private String title;
/**
* 类型
*/
private String type;
}
/**
* Branch
*/
@lombok.Data
@Accessors(chain = true)
public static class Branch {
/**
* 下级
*/
private List<?> children;
/**
* 分部ID
*/
private String id;
/**
* 分部名称
*/
private String title;
/**
* 类型
*/
private String type;
}
/**
* Group
*/
@lombok.Data
@Accessors(chain = true)
public static class Group {
/**
* 分站ID
*/
private String id;
/**
* 分站名称
*/
private String title;
/**
* 类型
*/
private String type;
}
}
......@@ -8,7 +8,6 @@ import java.util.List;
@Data
@Accessors(chain = true)
public class ParameterRespDTO {
private List<BrandDTO> brands;
private List<KeyValueDTO> priorities;
private List<KeyValueDTO> standardTags;
}
package com.alibaba.cloud.integration.order.dto;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
public class TimeDTO {
private String text;
private String begin;
private String end;
private int type;
}
package com.alibaba.cloud.integration.order.dto;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
@Data
@Accessors(chain = true)
public class TimeRangeRespDTO {
private String beginDate;
private String endDate;
private List<LegendDTO> legend;
private List<CalendarDTO> calendar;
}
......@@ -35,7 +35,7 @@ public class CapacityTeamStatEntity implements Serializable {
private String teamId;
private String skillTag;
private String layer;
private Integer engineerCount;
......@@ -67,4 +67,4 @@ public class CapacityTeamStatEntity implements Serializable {
private Date updateTime;
}
\ No newline at end of file
}
package com.alibaba.cloud.integration.order.entity;
import lombok.Data;
import javax.persistence.*;
import java.util.Date;
@Data
@Entity
@Table(name="engineer_info")
public class EngineerInfoEntity {
/**
* 工程师id
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
/**
* 工程师工号
*/
private String engineerCode;
/**
* 工程师姓名
*/
private String name;
/**
* 归属小组(分站、网点..)
*/
private String groupId;
/**
* 原cosmos id
*/
private String cosmosId;
/**
* 性别
*/
private String gender;
/**
* 出生年份
*/
private String birth;
/**
* 手机号码
*/
private String phone;
/**
* 地址
*/
private String address;
/**
* 类型(1全职 2兼职)
*/
private int kind;
/**
* 职级,c2,c1...
*/
private String grade;
/**
* 证书,如:低压电工证、燃气证
*/
private String credentials;
/**
* 交通工具,1电动车 2摩托车 3公交车 4自驾
*/
private int vehicle;
/**
* 摩托车、汽车的车牌号,便于计算限行
*/
private String vehicleNo;
/**
* bean帐号状态(0无效 1有效)
*/
private int beanStatus;
/**
* 技术员软标签 { 营销技能 :9, 沟通能力 :7}
*/
private String tags;
/**
* 备注
*/
private String memo;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
public EngineerInfoEntity() {}
}
package com.alibaba.cloud.integration.order.entity;
import lombok.Data;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;
@Entity
@Data
@Table(name="map_block_Info")
public class MapBlockInfoEntity {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
/**
* 主键
*/
private Integer id;
/**
* 区块id
*/
private String blockId;
/**
* 区块名称
*/
private String blockName;
/**
* 归属分部
*/
private String subsectionId;
/**
* 归属小组
*/
private String groupId;
/**
* 所在城市id
*/
private String cityCode;
/**
* 面数据
*/
private String areaData;
/**
* 类型(1自然行政片区,2自定义片区)
*/
private int kind;
/**
* 关联小队id
*/
private String teamId;
/**
* 图标标签,[基础图层,ggn] -- 与map_layer.layer 对应
*/
private String layer;
/**
* 状态(0无效 1有效)
*/
private int status;
/**
* 备注
*/
private String memo;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
public MapBlockInfoEntity() {}
}
......@@ -3,43 +3,51 @@ package com.alibaba.cloud.integration.order.entity;
import lombok.Data;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;
@Data
@Entity
@Table(name="layer_info")
public class LayerInfoEntity implements Serializable {
private static final long serialVersionUID = 1L;
@Data
@Table(name = "org_branch")
public class OrgBranchEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private int id;
private String layerId;
private String layerName;
private String branchId;
private String branchName;
private String clusterId;
private String subsectionId;
private String address;
private String groupId;
private String cityCode;
private String x;
private String areaDta;
private Integer kind;
private String y;
private String teamId;
private String tags;
private String citycodeList;
private int kind;
private String layerId;
private Integer status;
private String memo;
private Date createTime;
private Date updateTime;
private Date updateTime;
public OrgBranchEntity() {}
}
package com.alibaba.cloud.integration.order.entity;
import lombok.Data;
import javax.persistence.*;
import java.util.Date;
@Entity
@Data
@Table(name = "org_cluster")
public class OrgClusterEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String clusterId;
private String name;
private String citycodeList;
private String address;
private String cityName;
private int status;
private String updateUser;
private Date createTime;
private Date updateTime;
public OrgClusterEntity() {
}
}
package com.alibaba.cloud.integration.order.entity;
import lombok.Data;
import javax.persistence.*;
import java.util.Date;
@Entity
@Data
@Table(name = "org_group")
public class OrgGroupEntity {
/**
* id
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
/**
* 小组id
*/
private String groupId;
/**
* 小组名称
*/
private String groupName;
/**
* 归属大区
*/
private String clusterId;
/**
* 归属分部
*/
private String branchId;
/**
* 办公地址
*/
private String address;
/**
* 办公地址经度
*/
private String x;
/**
* 办公地址纬度
*/
private String y;
/**
* 小组所在城市code
*/
private String cityCode;
/**
* 类型(1分站,2外围,3小组,4网点,5自保点)
*/
private int kind;
/**
* 类型(1自有,2加盟)
*/
private int category;
/**
* 默认配件仓
*/
private int warehouseId;
/**
* 备注
*/
private String memo;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
public OrgGroupEntity() {}
}
package com.alibaba.cloud.integration.order.entity;
import lombok.Data;
import javax.persistence.*;
import java.util.Date;
@Entity
@Data
@Table(name = "org_team_engineer")
public class OrgTeamEngineerEntity {
private static final long serialVersionUID = 1L;
/**
* id
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
/**
* 工作队id
*/
private String teamId;
/**
* 工程师工号
*/
private String engineerCode;
/**
* 状态(0无效 1有效)
*/
private int status;
/**
* 备注
*/
private String memo;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
public OrgTeamEngineerEntity() {
}
}
package com.alibaba.cloud.integration.order.entity;
import lombok.Data;
import javax.persistence.*;
import java.util.Date;
@Entity
@Data
@Table(name = "org_team")
public class OrgTeamEntity {
/**
* id
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
/**
* 工作队id
*/
private String teamId;
/**
* 工作队名称
*/
private String teamName;
/**
* 类别:1 映射工作队 2自定义工作队
*/
private int teamType;
/**
* 归属大区
*/
private String clusterId;
/**
* 归属分部
*/
private String branchId;
/**
* 归属小组
*/
private String groupId;
/**
* 取件配件仓
*/
private String warehouseId;
/**
* 工作日,1表示星期一,2表示星期二
*/
private String workdays;
/**
* 备注
*/
private String memo;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
public OrgTeamEntity(){
}
}
......@@ -23,76 +23,64 @@ public class ProductCategoryEntity {
/**
* 小组id
*/
@Column(name="product_category_id")
private String productCategoryId;
/**
* 品牌
*/
@Column(name="brand")
private String brand;
/**
* 产品类别
*/
@Column(name="type")
private String type;
/**
* 服务类型
*/
@Column(name="skill")
private String skill;
/**
* 所需工时(分钟)
*/
@Column(name="take_time")
private Integer takeTime;
/**
* 所需人数
*/
@Column(name="take_engineer")
private Integer takeEngineer;
/**
* 是否需要低压电工证
*/
@Column(name="low_electrician_cert")
private int lowElectricianCert;
/**
* 是否需要燃气证
*/
@Column(name="gas_cert")
private int gasCert;
/**
* 图层标签
*/
@Column(name="tag")
private String tag;
private String layer;
/**
* 备注
*/
@Column(name="memo")
private String memo;
/**
* 创建时间
*/
@Column(name="create_time")
private Date createTime;
/**
* 更新时间
*/
@Column(name="update_time")
private Date updateTime;
public ProductCategoryEntity() {
}
}
\ No newline at end of file
}
package com.alibaba.cloud.integration.order.service;
import com.alibaba.cloud.integration.common.Result;
import com.alibaba.cloud.integration.order.dto.CapacityQueryReqDTO;
import com.fasterxml.jackson.core.JsonProcessingException;
public interface CapacityQueryService {
/**
* 单条容量查询
* @param capacityQueryReqDTO
* @return
* @throws JsonProcessingException
*/
Result<?> getOneCapacityData(CapacityQueryReqDTO capacityQueryReqDTO);
}
......@@ -25,6 +25,8 @@ import com.alibaba.cloud.integration.order.dto.OrderCreateReqDTO;
*/
public interface OrderService {
Result<?> initParameter();
Result<?> createOrder(OrderCreateReqDTO orderCreateReqDTO)
throws BusinessException;
......
package com.alibaba.cloud.integration.order.service;
import com.alibaba.cloud.integration.common.Result;
public interface OrganizationService {
Result<?> getOrganizationTree(String levelType, String levelId);
Result<?> getEngineersByTeams(String[] teamIds);
Result<?> getTeamsByLevel(String levelType, String levelValue);
}
package com.alibaba.cloud.integration.order.service;
import com.alibaba.cloud.integration.common.Result;
import com.alibaba.cloud.integration.order.dto.BrandDTO;
public interface ProductService {
Result<?> getProductCategoryList();
}
package com.alibaba.cloud.integration.order.service;
import com.alibaba.cloud.integration.common.Result;
import com.alibaba.cloud.integration.order.dto.TimeRangeReqDTO;
public interface TimeRangeService {
Result<?> getTimeRangeData(TimeRangeReqDTO timeRangeReqDTO);
}
......@@ -2,15 +2,21 @@ package com.alibaba.cloud.integration.order.service.impl;
import com.alibaba.cloud.integration.common.Result;
import com.alibaba.cloud.integration.order.dao.CapacityTeamStatDao;
import com.alibaba.cloud.integration.order.dto.CalendarDTO;
import com.alibaba.cloud.integration.order.dto.TimeDTO;
import com.alibaba.cloud.integration.order.dto.TimeRangeReqDTO;
import com.alibaba.cloud.integration.order.dto.TimeRangeRespDTO;
import com.alibaba.cloud.integration.order.dao.MapBlockInfoDao;
import com.alibaba.cloud.integration.order.dao.ProductCategoryDao;
import com.alibaba.cloud.integration.order.dto.CapacityQueryReqDTO;
import com.alibaba.cloud.integration.order.dto.CapacityQueryRespDTO;
import com.alibaba.cloud.integration.order.entity.CapacityTeamStatEntity;
import com.alibaba.cloud.integration.order.service.TimeRangeService;
import com.alibaba.cloud.integration.order.service.CapacityQueryService;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.*;
import org.springframework.stereotype.Service;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import java.time.DayOfWeek;
import java.time.LocalDate;
......@@ -20,22 +26,30 @@ import java.util.*;
@Service
@Slf4j
public class TimeRangeServiceImpl implements TimeRangeService {
public class CapacityQueryServiceImpl implements CapacityQueryService {
private final String[] fullDay = {"08:00", "18:00"};
@Autowired
private CapacityTeamStatDao capacityTeamStatDao;
@Autowired
private ProductCategoryDao productCategoryDao;
@Autowired
private MapBlockInfoDao mapBlockInfoDao;
@Override
public Result<?> getTimeRangeData(TimeRangeReqDTO reqDTO) {
public Result<?> getOneCapacityData(CapacityQueryReqDTO reqDTO) {
/*
location ==> [layer_info] ==> team ==> (+skill) ==> [capacity_team_stat]
*/
String teamId = getTeamByLayer(reqDTO.getLocation());
TimeRangeRespDTO timeRangeRespDTO = new TimeRangeRespDTO();
timeRangeRespDTO.setBeginDate(timeRangeRespDTO.getBeginDate()).setEndDate(reqDTO.getEndDate());
timeRangeRespDTO.setCalendar(getTimeRangeByTeamSkill(teamId, reqDTO.getCategoryId(), reqDTO.getBeginDate(), reqDTO.getEndDate()));
return Result.success(timeRangeRespDTO);
String layer = productCategoryDao.getLayerByBrandAndTypeAndSkill(reqDTO.getBrand(), reqDTO.getType(), reqDTO.getSkill());
String teamId = getTeamByLayer(reqDTO.getLocation(), reqDTO.getAddress(), layer);
CapacityQueryRespDTO capacityQueryRespDTO = new CapacityQueryRespDTO();
capacityQueryRespDTO.setBeginDate(capacityQueryRespDTO.getBeginDate()).setEndDate(reqDTO.getEndDate());
capacityQueryRespDTO.setCalendar(getTimeRangeByTeamSkill(teamId, reqDTO.getSkill(), reqDTO.getBeginDate(), reqDTO.getEndDate()));
capacityQueryRespDTO.setRemark(String.format("%s-%s", teamId, layer));
return Result.success(capacityQueryRespDTO);
}
/**
......@@ -45,9 +59,53 @@ public class TimeRangeServiceImpl implements TimeRangeService {
* @param location
* @return
*/
private String getTeamByLayer(String location) {
// todo
return null;
private String getTeamByLayer(String location, String address, String layer) {
// todo 由于saas的分单接口尚未完成,目前仅仅是调用分单获取
// 创建RestTemplate实例
RestTemplate restTemplate = new RestTemplate();
// 设置请求头
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
// 构建请求参数
String url;
MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
params.add("ak", "284c57cbabad4755a9c657885a8df3e2");
if (location != null && !location.isEmpty()) {
url = "https://pea-test.bshg.com.cn/v2/xyfendan";
params.add("coordinate", location);
} else {
url = "https://pea-test.bshg.com.cn/v2/fendan";
params.add("addresses", String.format("[{\"address\":\"%s\"}]", address));
}
params.add("need_district", "true");
params.add("need_layer", "true");
params.add("related_point_fields", "");
params.add("area_fields", "名称,唯一编号");
// 构建请求实体
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers);
// 发送POST请求
ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class);
// 获取响应结果
String responseBody = responseEntity.getBody();
// 使用Jackson库解析JSON数据
ObjectMapper objectMapper = new ObjectMapper();
try {
JsonNode responseJson = objectMapper.readTree(responseBody);
// 获取areaResults[0]的值
JsonNode areaResult = responseJson.get("result").get(0).get("areaResults").get(0);
// 将areaResult转换为JSON字符串
// todo 分单接口其实也应该直接返回 图层
return mapBlockInfoDao.getTeamidByBlockidAndLayer(areaResult.get("field2").toString(), layer);
} catch (Exception e) {
return null;
}
}
private int getSpanType(int capLeft, int capTotal) {
......@@ -82,23 +140,23 @@ public class TimeRangeServiceImpl implements TimeRangeService {
* 根据工作队、技能,返回对应时间段内的容量
*
* @param teamId
* @param skill
* @param layer
* @param beginDate
* @param endDate
* @return
*/
private List<CalendarDTO> getTimeRangeByTeamSkill(String teamId, String skill, String beginDate, String endDate) {
Map<String, CalendarDTO> dayMaps = new HashMap<>();
List<CapacityTeamStatEntity> capacityTeamStatEntityList = capacityTeamStatDao.findAllByTeamIdAndSkillTagAndWorkdayBetween(teamId, skill, beginDate, endDate);
private List<CapacityQueryRespDTO.CalendarDTO> getTimeRangeByTeamSkill(String teamId, String layer, String beginDate, String endDate) {
Map<String, CapacityQueryRespDTO.CalendarDTO> dayMaps = new HashMap<>();
List<CapacityTeamStatEntity> capacityTeamStatEntityList = capacityTeamStatDao.findAllByTeamIdAndLayerAndWorkdayBetween(teamId, layer, beginDate, endDate);
for (CapacityTeamStatEntity e : capacityTeamStatEntityList) {
TimeDTO timeDTO = new TimeDTO();
CapacityQueryRespDTO.TimeDTO timeDTO = new CapacityQueryRespDTO.TimeDTO();
timeDTO.setType(getSpanType(e.getCapLeft(), e.getCapTotal()));
Object[] timeSpans = getTimeSpanInfo(e.getWorkday(), e.getTimeSpan(), e.getTimeSpanDetail());
timeDTO.setText((String) timeSpans[0]);
timeDTO.setBegin((String) timeSpans[1]);
timeDTO.setEnd((String) timeSpans[2]);
if (!dayMaps.containsKey(e.getWorkday())) {
CalendarDTO calendarDTO = new CalendarDTO();
CapacityQueryRespDTO.CalendarDTO calendarDTO = new CapacityQueryRespDTO.CalendarDTO();
calendarDTO.setDate(e.getWorkday());
calendarDTO.setWeek(getWeekday(e.getWorkday()));
dayMaps.put(e.getWorkday(), calendarDTO);
......@@ -114,4 +172,5 @@ public class TimeRangeServiceImpl implements TimeRangeService {
DayOfWeek weekday = date.getDayOfWeek();
return String.format("周%s", weekday.getDisplayName(TextStyle.SHORT, Locale.CHINA));
}
}
......@@ -17,30 +17,73 @@
package com.alibaba.cloud.integration.order.service.impl;
import com.alibaba.cloud.integration.common.Result;
import com.alibaba.cloud.integration.order.dao.OrderReqeustDao;
import com.alibaba.cloud.integration.order.dao.OrderRequestDao;
import com.alibaba.cloud.integration.order.dao.OrderTagStrategyDao;
import com.alibaba.cloud.integration.order.dao.ProductCategoryDao;
import com.alibaba.cloud.integration.order.dto.KeyValueDTO;
import com.alibaba.cloud.integration.order.dto.LocationDTO;
import com.alibaba.cloud.integration.order.dto.OrderCreateReqDTO;
import com.alibaba.cloud.integration.order.dto.ParameterRespDTO;
import com.alibaba.cloud.integration.order.entity.OrderRequestEntity;
import com.alibaba.cloud.integration.order.feign.AccountServiceFeignClient;
import com.alibaba.cloud.integration.order.feign.StorageServiceFeignClient;
import com.alibaba.cloud.integration.order.mapper.OrderMapper;
import com.alibaba.cloud.integration.order.entity.ProductCategoryEntity;
import com.alibaba.cloud.integration.order.service.OrderService;
import io.seata.core.context.RootContext;
import io.seata.spring.annotation.GlobalTransactional;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Slf4j
@Service
public class OrderServiceImpl implements OrderService {
@Autowired
private OrderReqeustDao orderReqeustDao;
private OrderRequestDao orderRequestDao;
@Autowired
private OrderTagStrategyDao orderTagStrategyDao;
@Autowired
private ProductCategoryDao productCategoryDao;
private List<KeyValueDTO> getPriorities() {
List<KeyValueDTO> listPriorities = new ArrayList<>();
int prioritiesLevels = 10;
for (int i = 0; i <= prioritiesLevels; i++) {
String label;
if (i == 0) {
label = "最低";
} else if (i == prioritiesLevels) {
label = "最高";
} else {
label = String.format("优先级%d", i);
}
listPriorities.add(new KeyValueDTO().setLabel(label).setValue(String.valueOf(i)));
}
return listPriorities;
}
private List<KeyValueDTO> getStandardTags() {
List<KeyValueDTO> tagList = new ArrayList<>();
for (String tag : orderTagStrategyDao.getAllTags()) {
tagList.add(new KeyValueDTO().setLabel(tag).setValue(tag));
}
return tagList;
}
@Override
public Result<?> initParameter() {
ParameterRespDTO respDTO = new ParameterRespDTO();
respDTO.setPriorities(getPriorities()).setStandardTags(getStandardTags());
return Result.success(respDTO);
}
@Override
@GlobalTransactional
public Result<?> createOrder(OrderCreateReqDTO req) {
log.info("[createOrder] current XID: {}", RootContext.getXID());
......@@ -49,7 +92,13 @@ public class OrderServiceImpl implements OrderService {
entity.setPhone(req.getPhone());
entity.setAddress(req.getAddress());
entity.setBrand(req.getBrand());
entity.setCategoryId(req.getCatalogId());
ProductCategoryEntity categoryEntity = productCategoryDao.getProductCategoryEntityByBrandAndTypeAndSkill(req.getBrand(), req.getType(), req.getSkill());
if (categoryEntity == null) {
throw new RuntimeException("产品代码不存在!");
}
String catalogId = categoryEntity.getProductCategoryId();
entity.setCategoryId(catalogId);
entity.setFaultDescribe(req.getFaultDescribe());
entity.setExpectTimeBegin(req.getExpectBegin());
entity.setExpectTimeEnd(req.getExpectEnd());
......@@ -59,7 +108,7 @@ public class OrderServiceImpl implements OrderService {
entity.setProvince(location.getProvince());
entity.setCity(location.getCity());
entity.setCounty(location.getCountry());
orderReqeustDao.save(entity);
// 根据orderTags, 解析保存到type、skill等字段
String[] l = req.getLocation().getLocation().split(",");
entity.setX(l[0]);
......@@ -67,6 +116,7 @@ public class OrderServiceImpl implements OrderService {
// todo 服务单状态、预约状态等
entity.setStatus("");
entity.setAppointmentStatus("");
orderRequestDao.save(entity);
return Result.success(null);
}
}
package com.alibaba.cloud.integration.order.service.impl;
import com.alibaba.cloud.integration.common.Result;
import com.alibaba.cloud.integration.order.dao.*;
import com.alibaba.cloud.integration.order.dto.OrganizationEngineersRespDTO;
import com.alibaba.cloud.integration.order.dto.OrganizationTeamsRespDTO;
import com.alibaba.cloud.integration.order.dto.OrganizationTreeRespDTO;
import com.alibaba.cloud.integration.order.entity.*;
import com.alibaba.cloud.integration.order.service.OrganizationService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@Service
@Slf4j
public class OrganizationServiceImpl implements OrganizationService {
@Autowired
OrgClusterDao orgClusterDao;
@Autowired
OrgBranchDao orgBranchDao;
@Autowired
OrgGroupDao orgGroupDao;
@Autowired
OrgTeamEngineerDao orgTeamEngineerDao;
@Autowired
EngineerInfoDao engineerInfoDao;
@Autowired
OrgTeamDao orgTeamDao;
@Override
public Result<?> getOrganizationTree(String levelType, String levelId) {
// 如果传递了精确的id,只返回对应的tree内容;如果没有传递,返回所有tree内容
if ("group".equals(levelType)) {
OrgGroupEntity orgGroupEntity = orgGroupDao.getByGroupId(levelId);
if (orgGroupEntity == null) {
return Result.failed("groupId对应的信息不存在");
}
List<?> groups = new ArrayList<>(Collections.singletonList(groupEntity2Dto(orgGroupEntity)));
OrgBranchEntity orgBranchEntity = orgBranchDao.getByBranchId(orgGroupEntity.getBranchId());
List<?> branchs = new ArrayList<>(Collections.singletonList(branchEntityh2Dto(orgBranchEntity).setChildren(groups)));
OrgClusterEntity orgClusterEntity = orgClusterDao.getByClusterId(orgGroupEntity.getClusterId());
List<?> clusters = new ArrayList<>(Collections.singletonList(clusterEntity2Dto(orgClusterEntity).setChildren(branchs)));
return Result.success(new OrganizationTreeRespDTO().setClusters(clusters));
} else if ("branch".equals(levelType)) {
OrgBranchEntity orgBranchEntity = orgBranchDao.getByBranchId(levelId);
if (orgBranchEntity == null) {
return Result.failed("分站信息不存在");
}
OrgClusterEntity orgClusterEntity = orgClusterDao.getByClusterId(orgBranchEntity.getClusterId());
List<?> groups = getChildByBranch(levelId);
List<?> branchs = new ArrayList<>(Collections.singletonList(branchEntityh2Dto(orgBranchEntity).setChildren(groups)));
List<?> clusters = new ArrayList<>(Collections.singletonList(clusterEntity2Dto(orgClusterEntity).setChildren(branchs)));
return Result.success(new OrganizationTreeRespDTO().setClusters(clusters));
} else if ("cluster".equals(levelType)) {
OrgClusterEntity orgClusterEntity = orgClusterDao.getByClusterId(levelId);
if (orgClusterEntity == null) {
return Result.failed("大区信息不存在");
}
List<?> branchs = getChildByCluster(levelId);
List<?> clusters = new ArrayList<>(Collections.singletonList(clusterEntity2Dto(orgClusterEntity).setChildren(branchs)));
return Result.success(new OrganizationTreeRespDTO().setClusters(clusters));
} else {
return Result.success(new OrganizationTreeRespDTO().setClusters(getTreeByRoot()));
}
}
@Override
public Result<?> getEngineersByTeams(String[] teamIds) {
List<OrganizationEngineersRespDTO.Engineer> engineers = new ArrayList<>();
for (OrgTeamEngineerEntity e : orgTeamEngineerDao.findAllByTeamidIn(teamIds)) {
EngineerInfoEntity engineerInfoEntity = engineerInfoDao.getByEngineerCode(e.getEngineerCode());
if (engineerInfoEntity == null) {
log.error("技术员信息不存在!engineer_code[%s]", e.getEngineerCode());
continue;
}
engineers.add(new OrganizationEngineersRespDTO.Engineer(e.getTeamId(), e.getEngineerCode(), engineerInfoEntity.getName()));
}
return Result.success(new OrganizationEngineersRespDTO().setEngineers(engineers));
}
@Override
public Result<?> getTeamsByLevel(String levelType, String levelValue) {
List<OrgTeamEntity> entities;
if ("cluster".equals(levelType)) {
entities = orgTeamDao.findAllByClusterId(levelValue);
} else if ("branch".equals(levelType)) {
entities = orgTeamDao.findAllByBranchId(levelValue);
} else if ("group".equals(levelType)) {
entities = orgTeamDao.findAllByGroupId(levelValue);
} else {
entities = orgTeamDao.findAll();
}
List<OrganizationTeamsRespDTO.Team> teams = new ArrayList<>();
for (OrgTeamEntity e : entities) {
teams.add(new OrganizationTeamsRespDTO.Team()
.setTeamType(e.getTeamType())
.setTeamId(e.getTeamId())
.setTeamName(e.getTeamName())
.setClusterId(e.getClusterId())
.setBranchId(e.getBranchId())
.setGroupId(e.getGroupId())
);
}
return Result.success(new OrganizationTeamsRespDTO().setTeams(teams));
}
private List<?> getTreeByRoot() {
List<OrganizationTreeRespDTO.Cluster> clusters = new ArrayList<>();
for (OrgClusterEntity c : orgClusterDao.findAll()) {
clusters.add(clusterEntity2Dto(c).setChildren(getChildByCluster(c.getClusterId())));
}
return clusters;
}
private List<?> getChildByCluster(String clusterId) {
List<OrganizationTreeRespDTO.Branch> branches = new ArrayList<>();
for (OrgBranchEntity b : orgBranchDao.findAllByClusterId(clusterId)) {
branches.add(branchEntityh2Dto(b).setChildren(getChildByBranch(b.getBranchId())));
}
return branches;
}
private List<?> getChildByBranch(String branchId) {
// 获取branch及下面的group
List<OrganizationTreeRespDTO.Group> groups = new ArrayList<>();
for (OrgGroupEntity g : orgGroupDao.findAllByBranchId(branchId)) {
groups.add(groupEntity2Dto(g));
}
return groups;
}
private OrganizationTreeRespDTO.Group groupEntity2Dto(OrgGroupEntity orgGroupEntity) {
return new OrganizationTreeRespDTO.Group()
.setType("group")
.setId(orgGroupEntity.getGroupId())
.setTitle(orgGroupEntity.getGroupName());
}
private OrganizationTreeRespDTO.Branch branchEntityh2Dto(OrgBranchEntity orgBranchEntity) {
return new OrganizationTreeRespDTO.Branch()
.setType("branch")
.setId(orgBranchEntity.getBranchId())
.setTitle(orgBranchEntity.getBranchName());
}
private OrganizationTreeRespDTO.Cluster clusterEntity2Dto(OrgClusterEntity orgClusterEntity) {
return new OrganizationTreeRespDTO.Cluster()
.setType("custer")
.setId(orgClusterEntity.getClusterId())
.setTitle(orgClusterEntity.getName());
}
}
package com.alibaba.cloud.integration.order.service.impl;
import com.alibaba.cloud.integration.common.Result;
import com.alibaba.cloud.integration.order.dao.OrderTagStrategyDao;
import com.alibaba.cloud.integration.order.dao.ProductCategoryDao;
import com.alibaba.cloud.integration.order.dto.BrandDTO;
import com.alibaba.cloud.integration.order.dto.KeyValueDTO;
import com.alibaba.cloud.integration.order.dto.ParameterRespDTO;
import com.alibaba.cloud.integration.order.entity.ProductCategoryEntity;
import com.alibaba.cloud.integration.order.service.ProductService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
@Slf4j
public class ProductServiceImpl implements ProductService {
@Autowired
private ProductCategoryDao productCategoryDao;
@Autowired
private OrderTagStrategyDao orderTagStrategyDao;
private List<KeyValueDTO> getPriorities() {
List<KeyValueDTO> listPriorities = new ArrayList<>();
int prioritiesLevels = 10;
for (int i = 0; i <= prioritiesLevels; i++) {
String label;
if (i == 0) {
label = "最低";
} else if (i == prioritiesLevels) {
label = "最高";
} else {
label = String.format("优先级%d", i);
}
listPriorities.add(new KeyValueDTO().setLabel(label).setValue(String.valueOf(i)));
}
return listPriorities;
}
private List<KeyValueDTO> getStandardTags() {
List<KeyValueDTO> tagList = new ArrayList<>();
for (String tag : orderTagStrategyDao.getAllTags()) {
tagList.add(new KeyValueDTO().setLabel(tag).setValue(tag));
}
return tagList;
}
private List<BrandDTO> getBrands() {
Map<String, BrandDTO> brandMap = new HashMap<>();
for (ProductCategoryEntity e : productCategoryDao.findAll()) {
String brand = e.getBrand();
String text = String.format("%s-%s", e.getType(), e.getSkill());
KeyValueDTO categoryDto = new KeyValueDTO().setLabel(text).setValue(e.getProductCategoryId());
if (brandMap.containsKey(brand)) {
brandMap.get(brand).getCategories().add(categoryDto);
} else {
BrandDTO brandDTO = new BrandDTO().setLabel(brand).setValue(brand).setCategories(new ArrayList<>());
brandDTO.getCategories().add(categoryDto);
brandMap.put(brand, brandDTO);
}
}
return new ArrayList<>(brandMap.values());
}
@Override
public Result<?> getProductCategoryList() {
ParameterRespDTO parameterDTO =
new ParameterRespDTO().setBrands(getBrands()).setPriorities(getPriorities()).setStandardTags(getStandardTags());
return Result.success(parameterDTO);
}
}
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!