Commit 36ed7b9f by 软件中心

修改以前调用检测仪的接口为本地接口

parent 30b2740c
2024-10-21 16:45:25,139 INFO (StartupInfoLogger.java:55)- Starting DjmDataReportApplication using Java 1.8.0_191 on DESKTOP-AB45DQR with PID 38584 (F:\workspace\djm-data-report\target\classes started by Administrator in F:\workspace\djm-data-report)
2024-10-21 16:45:25,175 DEBUG (StartupInfoLogger.java:56)- Running with Spring Boot v2.7.6, Spring v5.3.24
2024-10-21 16:45:25,176 INFO (SpringApplication.java:637)- The following 1 profile is active: "test"
2024-10-21 16:45:36,531 INFO (StartupInfoLogger.java:61)- Started DjmDataReportApplication in 12.502 seconds (JVM running for 14.814)
2024-10-21 16:45:36,536 INFO (DjmDataReportApplication.java:15)- __ __
/ \~~~/ \
,----( .. )
/ \__ __/
/| (\ |(
^ \ /___\ /\ |
|__| |__|-"
---------------djm-data-report------------start------->>>>>--------
2024-10-21 16:46:33,183 INFO (StartupInfoLogger.java:55)- Starting DjmDataReportApplication using Java 1.8.0_191 on DESKTOP-AB45DQR with PID 83028 (F:\workspace\djm-data-report\target\classes started by Administrator in F:\workspace\djm-data-report)
2024-10-21 16:46:33,186 DEBUG (StartupInfoLogger.java:56)- Running with Spring Boot v2.7.6, Spring v5.3.24
2024-10-21 16:46:33,187 INFO (SpringApplication.java:637)- The following 1 profile is active: "test"
2024-10-21 16:46:41,192 INFO (StartupInfoLogger.java:61)- Started DjmDataReportApplication in 8.861 seconds (JVM running for 10.869)
2024-10-21 16:46:41,198 INFO (DjmDataReportApplication.java:15)- __ __
/ \~~~/ \
,----( .. )
/ \__ __/
/| (\ |(
^ \ /___\ /\ |
|__| |__|-"
---------------djm-data-report------------start------->>>>>--------
2024-10-21 16:47:21,364 INFO (StartupInfoLogger.java:55)- Starting DjmDataReportApplication using Java 1.8.0_191 on DESKTOP-AB45DQR with PID 17440 (F:\workspace\djm-data-report\target\classes started by Administrator in F:\workspace\djm-data-report)
2024-10-21 16:47:21,367 DEBUG (StartupInfoLogger.java:56)- Running with Spring Boot v2.7.6, Spring v5.3.24
2024-10-21 16:47:21,368 INFO (SpringApplication.java:637)- The following 1 profile is active: "test"
2024-10-21 16:47:28,529 INFO (StartupInfoLogger.java:61)- Started DjmDataReportApplication in 7.797 seconds (JVM running for 9.374)
2024-10-21 16:47:28,532 INFO (DjmDataReportApplication.java:15)- __ __
/ \~~~/ \
,----( .. )
/ \__ __/
/| (\ |(
^ \ /___\ /\ |
|__| |__|-"
---------------djm-data-report------------start------->>>>>--------
2024-10-21 16:48:29,905 INFO (StartupInfoLogger.java:55)- Starting DjmDataReportApplication using Java 1.8.0_191 on DESKTOP-AB45DQR with PID 6452 (F:\workspace\djm-data-report\target\classes started by Administrator in F:\workspace\djm-data-report)
2024-10-21 16:48:29,910 DEBUG (StartupInfoLogger.java:56)- Running with Spring Boot v2.7.6, Spring v5.3.24
2024-10-21 16:48:29,910 INFO (SpringApplication.java:637)- The following 1 profile is active: "test"
2024-10-21 16:48:36,809 INFO (StartupInfoLogger.java:61)- Started DjmDataReportApplication in 7.541 seconds (JVM running for 9.176)
2024-10-21 16:48:36,812 INFO (DjmDataReportApplication.java:15)- __ __
/ \~~~/ \
,----( .. )
/ \__ __/
/| (\ |(
^ \ /___\ /\ |
|__| |__|-"
---------------djm-data-report------------start------->>>>>--------
This source diff could not be displayed because it is too large. You can view the blob instead.
2024-10-21 16:45:25,139 INFO (StartupInfoLogger.java:55)- Starting DjmDataReportApplication using Java 1.8.0_191 on DESKTOP-AB45DQR with PID 38584 (F:\workspace\djm-data-report\target\classes started by Administrator in F:\workspace\djm-data-report)
2024-10-21 16:45:25,175 DEBUG (StartupInfoLogger.java:56)- Running with Spring Boot v2.7.6, Spring v5.3.24
2024-10-21 16:45:25,176 INFO (SpringApplication.java:637)- The following 1 profile is active: "test"
2024-10-21 16:45:36,531 INFO (StartupInfoLogger.java:61)- Started DjmDataReportApplication in 12.502 seconds (JVM running for 14.814)
2024-10-21 16:45:36,536 INFO (DjmDataReportApplication.java:15)- __ __
/ \~~~/ \
,----( .. )
/ \__ __/
/| (\ |(
^ \ /___\ /\ |
|__| |__|-"
---------------djm-data-report------------start------->>>>>--------
2024-10-21 16:46:33,183 INFO (StartupInfoLogger.java:55)- Starting DjmDataReportApplication using Java 1.8.0_191 on DESKTOP-AB45DQR with PID 83028 (F:\workspace\djm-data-report\target\classes started by Administrator in F:\workspace\djm-data-report)
2024-10-21 16:46:33,186 DEBUG (StartupInfoLogger.java:56)- Running with Spring Boot v2.7.6, Spring v5.3.24
2024-10-21 16:46:33,187 INFO (SpringApplication.java:637)- The following 1 profile is active: "test"
2024-10-21 16:46:41,192 INFO (StartupInfoLogger.java:61)- Started DjmDataReportApplication in 8.861 seconds (JVM running for 10.869)
2024-10-21 16:46:41,198 INFO (DjmDataReportApplication.java:15)- __ __
/ \~~~/ \
,----( .. )
/ \__ __/
/| (\ |(
^ \ /___\ /\ |
|__| |__|-"
---------------djm-data-report------------start------->>>>>--------
2024-10-21 16:47:21,364 INFO (StartupInfoLogger.java:55)- Starting DjmDataReportApplication using Java 1.8.0_191 on DESKTOP-AB45DQR with PID 17440 (F:\workspace\djm-data-report\target\classes started by Administrator in F:\workspace\djm-data-report)
2024-10-21 16:47:21,367 DEBUG (StartupInfoLogger.java:56)- Running with Spring Boot v2.7.6, Spring v5.3.24
2024-10-21 16:47:21,368 INFO (SpringApplication.java:637)- The following 1 profile is active: "test"
2024-10-21 16:47:28,529 INFO (StartupInfoLogger.java:61)- Started DjmDataReportApplication in 7.797 seconds (JVM running for 9.374)
2024-10-21 16:47:28,532 INFO (DjmDataReportApplication.java:15)- __ __
/ \~~~/ \
,----( .. )
/ \__ __/
/| (\ |(
^ \ /___\ /\ |
|__| |__|-"
---------------djm-data-report------------start------->>>>>--------
2024-10-21 16:48:29,905 INFO (StartupInfoLogger.java:55)- Starting DjmDataReportApplication using Java 1.8.0_191 on DESKTOP-AB45DQR with PID 6452 (F:\workspace\djm-data-report\target\classes started by Administrator in F:\workspace\djm-data-report)
2024-10-21 16:48:29,910 DEBUG (StartupInfoLogger.java:56)- Running with Spring Boot v2.7.6, Spring v5.3.24
2024-10-21 16:48:29,910 INFO (SpringApplication.java:637)- The following 1 profile is active: "test"
2024-10-21 16:48:36,809 INFO (StartupInfoLogger.java:61)- Started DjmDataReportApplication in 7.541 seconds (JVM running for 9.176)
2024-10-21 16:48:36,812 INFO (DjmDataReportApplication.java:15)- __ __
2024-11-04 13:50:37,098 INFO (StartupInfoLogger.java:55)- Starting DjmDataReportApplication using Java 1.8.0_191 on DESKTOP-AB45DQR with PID 24880 (F:\workspace\djm-data-report\target\classes started by Administrator in F:\workspace\djm-data-report)
2024-11-04 13:50:37,116 DEBUG (StartupInfoLogger.java:56)- Running with Spring Boot v2.7.6, Spring v5.3.24
2024-11-04 13:50:37,117 INFO (SpringApplication.java:637)- The following 1 profile is active: "test"
2024-11-04 13:50:46,209 INFO (StartupInfoLogger.java:61)- Started DjmDataReportApplication in 9.891 seconds (JVM running for 13.525)
2024-11-04 13:50:46,213 INFO (DjmDataReportApplication.java:18)- __ __
/ \~~~/ \
,----( .. )
/ \__ __/
......
......@@ -104,11 +104,13 @@
<artifactId>junit</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba.fastjson2/fastjson2 -->
<!--
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>${fastjson.version}</version>
</dependency>
-->
<!-- excel -->
<dependency>
<groupId>com.alibaba</groupId>
......@@ -155,6 +157,95 @@
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.51</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.3.3</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>30.0-jre</version>
</dependency>
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
<version>7.2.2</version>
</dependency>
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<!--<scope></scope>-->
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.62</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>
<!--//httpclient缓存-->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient-cache</artifactId>
<version>4.5</version>
</dependency>
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.15.1</version>
</dependency>
<dependency>
<groupId>com.paypal.sdk</groupId>
<artifactId>rest-api-sdk</artifactId>
<version>1.9.3</version>
<exclusions>
<exclusion>
<artifactId>log4j-slf4j-impl</artifactId>
<groupId>org.apache.logging.log4j</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.slf4j</groupId>-->
<!-- <artifactId>slf4j-api</artifactId>-->
......
package com.dr;
import com.dr.util.MapAddressUtil;
import lombok.extern.slf4j.Slf4j;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
......@@ -10,6 +12,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DjmDataReportApplication {
public static void main(String[] args) {
SpringApplication.run(DjmDataReportApplication.class, args);
log.info(" __ __\n" +
......
package com.dr.aspect;
import com.alibaba.fastjson2.JSON;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
@Aspect
@Component
@Slf4j
public class AreaConfigServiceAspect {
private static final String POINTCUT = "execution(* com.dr.service..*(..))";
@Before(POINTCUT)
public void logBeforeMethodExecution(JoinPoint joinPoint){
String methodName = joinPoint.getSignature().getName();
Object[] args = joinPoint.getArgs();
log.info("Method: " + methodName);
for(Object arg : args){
log.info("Argument:" + args);
}
}
@AfterReturning(pointcut = POINTCUT, returning = "result")
public void logAfterMethodExecution(JoinPoint joinPoint, Object result){
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
String methodName = signature.getName();
log.info("After executing method: " + methodName);
log.info("Return value: " + result);
}
}
package com.dr.config;
import org.springframework.context.annotation.Configuration;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
/**
* @Description: 常量配置
* @Author: luocong
* @Since: 2022/8/5
* @Version: 1.0.0
*/
@Configuration
public class ConstantConfig {
public static final Map<String, String> CHECK_DEVICE_MAP;
static {
//检测类仪器包含:猫咪一代(DBQ3-3)、猫咪二代(DAF03-1)、Metis(DBQ3-1)、头皮镜(DAS02-1)、水肤镜(DAS01-1)
HashMap<String, String> checkMap = new HashMap<>();
checkMap.put(ConstantConfig.CAT_ONE, "猫咪一代");
checkMap.put(ConstantConfig.CAT_TWO, "猫咪二代");
checkMap.put("DAS01-1", "水肤镜");
checkMap.put(ConstantConfig.METIS, "Metis");
checkMap.put("DAS02-1", "头皮镜");
CHECK_DEVICE_MAP = Collections.unmodifiableMap(checkMap);
}
/**
* 获取所有员工的权限接口
*/
public static final String PERMISSIONS_URL = "/Face/selectAllPermissions";
/**
* 成功返回的状态标识:success=true
*/
public static final String BACK_FLAG = "success";
/**
* redis新增客户ID与案例ID缓存的数据前缀
*/
public static final String BEFORE_STR = "before:";
/**
* redis新增客户ID缓存的数据后缀
*/
public static final String CG_ID_BEFORE_STR = "CIdBefore";
/**
* 数据统计缓存base_key
*/
public static final String BASE_REDIS_KEY = "metis";
/**
* 客户数据统计缓存key
*/
public static final String CLIENT_REDIS_KEY = ":newclient:";
/**
* 案例组数据统计缓存key
*/
public static final String CASE_GROUP_REDIS_KEY = ":casegroup:";
/**
* 客户到店数据统计缓存key
*/
public static final String CUSTOMERS_TO_SHOP_REDIS_KEY = ":customerstoshop:";
/**
* DBQ3-3 猫咪一代
*/
public static final String CAT_ONE = "DBQ3-3";
/**
* DAF03-1 猫咪二代
*/
public static final String CAT_TWO = "DAF03-1";
/**
* DBQ3-1 metis
*/
public static final String METIS = "DBQ3-1";
/**
* 到店频次
*/
public static final String SHOP_FREQUENCY_REDIS_KEY = ":shopfrequency:";
/**
* 到店排行数据统计缓存key
*/
public static final String SHOP_RANKING_REDIS_KEY = ":shopranking:";
/**
* 年龄分布数据统计缓存key
*/
public static final String AGE_DISTRIBUTION_REDIS_KEY = ":agedistribution:";
/**
* 地域分布数据统计缓存key
*/
public static final String REGIONAL_DISTRIBUTION_REDIS_KEY = ":regionaldistribution:";
/**
* 检测排行数据统计缓存key
*/
public static final String CHECK_CASE_RANK_REDIS_KEY = ":checkcaserank:";
/**
* 症状统计数据统计缓存key
*/
public static final String SYMPTOMS_REDIS_KEY = ":symptoms:";
/**
* 产品推广曝光缓存key
*/
public static final String PRODUCT_REDIS_KEY = ":product:";
/**
* 检测类仪器
*/
public static final String DEVICE_TYPE = "check_device";
/**
* 检测类仪器
*/
public static final String WATERSKIN_DEVICE_TYPE = "waterskin_device";
/**
* 检测类仪器
*/
public static final String WATERSKIN_CODE = "waterskin_code";
/**
* 皮肤问题推荐方案
*/
public static final String SKIN_PROBLEM_RECOMMEND = "skipproblem";
/**
* 到店次数缓存key
*/
public static final String ARRIVE_SHOP_REDIS_KEY = ":arrive_shop:";
/**
* 门店机构缓存key
*/
public static final String ORG_INFO_REDIS_KEY = ":org_info";
}
package com.dr.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.dr.service.IAreaConfigService;
import com.dr.util.Result;
import com.dr.vo.CommonUtilVO;
import com.dr.entity.AreaConfigEntity;
......@@ -24,7 +25,7 @@ import java.util.List;
public class AreaConfigController extends BaseController {
@Autowired
private AreaConfigMapper areaConfigMapper;
private IAreaConfigService areaConfigService;
/**
* 获取城市区域,如华南,华东
......@@ -33,10 +34,7 @@ public class AreaConfigController extends BaseController {
*/
@GetMapping("/getRegionList")
public Result<List<CommonUtilVO>> getRegionList() {
List<AreaConfigEntity> list = this.areaConfigMapper.selectList(new LambdaQueryWrapper<AreaConfigEntity>().select(AreaConfigEntity::getId,
AreaConfigEntity::getAreaConfigName)
.eq(AreaConfigEntity::getType, 1)
.eq(AreaConfigEntity::getDeleted, 0));
List<AreaConfigEntity> list = this.areaConfigService.getRegionList();
List<CommonUtilVO> commonUtilVOList = new ArrayList<>();
list.forEach(t -> {
CommonUtilVO commonUtilVO = new CommonUtilVO();
......@@ -54,10 +52,7 @@ public class AreaConfigController extends BaseController {
*/
@GetMapping("/getLineCityCode")
public Result<List<CommonUtilVO>> getLineCityCode() {
List<AreaConfigEntity> list = this.areaConfigMapper.selectList(new LambdaQueryWrapper<AreaConfigEntity>().select(AreaConfigEntity::getId,
AreaConfigEntity::getAreaConfigName)
.eq(AreaConfigEntity::getType, 0)
.eq(AreaConfigEntity::getDeleted, 0));
List<AreaConfigEntity> list = this.areaConfigService.getLineCityCode();
List<CommonUtilVO> commonUtilVOList = new ArrayList<>();
list.forEach(t -> {
CommonUtilVO commonUtilVO = new CommonUtilVO();
......
package com.dr.controller;
import com.dr.util.MapAddressUtil;
import com.dr.util.Site;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/djmaftersales/mapAddress")
@RestController
public class MapAddressController {
@RequestMapping("/getAddress")
public Site getAddress(String longitude, String latitude){
return MapAddressUtil.getAdrres(longitude,latitude);
}
}
package com.dr.dto;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import java.io.Serializable;
import java.util.List;
/**
* @Description:
* @Author: luocong
* @Since: 2022/8/15
* @Version: 1.0.0
*/
@Data
@ToString
@EqualsAndHashCode
public class MemberProductRecommendDTO implements Serializable {
private static final long serialVersionUID = -8595538396155010062L;
/**
* 门店ID
*/
private Long mid;
/**
* 门店账户
*/
private String mAccount;
/**
* 产品推荐
*/
private List<ProductRecommendDTO> productRecommendList;
}
package com.dr.dto;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import java.io.Serializable;
import java.util.List;
/**
* @Description:
* @Author: luocong
* @Since: 2022/8/15
* @Version: 1.0.0
*/
@Data
@ToString
@EqualsAndHashCode
public class OrgProductRecommendRedisDTO implements Serializable {
private static final long serialVersionUID = -8595538396155010062L;
/**
* 机构ID
*/
private Long oid;
/**
* 机构账户
*/
private String oAccount;
/**
* 产品推荐
*/
private List<ProductRecommendDTO> productRecommendList;
/**
* 门店产品推荐
*/
private List<MemberProductRecommendDTO> memberProductRecommendList;
/**
* 创建时间
*/
private String redisCreateTime;
}
package com.dr.dto;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import java.io.Serializable;
/**
* @Description: 产品推荐
* @Author: luocong
* @Since: 2022/8/15
* @Version: 1.0.0
*/
@Data
@ToString
@EqualsAndHashCode
public class ProductRecommendDTO implements Serializable {
private static final long serialVersionUID = 7367100491652565416L;
/**
* 产品id
*/
private Long gid;
/**
* 产品名
*/
private String goodsName;
/**
* 推荐量
*/
private Long recommendNum;
}
package com.dr.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* @description 数据统计-客户年龄信息分布日表
* @author luocong
* @date 2024-07-25 11:31:43
* @version 1.0
*/
@NoArgsConstructor
@AllArgsConstructor
@Data
public class DrClientAgeDistributeByDayEntity implements Serializable {
private static final long serialVersionUID = 2181354370637403798L;
public DrClientAgeDistributeByDayEntity(Integer eighteenYearUnder, Integer eighteenToThirtyYear, Integer thirtyToFortyYear, Integer fortyToSixtyYear, Integer sixtyYearOver) {
this.eighteenYearUnder = eighteenYearUnder;
this.eighteenToThirtyYear = eighteenToThirtyYear;
this.thirtyToFortyYear = thirtyToFortyYear;
this.fortyToSixtyYear = fortyToSixtyYear;
this.sixtyYearOver = sixtyYearOver;
}
/**
* id
*/
private Long id;
/**
* 门店账号
*/
private String shopAccount;
/**
* 门店名称
*/
private String shopName;
/**
* 机构名称
*/
private String orgName;
/**
* 机构账号
*/
private String orgAccount;
/**
* 当天日期
*/
private LocalDate dailyTime;
/**
* 0-男,1-女,2-未知
*/
private Integer sex;
/**
* 18岁以下
*/
private Integer eighteenYearUnder;
/**
* 18-3333
*/
private Integer eighteenToThirtyYear;
/**
* 30-40岁
*/
private Integer thirtyToFortyYear;
/**
* 40-60岁
*/
private Integer fortyToSixtyYear;
/**
* 60岁以上
*/
private Integer sixtyYearOver;
/**
* 是否删除(0-否,1是,默认0)
*/
private Integer deleted;
/**
* 创建人名字
*/
private String createUserName;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 修改时间
*/
private LocalDateTime updateTime;
/**
* 修改人名字
*/
private String updateUserName;
/**
* 门店省行政名称
*/
private String shopProvinceName;
/**
* 门店市行政名称
*/
private String shopCityName;
/**
* 门店区行政名称
*/
private String shopRegionName;
/**
* 门店详细地址
*/
private String shopAddress;
}
package com.dr.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* @description 数据统计-顾客案例新增明细日表
* @author luocong
* @date 2024-07-25 11:31:43
* @version 1.0
*/
@NoArgsConstructor
@AllArgsConstructor
@Data
public class DrNewAddClientAndCaseByDayEntity implements Serializable {
private static final long serialVersionUID = -2821249833575095313L;
/**
* id
*/
private Long id;
/**
* 门店账号
*/
private String shopAccount;
/**
* 门店名称
*/
private String shopName;
/**
* 机构账号
*/
private String orgAccount;
/**
* 机构名称
*/
private String orgName;
/**
* 当天日期
*/
private LocalDate dailyTime;
/**
* 新增顾客数量
*/
private Integer addClientNum;
/**
* 新增案例数量
*/
private Integer addCaseGroupNum;
/**
* 是否删除(0-否,1是,默认0)
*/
private Integer deleted;
/**
* 创建人名字
*/
private String createUserName;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 修改时间
*/
private LocalDateTime updateTime;
/**
* 修改人名字
*/
private String updateUserName;
/**
* 案例总数
*/
private Integer caseGroupNum;
/**
* 客户总数
*/
private Integer clientNum;
/**
* 单次到店客户数
*/
private Integer onceArriveClientNum;
/**
* 多次到店客户数
*/
private Integer moreArriveClientNum;
/**
* 门店省行政名称
*/
private String shopProvinceName;
/**
* 门店市行政名称
*/
private String shopCityName;
/**
* 门店区行政名称
*/
private String shopRegionName;
/**
* 门店详细地址
*/
private String shopAddress;
}
package com.dr.entity;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* @description 数据统计-产品推广曝光数据日表
* @author luocong
* @date 2024-07-25 11:31:43
* @version 1.0
*/
@Data
public class DrProductRecommendByDayEntity implements Serializable {
private static final long serialVersionUID = -1634193320442126288L;
/**
* id
*/
private Long id;
/**
* 门店名称
*/
private String shopName;
/**
* 门店账号
*/
private String shopAccount;
/**
* 机构名称
*/
private String orgName;
/**
* 机构账号
*/
private String orgAccount;
/**
* 当天日期
*/
private LocalDate dailyTime;
/**
* 产品名称
*/
private String goodsName;
/**
* 推荐量
*/
private Integer recommendNum;
/**
* 产品id
*/
private Long goodsId;
/**
* 是否删除(0-否,1是,默认0)
*/
private Integer deleted;
/**
* 创建人名字
*/
private String createUserName;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 修改时间
*/
private LocalDateTime updateTime;
/**
* 修改人名字
*/
private String updateUserName;
/**
* 门店省行政名称
*/
private String shopProvinceName;
/**
* 门店市行政名称
*/
private String shopCityName;
/**
* 门店区行政名称
*/
private String shopRegionName;
/**
* 门店详细地址
*/
private String shopAddress;
}
package com.dr.mapper;
import com.dr.entity.DrClientAgeDistributeByDayEntity;
import com.dr.vo.NewAgeDistributionVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;
import java.util.List;
/**
* @description 数据统计-客户年龄信息分布日表
* @author luocong
* @date 2024-07-25 11:31:43
* @version 1.0
*/
@Mapper
public interface DrClientAgeDistributeByDayMapper {
/**
* 批量插入
*
* @param list list
*/
void saveBatch(List<DrClientAgeDistributeByDayEntity> list);
/**
* 年龄分布查询
*
* @param oAccount 机构账号
* @param shopAccounts 门店账号数据集合
* @return List<NewAgeDistributionVO>
*/
List<NewAgeDistributionVO> list(@Param("oAccount") String oAccount, @Param("mAccounts") String[] shopAccounts);
@Update("truncate table dr_client_age_distribute_by_day")
void truncateTable();
}
package com.dr.mapper;
import com.dr.entity.*;
import com.dr.vo.NewArriveShopRankVO;
import com.dr.vo.NewCheckCaseRankVO;
import com.dr.vo.NewClientDistributionVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @description 数据统计-顾客案例新增明细日表
* @author luocong
* @date 2024-07-25 11:31:43
* @version 1.0
*/
@Mapper
public interface DrNewAddClientAndCaseByDayMapper {
void saveBatch(List<DrNewAddClientAndCaseByDayEntity> list);
/**
* 获取最后一条数据
*
* @param memberAccount 门店账号
* @return DrNewAddClientAndCaseByDayEntity
*/
DrNewAddClientAndCaseByDayEntity getLastOne(@Param("memberAccount") String memberAccount);
/**
* 查询客户与案例数据
*
* @param oAccount 机构账号
* @param sAccount 门店账号
* @return List<DrNewAddClientAndCaseByDayEntity>
*/
DrNewAddClientAndCaseByDayEntity selectClientAndCase(@Param("oAccount") String oAccount, @Param("sAccount") String sAccount, @Param("time") String time);
/**
* 检测排行
*
* @param time 日期
* @param oAccount 机构账号
* @param pageNum 页数
* @param pageSize 条数
* @return List<NewCheckCaseRankVO>
*/
List<NewCheckCaseRankVO> selectCheckCaseRank(@Param("time") String time, @Param("oAccount") String oAccount,
@Param("pageNum") Integer pageNum, @Param("pageSize") Integer pageSize);
/**
* 查询到店排行
*
* @param time time
* @param oAccount 机构账号
* @param pageNum 页数
* @param pageSize 条数
* @return List<NewArriveShopRankVO>
*/
List<NewArriveShopRankVO> selectArriveShopRank(@Param("time") String time, @Param("oAccount") String oAccount,
@Param("pageNum") Integer pageNum, @Param("pageSize") Integer pageSize);
/**
* 客户地域分布
*
* @param oAccount 机构账号
* @param pageNum 页数
* @param pageSize 条数
* @param time 时间
* @return List<NewClientDistributionVO>
*/
List<NewClientDistributionVO> selectClientDistribution(@Param("oAccount") String oAccount, @Param("pageNum") Integer pageNum,
@Param("pageSize") Integer pageSize, @Param("time") String time);
/**
* 统计检测排行数量
*
* @param time 时间
* @param oAccount 机构账号
* @return 数量
*/
Long countCheckCaseRank(@Param("time") String time, @Param("oAccount") String oAccount);
/**
* 统计到店排行
* @param time
* @param oAccount
* @return 数量
*/
Long countArriveShopRank(String time, String oAccount);
/**
* 统计客户地域分布数量
*
* @param oAccount 机构账号
* @param time 时间
* @return 数量
*/
Long countClientDistribution(String oAccount, String time);
/**
* 删除小于id的表数据
*
* @param id id
*/
void removeByLessId(@Param("id") Long id);
}
package com.dr.mapper;
import com.dr.entity.DrProductRecommendByDayEntity;
import com.dr.vo.NewProductRecommendVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @description 数据统计-产品推广曝光数据日表
* @author luocong
* @date 2024-07-25 11:31:43
* @version 1.0
*/
@Mapper
public interface DrProductRecommendByDayMapper {
/**
* 批量插入数据
*
* @param resList
*/
void saveBatch(List<DrProductRecommendByDayEntity> resList);
/**
* 查询产品推广曝光
*
* @param oAccount 机构账号
* @param mAccount 门店账号
* @param pageNum 页数
* @param pageSize 条数
* @return List<NewProductRecommendVO>
*/
List<NewProductRecommendVO> selectList(@Param("oAccount") String oAccount, @Param("mAccount") String mAccount,
@Param("pageNum") Integer pageNum, @Param("pageSize") Integer pageSize);
/**
* 统计产品推荐
*
* @param oAccount 机构账号
* @param mAccount 门店账号
* @return 数量
*/
Long selectCount(@Param("oAccount") String oAccount, @Param("mAccount") String mAccount);
}
package com.dr.service;
import com.dr.entity.AreaConfigEntity;
import java.util.List;
public interface IAreaConfigService {
List<AreaConfigEntity> getRegionList();
List<AreaConfigEntity> getLineCityCode();
}
package com.dr.service;
import com.dr.vo.*;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
/**
* @description 新的数据统计对外接口
* @author luocong
* @date 2024/8/19 17:49
* @version 1.0
*/
public interface INewDataReportService {
ApiTemplateVO<NewClientAndCaseGroupVO> countClientAndCase(String oAccount, String mAccount);
ApiTemplateVO<List<NewCheckCaseRankVO>> selectCheckCaseRank(String time, String oAccount, Integer pageNum, Integer pageSize);
ApiTemplateVO<List<NewProductRecommendVO>> productRecommend(String oAccount, String mAccount, Integer pageSize, Integer pageNum);
ApiTemplateVO<List<NewProductRecommendVO>> selectProductRecommend(String oAccount, String mAccount, Integer pageNum, Integer pageSize);
ApiTemplateVO<List<NewArriveShopRankVO>> selectArriveShopRank(String time, String oAccount, Integer pageNum, Integer pageSize);
ApiTemplateVO<List<NewAgeDistributionVO>> selectAgeDistribution(String oAccount, String[] mAccounts);
ApiTemplateVO<List<NewClientDistributionVO>> selectClientDistribution(String oAccount, Integer pageNum, Integer pageSize);
}
package com.dr.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.dr.entity.AreaConfigEntity;
import com.dr.mapper.AreaConfigMapper;
import com.dr.service.IAreaConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class AreaConfigServiceImpl implements IAreaConfigService {
@Autowired
private AreaConfigMapper areaConfigMapper;
@Override
public List<AreaConfigEntity> getRegionList() {
return areaConfigMapper.selectList(new LambdaQueryWrapper<AreaConfigEntity>().select(AreaConfigEntity::getId,
AreaConfigEntity::getAreaConfigName)
.eq(AreaConfigEntity::getType, 1)
.eq(AreaConfigEntity::getDeleted, 0));
}
@Override
public List<AreaConfigEntity> getLineCityCode() {
return areaConfigMapper.selectList(new LambdaQueryWrapper<AreaConfigEntity>().select(AreaConfigEntity::getId,
AreaConfigEntity::getAreaConfigName)
.eq(AreaConfigEntity::getType, 0)
.eq(AreaConfigEntity::getDeleted, 0));
}
}
......@@ -75,6 +75,8 @@ public class MeowShopDataReportServiceImpl implements IMeowShopDataReportService
private IConfigService configService;
@Autowired
private IDrDeviceTypeStartByMonthService drDeviceTypeStartByMonthService;
@Autowired
private INewDataReportService newDataReportService;
//@Autowired
//private DrDownloadCenterMapper drDownloadCenterMapper;
public static final String BASE_REDIS_KEY = NewDataReportConstant.BASE_DR_REDIS_KEY + NewDataReportConstant.SKIN_PROB_REC_KEY;
......@@ -342,8 +344,11 @@ public class MeowShopDataReportServiceImpl implements IMeowShopDataReportService
if (parseTokenDTO.getPowerType().equals("2")) {
paramMap.put("mAccount", parseTokenDTO.getShopAccount());
}
String body = HttpUtil.post(appConstantDTO.metisBaseUrl + "/new/dataReport/clientAndCase", paramMap);
ApiTemplate apiTemplate = JSON.parseObject(body, ApiTemplate.class);
ApiTemplateVO<NewClientAndCaseGroupVO> apiTemplate = newDataReportService.countClientAndCase((String)paramMap.get("oAccount"),(String)paramMap.get("mAccount"));
//String body = HttpUtil.post(appConstantDTO.metisBaseUrl + "/new/dataReport/clientAndCase", paramMap);
//ApiTemplate apiTemplate = JSON.parseObject(body, ApiTemplate.class);
if (!apiTemplate.getSign().equals(1)) {
return result;
}
......@@ -379,8 +384,9 @@ public class MeowShopDataReportServiceImpl implements IMeowShopDataReportService
paramMap.put("time", yesterday);
break;
}
String body = HttpUtil.post(appConstantDTO.metisBaseUrl + "/new/dataReport/checkCaseRank", paramMap);
ApiTemplate apiTemplate = JSON.parseObject(body, ApiTemplate.class);
ApiTemplateVO<List<NewCheckCaseRankVO>> apiTemplate = newDataReportService.selectCheckCaseRank((String)paramMap.get("time"),(String)paramMap.get("oAccount"),(Integer) paramMap.get("pageNum"),(Integer)paramMap.get("pageSize"));
//String body = HttpUtil.post(appConstantDTO.metisBaseUrl + "/new/dataReport/checkCaseRank", paramMap);
//ApiTemplate apiTemplate = JSON.parseObject(body, ApiTemplate.class);
if (!apiTemplate.getSign().equals(1)) {
return result;
}
......@@ -403,8 +409,10 @@ public class MeowShopDataReportServiceImpl implements IMeowShopDataReportService
if (parseTokenDTO.getPowerType().equals("2")) {
paramMap.put("mAccount", parseTokenDTO.getShopAccount());
}
String body = HttpUtil.post(appConstantDTO.metisBaseUrl + "/new/dataReport/productRecommend", paramMap);
ApiTemplate apiTemplate = JSON.parseObject(body, ApiTemplate.class);
ApiTemplateVO<List<NewProductRecommendVO>> apiTemplate=newDataReportService.productRecommend((String)paramMap.get("oAccount"),(String)paramMap.get("mAccount"),(Integer) paramMap.get("pageSize"),(Integer) paramMap.get("pageNum"));
//String body = HttpUtil.post(appConstantDTO.metisBaseUrl + "/new/dataReport/productRecommend", paramMap);
//ApiTemplate apiTemplate = JSON.parseObject(body, ApiTemplate.class);
if (!apiTemplate.getSign().equals(1)) {
return result;
}
......@@ -439,8 +447,10 @@ public class MeowShopDataReportServiceImpl implements IMeowShopDataReportService
paramMap.put("time", yesterday);
break;
}
String body = HttpUtil.post(appConstantDTO.metisBaseUrl + "/new/dataReport/arriveShopRank", paramMap);
ApiTemplate apiTemplate = JSON.parseObject(body, ApiTemplate.class);
ApiTemplateVO<List<NewArriveShopRankVO>> apiTemplate = newDataReportService.selectArriveShopRank((String) paramMap.get("time"),(String) paramMap.get("oAccount"),(Integer) paramMap.get("pageNum"),(Integer) paramMap.get("pageSize"));
//String body = HttpUtil.post(appConstantDTO.metisBaseUrl + "/new/dataReport/arriveShopRank", paramMap);
//ApiTemplate apiTemplate = JSON.parseObject(body, ApiTemplate.class);
if (!apiTemplate.getSign().equals(1)) {
return result;
}
......@@ -466,8 +476,10 @@ public class MeowShopDataReportServiceImpl implements IMeowShopDataReportService
mAccounts.add(parseTokenDTO.getShopAccount());
}
paramMap.put("mAccount", mAccounts);
String body = HttpUtil.post(appConstantDTO.metisBaseUrl + "/new/dataReport/ageDistribution", paramMap);
ApiTemplate apiTemplate = JSON.parseObject(body, ApiTemplate.class);
ApiTemplateVO<List<NewAgeDistributionVO>> apiTemplate = newDataReportService.selectAgeDistribution((String) paramMap.get("oAccount"),(String[]) paramMap.get("mAccount"));
//String body = HttpUtil.post(appConstantDTO.metisBaseUrl + "/new/dataReport/ageDistribution", paramMap);
//ApiTemplate apiTemplate = JSON.parseObject(body, ApiTemplate.class);
if (!apiTemplate.getSign().equals(1)) {
return result;
}
......@@ -486,8 +498,9 @@ public class MeowShopDataReportServiceImpl implements IMeowShopDataReportService
paramMap.put("oAccount", parseTokenDTO.getOrgAccount());
paramMap.put("pageNum", pageNum);
paramMap.put("pageSize", pageSize);
String body = HttpUtil.post(appConstantDTO.metisBaseUrl + "/new/dataReport/clientDistribution", paramMap);
ApiTemplate apiTemplate = JSON.parseObject(body, ApiTemplate.class);
ApiTemplateVO<List<NewClientDistributionVO>> apiTemplate = newDataReportService.selectClientDistribution((String)paramMap.get("oAccount"),(Integer)paramMap.get("pageNum"),(Integer)paramMap.get("pageSize"));
//String body = HttpUtil.post(appConstantDTO.metisBaseUrl + "/new/dataReport/clientDistribution", paramMap);
//ApiTemplate apiTemplate = JSON.parseObject(body, ApiTemplate.class);
if (!apiTemplate.getSign().equals(1)) {
return result;
}
......
package com.dr.service.impl;
import com.alibaba.fastjson.JSON;
import com.dr.config.ConstantConfig;
import com.dr.dto.MemberProductRecommendDTO;
import com.dr.dto.OrgProductRecommendRedisDTO;
import com.dr.dto.ProductRecommendDTO;
import com.dr.util.NewDateUtil;
import com.dr.mapper.DrClientAgeDistributeByDayMapper;
import com.dr.mapper.DrNewAddClientAndCaseByDayMapper;
import com.dr.mapper.DrProductRecommendByDayMapper;
import com.dr.service.INewDataReportService;
import com.dr.vo.*;
import com.dr.entity.*;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
/**
* @description
* @author luocong
* @date 2024/8/19 17:50
* @version 1.0
*/
@Service
public class NewDataReportServiceImpl implements INewDataReportService {
@Autowired
private DrNewAddClientAndCaseByDayMapper drNewAddClientAndCaseByDayMapper;
@Autowired
private DrProductRecommendByDayMapper drProductRecommendByDayMapper;
@Autowired
private DrClientAgeDistributeByDayMapper drClientAgeDistributeByDayMapper;
@Autowired
private RedisTemplate<String, String> redisTemplate;
@Override
public ApiTemplateVO<NewClientAndCaseGroupVO> countClientAndCase(String oAccount, String mAccount) {
String time = NewDateUtil.getBeforeTime(1, NewDateUtil.PATTERN_A, 1);
DrNewAddClientAndCaseByDayEntity drNewAddClientAndCaseByDayEntity = this.drNewAddClientAndCaseByDayMapper.selectClientAndCase(oAccount, mAccount, time);
ApiTemplateVO<NewClientAndCaseGroupVO> apiTemplateVO = new ApiTemplateVO<>();
NewClientAndCaseGroupVO newClientAndCaseGroupVO = new NewClientAndCaseGroupVO();
if (null == drNewAddClientAndCaseByDayEntity) {
newClientAndCaseGroupVO = new NewClientAndCaseGroupVO(0L, 0L, 0L, 0L, 0L, 0L);
} else {
newClientAndCaseGroupVO.setCaseGroupNum(drNewAddClientAndCaseByDayEntity.getCaseGroupNum().longValue());
newClientAndCaseGroupVO.setClientNum(drNewAddClientAndCaseByDayEntity.getClientNum().longValue());
newClientAndCaseGroupVO.setAddClientByYesterday(drNewAddClientAndCaseByDayEntity.getAddClientNum().longValue());
newClientAndCaseGroupVO.setAddCaseByYesterday(drNewAddClientAndCaseByDayEntity.getAddClientNum().longValue());
newClientAndCaseGroupVO.setOnceArriveShopClientNum(drNewAddClientAndCaseByDayEntity.getOnceArriveClientNum().longValue());
newClientAndCaseGroupVO.setMoreArriveShopClientNum(drNewAddClientAndCaseByDayEntity.getMoreArriveClientNum().longValue());
}
return apiTemplateVO.SUCCESS(newClientAndCaseGroupVO);
}
@Override
public ApiTemplateVO<List<NewCheckCaseRankVO>> selectCheckCaseRank(String time, String oAccount, Integer pageNum, Integer pageSize) {
ApiTemplateVO<List<NewCheckCaseRankVO>> apiTemplateVO = new ApiTemplateVO<>();
List<NewCheckCaseRankVO> list = this.drNewAddClientAndCaseByDayMapper.selectCheckCaseRank(time, oAccount, pageNum, pageSize);
Long count = this.drNewAddClientAndCaseByDayMapper.countCheckCaseRank(time, oAccount);
if (CollectionUtils.isEmpty(list)) {
apiTemplateVO.setTotal(0L);
return apiTemplateVO.SUCCESS(new ArrayList<>());
}
apiTemplateVO.setTotal(count);
return apiTemplateVO.SUCCESS(list);
}
@Override
public ApiTemplateVO<List<NewProductRecommendVO>> productRecommend(String oAccount, String mAccount, Integer pageSize, Integer pageNum) {
ApiTemplateVO<List<NewProductRecommendVO>> apiTemplate = new ApiTemplateVO<>();
if (StringUtils.isBlank(oAccount)) {
return apiTemplate.NULL();
}
String result = redisTemplate.opsForValue().get(ConstantConfig.BASE_REDIS_KEY
+ ConstantConfig.PRODUCT_REDIS_KEY + oAccount);
List<NewProductRecommendVO> productRecommendResultList = new ArrayList<>();
if (StringUtils.isNotBlank(result)) {
OrgProductRecommendRedisDTO orgProductRecommendRedisDTO = JSON.parseObject(result, OrgProductRecommendRedisDTO.class);
if (null != orgProductRecommendRedisDTO) {
if (StringUtils.isNotBlank(mAccount)) {
MemberProductRecommendDTO memberProductRecommendDTO = orgProductRecommendRedisDTO.getMemberProductRecommendList().stream().filter(t -> StringUtils.isNotBlank(t.getMAccount()) && t.getMAccount().equals(mAccount)).findAny().orElse(null);
if (null != memberProductRecommendDTO) {
for (ProductRecommendDTO productRecommendDTO : memberProductRecommendDTO.getProductRecommendList()) {
NewProductRecommendVO productRecommendResultVO = new NewProductRecommendVO();
productRecommendResultVO.setProductName(productRecommendDTO.getGoodsName());
productRecommendResultVO.setRecommendNum(productRecommendDTO.getRecommendNum());
productRecommendResultList.add(productRecommendResultVO);
}
}
apiTemplate.setTotal((long) productRecommendResultList.size());
if (null != pageSize && null != pageNum && pageNum > 0) {
productRecommendResultList = productRecommendResultList.stream().skip((long) pageSize * (pageNum - 1)).limit(pageSize)
.sorted(Comparator.comparing(NewProductRecommendVO::getRecommendNum).reversed()).collect(Collectors.toList());
}
apiTemplate.setCode(200);
return apiTemplate.SUCCESS(productRecommendResultList);
}
for (ProductRecommendDTO productRecommendDTO : orgProductRecommendRedisDTO.getProductRecommendList()) {
NewProductRecommendVO productRecommendResultVO = new NewProductRecommendVO();
productRecommendResultVO.setProductName(productRecommendDTO.getGoodsName());
productRecommendResultVO.setRecommendNum(productRecommendDTO.getRecommendNum());
productRecommendResultList.add(productRecommendResultVO);
}
}
}
apiTemplate.setTotal((long) productRecommendResultList.size());
if (null != pageSize && null != pageNum && pageNum > 0) {
productRecommendResultList = productRecommendResultList.stream().skip((long) pageSize * (pageNum - 1)).limit(pageSize)
.sorted(Comparator.comparing(NewProductRecommendVO::getRecommendNum).reversed()).collect(Collectors.toList());
}
apiTemplate.setCode(200);
return apiTemplate.SUCCESS(productRecommendResultList);
}
@Override
public ApiTemplateVO<List<NewProductRecommendVO>> selectProductRecommend(String oAccount, String mAccount, Integer pageNum, Integer pageSize) {
ApiTemplateVO<List<NewProductRecommendVO>> apiTemplateVO = new ApiTemplateVO<>();
List<NewProductRecommendVO> list = this.drProductRecommendByDayMapper.selectList(oAccount, mAccount, pageNum, pageSize);
Long count = this.drProductRecommendByDayMapper.selectCount(oAccount, mAccount);
if (CollectionUtils.isEmpty(list)) {
apiTemplateVO.setTotal(0L);
return apiTemplateVO.SUCCESS(new ArrayList<>());
}
apiTemplateVO.setTotal(count);
return apiTemplateVO.SUCCESS(list);
}
@Override
public ApiTemplateVO<List<NewArriveShopRankVO>> selectArriveShopRank(String time, String oAccount, Integer pageNum, Integer pageSize) {
ApiTemplateVO<List<NewArriveShopRankVO>> apiTemplateVO = new ApiTemplateVO<>();
List<NewArriveShopRankVO> list = this.drNewAddClientAndCaseByDayMapper.selectArriveShopRank(time, oAccount, pageNum, pageSize);
Long count = this.drNewAddClientAndCaseByDayMapper.countArriveShopRank(time, oAccount);
if (CollectionUtils.isEmpty(list)) {
apiTemplateVO.setTotal(0L);
return apiTemplateVO.SUCCESS(new ArrayList<>());
}
apiTemplateVO.setTotal(count);
return apiTemplateVO.SUCCESS(list);
}
@Override
public ApiTemplateVO<List<NewAgeDistributionVO>> selectAgeDistribution(String oAccount, String[] mAccounts) {
ApiTemplateVO<List<NewAgeDistributionVO>> apiTemplateVO = new ApiTemplateVO<>();
List<NewAgeDistributionVO> list = this.drClientAgeDistributeByDayMapper.list(oAccount, mAccounts);
if (CollectionUtils.isEmpty(list)) {
return apiTemplateVO.SUCCESS(new ArrayList<>());
}
return apiTemplateVO.SUCCESS(list);
}
@Override
public ApiTemplateVO<List<NewClientDistributionVO>> selectClientDistribution(String oAccount, Integer pageNum, Integer pageSize) {
ApiTemplateVO<List<NewClientDistributionVO>> apiTemplateVO = new ApiTemplateVO<>();
String time = NewDateUtil.getBeforeTime(1, NewDateUtil.PATTERN_A, 1);
List<NewClientDistributionVO> list = this.drNewAddClientAndCaseByDayMapper.selectClientDistribution(oAccount, pageNum, pageSize, time);
Long count = this.drNewAddClientAndCaseByDayMapper.countClientDistribution(oAccount, time);
if (CollectionUtils.isEmpty(list)) {
apiTemplateVO.setTotal(0L);
return apiTemplateVO.SUCCESS(new ArrayList<>());
}
apiTemplateVO.setTotal(count);
return apiTemplateVO.SUCCESS(list);
}
}
package com.dr.util;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson2.JSON;
import com.dr.vo.HereMapGRevGeoVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
/**
* @description here地图
* @author luocong
* @date 2024/8/26 13:54
* @version 1.0
*/
@Slf4j
@Component
public class HereMapUtil {
private static final String AK = "O5q6RIbVItEvOzB3aqb21dj6pmqI9DBZtgla_ZvymDc";
public static Site getGeographyConvert(double latitude, double longitude) {
String url = "https://revgeocode.search.hereapi.com/v1/revgeocode?at=" + latitude + "," + longitude + "&q=petrol+station&apiKey=" + AK;
String body = null;
try {
body = HttpUtil.get(url);
log.info("----------->>>HERE地图返回接口信息:{}", body);
HereMapGRevGeoVO hereMapGRevGeoVO = JSON.parseObject(body, HereMapGRevGeoVO.class);
HereMapGRevGeoVO.Item item = hereMapGRevGeoVO.getItems().get(0);
Site site = new Site();
site.setFormatted_address(item.getAddress().getLabel());
site.setCountry(item.getAddress().getCountryName());
site.setProvince(item.getAddress().getState());
site.setCity(item.getAddress().getCounty());
site.setDistrict(item.getAddress().getCity());
site.setCountry_code(item.getAddress().getCountryCode());
site.setAdcode("0");
return site;
} catch (Exception e) {
log.error("----------->>>HERE地图接口调用错误:{}", body);
return null;
}
}
public static boolean isInChina(double latitude, double longitude) {
return longitude >= 73.33 && longitude <= 135.05 && latitude >= 18.03 && latitude <= 53.33;
}
}
package com.dr.util;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import com.dr.vo.LocationDataVO;
import com.dr.vo.TrackPointVO;
import lombok.extern.slf4j.Slf4j;
import net.sf.json.JSONObject;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
@Slf4j
@Component
public class MapAddressUtil {
@Resource
private RedisTemplate redisTemplate;
private static MapAddressUtil mapAddressUtil;
private static final Logger logger = LoggerFactory.getLogger(MapAddressUtil.class);
@PostConstruct
public void init(){
mapAddressUtil=this;
mapAddressUtil.redisTemplate=this.redisTemplate;
}
public static Site getAdrres(String longitude, String latitude) {
Site site = new Site();
try {
//解析经纬度
if(StringUtils.isNotBlank(longitude) && StringUtils.isNotBlank(latitude)){
String newlongitude = longitude;
String newlatitude = latitude;
//精确小数点后三位
int longitudeIndex = longitude.indexOf(".");
int latitudeIndex = latitude.indexOf(".");
if(longitudeIndex != -1){
if((longitudeIndex + 5) <= newlongitude.length()){
newlongitude = longitude.substring(0,longitudeIndex) + longitude.substring(longitudeIndex,longitudeIndex+5);
}
}
if(latitudeIndex != -1){
if((latitudeIndex + 5) <= newlatitude.length()){
newlatitude = latitude.substring(0,latitudeIndex) + latitude.substring(latitudeIndex,latitudeIndex+5);
}
}
if(mapAddressUtil.redisTemplate.opsForHash().hasKey("site:address",newlongitude + "--" + newlatitude)){
site = com.alibaba.fastjson.JSONObject.parseObject(
mapAddressUtil.redisTemplate.opsForHash().get("site:address",newlongitude + "--" + newlatitude).toString(),Site.class);
}else {
//使用维智API
TrackPointVO.Point point = new TrackPointVO.Point(Double.parseDouble(longitude), Double.parseDouble(latitude));
LocationDataVO locationDataVO;
//标识
boolean flag = false;
try {
locationDataVO = WeiZhiMapUtil.getGeographyConvert(point);
if(null == locationDataVO.getLocation()){
flag = true;
} else {
site.setFormatted_address(locationDataVO.getLocation().getAddress().getName());
site.setCountry(locationDataVO.getLocation().getAddress().getContext().get(0).getName());
site.setProvince(locationDataVO.getLocation().getAddress().getContext().get(1).getName());
site.setCity(locationDataVO.getLocation().getAddress().getContext().get(2).getName());
site.setDistrict(locationDataVO.getLocation().getAddress().getContext().get(3).getName());
String countryCode = locationDataVO.getLocation().getAddress().getContext().get(0).getCode();
if("CN".equals(countryCode)){
site.setCountry_code("0");
} else {
site.setCountry_code(countryCode);
}
site.setAdcode(locationDataVO.getLocation().getAddress().getContext().get(3).getCode());
}
} catch (Exception e){
flag = true;
log.error("-----------------------维智定位失败--------------------{}", e.getMessage(), e);
}
if(flag){
//使用Here验证国外的
boolean inChinaFlag = HereMapUtil.isInChina(Double.parseDouble(latitude), Double.parseDouble(longitude));
if(!inChinaFlag){
Site site1 = HereMapUtil.getGeographyConvert(Double.parseDouble(latitude), Double.parseDouble(longitude));
flag = null == site1;
}
if(flag) {
// 使用百度API : 根据经纬度反向解析地址信息
Map<String, String> params = new HashMap<String, String>(8);
params.put("ak", "2fsU6tsUBrElmrkSHXVBYVUq5vqb14Za");
params.put("output", "json");
params.put("coordtype", "wgs84ll");
params.put("location", latitude + "," + longitude);
String url = "http://api.map.baidu.com/reverse_geocoding/v3/";
String data = HttpRequest.sendGet(url, params);
logger.info("百度地图返回结果---->data----->" + JSON.toJSONString(data));
JSONObject object = JSONObject.fromObject(data);
if (object != null && object.getInt("status") == 0) {
JSONObject result = JSONObject.fromObject(object.get("result"));
if (result != null && result.size() > 0 && !"{}".equals(JSON.toJSONString(result))) {
JSONObject addressComponent = JSONObject.fromObject(result.get("addressComponent"));
/*持久化地址对象*/
site.setFormatted_address(String.valueOf(result.get("formatted_address")));
site.setCountry(String.valueOf(addressComponent.get("country")));
site.setProvince(String.valueOf(addressComponent.get("province")));
site.setCity(String.valueOf(addressComponent.get("city")));
site.setDistrict(String.valueOf(addressComponent.get("district")));
site.setCountry_code(String.valueOf(addressComponent.get("country_code")));
site.setAdcode(String.valueOf(addressComponent.get("adcode")));
}
} else {
// 使用天地图API(浏览器端的应用) 根据经纬度反向解析地址信息
String tUrl = "http://api.tianditu.gov.cn/geocoder?postStr={'lon':" + longitude + ",'lat':" + latitude + ",'ver':1}&type=geocode&tk=8cc1da8666fa6e682f9d2e255730e382";
String tData = HttpUtil.get(tUrl);
logger.info("天地图返回结果---tData---->" + JSON.toJSONString(tData));
JSONObject tjsonObject = JSONObject.fromObject(tData);
Object tstatus = tjsonObject.get("status");
JSONObject tresult = JSONObject.fromObject(tjsonObject.get("result"));
if (null != tstatus && tstatus.equals("0")) {
JSONObject taddressComponent = JSONObject.fromObject(tresult.get("addressComponent"));
site.setFormatted_address(String.valueOf(tresult.get("formatted_address")));
site.setCountry(String.valueOf(taddressComponent.get("nation")));
site.setProvince(String.valueOf(taddressComponent.get("province")));
site.setCity(String.valueOf(taddressComponent.get("city")));
site.setDistrict(String.valueOf(taddressComponent.get("county")));
site.setCountry_code("0"); // 没有,默认为0
site.setAdcode(String.valueOf(taddressComponent.get("county_code")).substring(3, 9));
}
}
}
}
if(mapAddressUtil.redisTemplate.hasKey("site:address")){
mapAddressUtil.redisTemplate.opsForHash().put("site:address",newlongitude + "--" + newlatitude, com.alibaba.fastjson.JSONObject.toJSONString(site));
}else{
String jsonString = com.alibaba.fastjson.JSONObject.toJSONString(site);
mapAddressUtil.redisTemplate.opsForHash().put("site:address",newlongitude + "--" + newlatitude, jsonString);
mapAddressUtil.redisTemplate.expire("site:address", 3,TimeUnit.DAYS);
}
}
}
} catch (Exception e) {
log.error("--------->>>地图解析失败:{}", e.getMessage(), e);
return null;
}
return site;
}
}
package com.dr.util;
/**
* @author lingq
* @title: Site
* @projectName DJProject
* @description:
* @date 2019/10/3021:04
*/
public class Site {
private String formatted_address; //详细地址
private String country; //国家
private String country_code; //国家编号
private String province; //省份
private String city; //城市
private String district; //区县
private String street; //路
private String street_number; //号
private String adcode; //省市区编号
public String getFormatted_address() {
return formatted_address;
}
public void setFormatted_address(String formatted_address) {
this.formatted_address = formatted_address;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getDistrict() {
return district;
}
public void setDistrict(String district) {
this.district = district;
}
public String getCountry_code() {
return country_code;
}
public void setCountry_code(String country_code) {
this.country_code = country_code;
}
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
public String getStreet_number() {
return street_number;
}
public void setStreet_number(String street_number) {
this.street_number = street_number;
}
public String getAdcode() {
return adcode;
}
public void setAdcode(String adcode) {
this.adcode = adcode;
}
@Override
public String toString() {
return "Site{" +
"formatted_address='" + formatted_address + '\'' +
", country='" + country + '\'' +
", country_code='" + country_code + '\'' +
", province='" + province + '\'' +
", city='" + city + '\'' +
", district='" + district + '\'' +
", street='" + street + '\'' +
", street_number='" + street_number + '\'' +
", adcode='" + adcode + '\'' +
'}';
}
}
package com.dr.util;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson2.JSON;
import com.dr.vo.LocationDataVO;
import com.dr.vo.TrackPointVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
/**
* @description
* @author luocong
* @date 2024/8/23 10:08
* @version 1.0
*/
@Slf4j
@Component
public class WeiZhiMapUtil {
private static final String AK = "JznC2c8X3KRZCiQ72QBPDgQs2QGflBIm";
public static LocationDataVO getGeographyConvert(TrackPointVO.Point point) {
String url = "https://api.newayz.com/location/hub/v1/track_points?access_key=" + AK;
TrackPointVO trackPointVO = new TrackPointVO();
TrackPointVO.Location location = new TrackPointVO.Location();
TrackPointVO.Position position = new TrackPointVO.Position();
position.setPoint(point);
position.setTimestamp(LocalDateTime.now().toInstant(ZoneOffset.UTC).toEpochMilli());
location.setPosition(position);
trackPointVO.setLocation(location);
trackPointVO.setAsset(new TrackPointVO.Asset());
String body = HttpUtil.post(url, JSON.toJSONString(trackPointVO));
log.info("----------->>>维智地图返回接口信息:{}", body);
return JSON.parseObject(body, LocationDataVO.class);
}
}
package com.dr.vo;
import com.alibaba.fastjson.JSON;
import java.io.Serializable;
/**
* @Description: 接口返回模板
* @Author: luocong
* @Since: 2022/8/16
* @Version: 1.0.0
*/
public class ApiTemplateVO<T> implements Serializable {
/**
* 数据
*/
private T data;
/**
* 请求状态0 失败 1 成功
*/
private Integer sign;
/**
* 提示信息
*/
private String msg;
/**
* code业务代码
*/
private Integer code;
private String token;
private Long total;
/**
* 操作成功
*
* @return 响应数据模板
*/
public ApiTemplateVO SUCCESS() {
this.data = null;
this.sign = 1;
this.msg = "操作成功";
this.code = 200;
return this;
}
/**
* 操作成功
*
* @return 响应数据模板
*/
public ApiTemplateVO SUCCESS(T data) {
this.data = data;
this.sign = 1;
this.msg = "";
this.code = 200;
return this;
}
/**
* 必填参数不能为空
*
* @return 响应数据模板
*/
public ApiTemplateVO NULL() {
this.data = null;
this.sign = 0;
this.msg = "必填项不能为空";
this.code = 1000;
return this;
}
/**
* 必填参数不能为空
*
* @return 响应数据模板
*/
public ApiTemplateVO DATA_NULL() {
this.data = null;
this.sign = 0;
this.msg = "数据不存在,请检查参数";
this.code = 1001;
return this;
}
/**
* 操作失败 ERROR 未处理异常
*
* @return 响应数据模板
*/
public ApiTemplateVO ERROR() {
this.data = null;
this.sign = 0;
this.msg = "操作失败";
this.code = 5000;
return this;
}
/**
* 操作失败 ERROR
*
* @return 响应数据模板
*/
public ApiTemplateVO ERROR(String msg, Integer code) {
this.data = null;
this.sign = 0;
this.msg = msg;
this.code = code;
return this;
}
/**
* 接口调用失败 warning try cash
*
* @return 响应数据模板
*/
public ApiTemplateVO WARNING() {
this.data = null;
this.sign = 0;
this.msg = "接口调用异常";
this.code = 4444;
return this;
}
/**
* 推送数据模板
*
* @param data 数据
* @param code 数据格式
* @return
*/
public ApiTemplateVO PUSH_DATA(T data, Integer code) {
this.data = data;
this.code = code;
return this;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public Integer getSign() {
return sign;
}
public void setSign(Integer sign) {
this.sign = sign;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
@Override
public String toString() {
return JSON.toJSONString(this).replaceAll("http://", "https://");
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public Long getTotal() {
return total;
}
public void setTotal(Long total) {
this.total = total;
}
}
package com.dr.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@AllArgsConstructor
@Data
public class HereMapGRevGeoVO implements Serializable {
private static final long serialVersionUID = -4578433998945260527L;
private List<Item> items;
@AllArgsConstructor
@Data
public static class Item implements Serializable{
private static final long serialVersionUID = 2246921871764953018L;
private String title;
private String id;
private String resultType;
private Address address;
private Position position;
private List<Access> access;
private int distance;
private List<Category> categories;
}
@AllArgsConstructor
@Data
public static class Address implements Serializable{
private static final long serialVersionUID = -6704979985713248123L;
private String label;
private String countryCode;
private String countryName;
private String stateCode;
private String state;
private String county;
private String city;
private String postalCode;
}
@AllArgsConstructor
@Data
public static class Position implements Serializable{
private static final long serialVersionUID = -1254799162962571434L;
private double lat;
private double lng;
}
@AllArgsConstructor
@Data
public static class Access implements Serializable{
private static final long serialVersionUID = 9061870958673648800L;
private double lat;
private double lng;
}
@AllArgsConstructor
@Data
public static class Category implements Serializable{
private static final long serialVersionUID = -2341192791209099188L;
private String id;
private String name;
private boolean primary;
}
}
package com.dr.vo;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@Data
public class LocationDataVO implements Serializable {
private static final long serialVersionUID = 3910213702771616315L;
/**
* 随机生成定位请求的 UUID
*/
private String id;
/**
* 设备 ID,根据请求的设备 ID
*/
private String asset;
/**
* 定位的结构化位置信息
*/
private Location location;
@Data
public static class Location implements Serializable{
private static final long serialVersionUID = 1246440428711930711L;
/**
* 定位请求的时间戳,单位:毫
*/
private long timestamp;
/**
* 结构化地址信息
*/
private Address address;
/**
* 定位 POI 信息
*/
private Place place;
/**
* 定位的坐标信息
*/
private Position position;
}
@Data
public static class Address implements Serializable{
private static final long serialVersionUID = -5665512468535923300L;
/**
* 当前定位地址的格式化全称
*/
private String name;
/**
* 定位地址所能达到的层级,参考列表见附录
*/
private int level;
/**
* 格式化地址的组成部分
*/
private List<Context> context;
}
@Data
public static class Context implements Serializable{
private static final long serialVersionUID = -5183971760425346742L;
/**
* 格式化地址层级对应的代码
*/
private String code;
/**
* 格式化地址层级对应的名称
*/
private String name;
/**
* 格式化地址层级对应的类型,可能的值包 括:"Country",
* "Province","City","District","Township","Road",
* "Housenumber","Boundingarea","Building"
*/
private String type;
}
@Data
public static class Place implements Serializable{
private static final long serialVersionUID = -4630626617135132152L;
/**
* 当前 place 的 placeId
*/
private String id;
/**
* 对应的 POI 名称
*/
private String name;
/**
* 当前场景的属性信息,例如:"Entity" 等
*/
private String type;
/**
* 如果对应 POI 存在类型分类,则提供类别信息
*/
private List<Category> categories;
}
@Data
public static class Category implements Serializable{
private static final long serialVersionUID = 970156158505739820L;
/**
* 分类对应的 id
*/
private long id;
/**
* 分类对应的名称
*/
private String name;
}
@Data
public static class Position implements Serializable{
private static final long serialVersionUID = -1853474231354355240L;
/**
* 定位结果获得的时间戳,单位:毫秒
*/
private long timestamp;
/**
* 坐标点信息
*/
private Point point;
/**
* 定位源信息,可能值有"wifi", "cell","gnss", "ip"
*/
private String spatialReference;
/**
* 定位结果的精度值,单位:米
*/
private String source;
/**
* 坐标点所属的空间坐标系,默认 "gcj02"
*/
private double confidence;
/**
* 定位结果的置信值
*/
private double accuracy;
}
@Data
public static class Point implements Serializable{
private static final long serialVersionUID = -46702166542529658L;
/**
* 经度
*/
private double longitude;
/**
* 纬度
*/
private double latitude;
/**
* 高程信息,单位:米
*/
private double altitude;
}
}
......@@ -2,7 +2,9 @@ package com.dr.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
......@@ -14,6 +16,8 @@ import java.io.Serializable;
*/
@ApiModel(value = "NewClientAndCaseGroupVO", description = "客户与案例数据对象")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class NewClientAndCaseGroupVO implements Serializable {
private static final long serialVersionUID = -3357931515145301514L;
......
package com.dr.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
public class TrackPointVO implements Serializable {
private static final long serialVersionUID = 297757241565110653L;
private Asset asset;
private Location location;
@Data
public static class Asset implements Serializable{
private static final long serialVersionUID = 2475909347203067674L;
/**
* 设备 ID,使用用户自定义的值,如 UUID;需要保证
* 同一设备 id 不变,不同设备 id 不能重复
*/
private String id;
/**
* 设备制造厂商名称
*/
private String manufacturer;
/**
* 设备型号
*/
private String model;
}
@Data
public static class Location implements Serializable{
private static final long serialVersionUID = -7178341018301835645L;
private Position position;
}
@Data
public static class Position implements Serializable{
private static final long serialVersionUID = -8557592360115977721L;
/**
* 定位结果获得的时间戳,单位:毫秒
*/
private long timestamp;
/**
* 坐标点信息
*/
private Point point;
/**
* 定位源信息,可能值有"wifi", "cell","gnss", "ip"
*/
private String source;
/**
* 定位结果的精度值,单位:米
*/
private double accuracy;
}
@NoArgsConstructor
@AllArgsConstructor
@Data
public static class Point implements Serializable {
private static final long serialVersionUID = -2436048579830394202L;
/**
* 经度(gcj02 坐标系)
*/
private double longitude;
/**
* 纬度(gcj02 坐标系)
*/
private double latitude;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dr.mapper.DrClientAgeDistributeByDayMapper">
<insert id="saveBatch" parameterType="java.util.List">
INSERT INTO dr_client_age_distribute_by_day
(shop_account, shop_name, org_name, org_account, daily_time, sex, eighteen_year_under, eighteen_to_thirty_year,
thirty_to_forty_year, forty_to_sixty_year, sixty_year_over, deleted, create_user_name, create_time,
update_time, update_user_name, shop_province_name, shop_city_name, shop_region_name, shop_address)
VALUES
<foreach collection="list" item="item" separator=",">
(#{item.shopAccount}, #{item.shopName}, #{item.orgName}, #{item.orgAccount}, #{item.dailyTime},
#{item.sex}, #{item.eighteenYearUnder}, #{item.eighteenToThirtyYear}, #{item.thirtyToFortyYear},
#{item.fortyToSixtyYear}, #{item.sixtyYearOver}, #{item.deleted}, #{item.createUserName},
#{item.createTime},
#{item.updateTime}, #{item.updateUserName}, #{item.shopProvinceName}, #{item.shopCityName},
#{item.shopRegionName}, #{item.shopAddress})
</foreach>
</insert>
<select id="list" resultType="com.dr.vo.NewAgeDistributionVO">
SELECT
t1.sex AS "sex",
sum( t1.sixty_year_over ) AS "overSixtyYear",
sum( t1.forty_to_sixty_year ) AS "fortyToSixtyYear",
sum( t1.thirty_to_forty_year ) AS "thirtyToFortyYear",
sum( t1.eighteen_to_thirty_year ) AS "eighteenToThirtyYear",
sum( t1.eighteen_year_under ) AS "underEighteenYear"
FROM
dr_client_age_distribute_by_day t1
WHERE
t1.org_account = #{oAccount}
AND t1.deleted = 0
<if test="null != shopAccounts and shopAccounts.length > 0">
AND t1.shop_account IN
<foreach collection="shopAccounts" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
GROUP BY
t1.sex
</select>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dr.mapper.DrNewAddClientAndCaseByDayMapper">
<insert id="saveBatch" parameterType="java.util.List">
INSERT INTO dr_new_add_client_and_case_by_day
<trim prefix="(" suffix=")" suffixOverrides=",">
shop_account,
shop_name,
org_account,
org_name,
daily_time,
add_client_num,
add_case_group_num,
deleted,
create_user_name,
create_time,
update_time,
update_user_name,
case_group_num,
client_num,
once_arrive_client_num,
more_arrive_client_num,
shop_province_name,
shop_city_name,
shop_region_name,
shop_address
</trim>
VALUES
<foreach collection="list" item="item" separator=",">
<trim prefix="(" suffix=")" suffixOverrides=",">
#{item.shopAccount, jdbcType=VARCHAR},
#{item.shopName, jdbcType=VARCHAR},
#{item.orgAccount, jdbcType=VARCHAR},
#{item.orgName, jdbcType=VARCHAR},
#{item.dailyTime, jdbcType=DATE},
#{item.addClientNum, jdbcType=INTEGER},
#{item.addCaseGroupNum, jdbcType=INTEGER},
#{item.deleted, jdbcType=TINYINT},
#{item.createUserName, jdbcType=VARCHAR},
#{item.createTime, jdbcType=TIMESTAMP},
#{item.updateTime, jdbcType=TIMESTAMP},
#{item.updateUserName, jdbcType=VARCHAR},
#{item.caseGroupNum, jdbcType=INTEGER},
#{item.clientNum, jdbcType=INTEGER},
#{item.onceArriveClientNum, jdbcType=INTEGER},
#{item.moreArriveClientNum, jdbcType=INTEGER},
#{item.shopProvinceName, jdbcType=VARCHAR},
#{item.shopCityName, jdbcType=VARCHAR},
#{item.shopRegionName, jdbcType=VARCHAR},
#{item.shopAddress, jdbcType=VARCHAR}
</trim>
</foreach>
</insert>
<update id="removeByLessId">
update dr_new_add_client_and_case_by_day set deleted = 1 where id &lt;= #{id} and deleted = 0
</update>
<select id="getLastOne" resultType="com.dr.entity.DrNewAddClientAndCaseByDayEntity">
select *
from dr_new_add_client_and_case_by_day
where
deleted = 0
<if test="null != memberAccount and '' != memberAccount">
and shop_account = #{memberAccount}
</if>
order by id limit 1
</select>
<select id="selectClientAndCase" resultType="com.dr.entity.DrNewAddClientAndCaseByDayEntity">
SELECT
*
FROM
dr_new_add_client_and_case_by_day t1
WHERE
t1.deleted = 0
AND t1.time = #{time}
<if test="oAccount != null and oAccount != ''">
AND t1.org_account = #{oAccount}
</if>
<if test="sAccount != null and sAccount != ''" >
AND t1.shop_account = #{sAccount}
</if>
order by id desc limit 1
</select>
<select id="selectCheckCaseRank" resultType="com.dr.vo.NewCheckCaseRankVO">
SELECT
sum( t1.add_case_group_num ) AS "checkCaseNum",
t1.shop_name AS "shopName"
FROM
dr_new_add_client_and_case_by_day t1
WHERE
t1.deleted = 0
AND t1.org_account = #{oAccount}
AND t1.daily_time >= #{time}
GROUP BY
t1.shop_account
ORDER BY
checkCaseNum DESC
LIMIT ${(pageNum-1)*pageSize},${pageSize}
</select>
<select id="selectArriveShopRank" resultType="com.dr.vo.NewArriveShopRankVO">
SELECT
t1.shop_name AS "shopName",
sum( t1.add_client_num ) AS "arriveShopNum"
FROM
dr_new_add_client_and_case_by_day t1
WHERE
t1.deleted = 0
AND t1.org_account = #{oAccount}
AND t1.daily_time >= #{time}
GROUP BY
t1.shop_account
ORDER BY
arriveShopNum DESC
LIMIT ${(pageNum-1)*pageSize},${pageSize}
</select>
<select id="selectClientDistribution" resultType="com.dr.vo.NewClientDistributionVO">
SELECT
t1.shop_province_name AS "provinceName",
count( DISTINCT t1.shop_account ) AS "shopNum",
sum(t1.client_num) AS "clientNum"
FROM
dr_new_add_client_and_case_by_day t1
WHERE
t1.deleted = 0
AND t1.org_account = #{oAccount}
AND t1.shop_province_name is not null
AND t1.daily_time = #{time}
GROUP BY
t1.shop_province_name
ORDER BY
clientNum DESC
LIMIT ${(pageNum-1)*pageSize},${pageSize}
</select>
<select id="countCheckCaseRank" resultType="java.lang.Long">
SELECT
IFNULL( count(*), 0 ) as num
FROM
dr_new_add_client_and_case_by_day t1
WHERE
t1.deleted = 0
AND t1.org_account = #{oAccount}
AND t1.daily_time >= #{time}
GROUP BY
t1.shop_account
</select>
<select id="countArriveShopRank" resultType="java.lang.Long">
SELECT
IFNULL( count(*), 0 ) as num
FROM
dr_new_add_client_and_case_by_day t1
WHERE
t1.deleted = 0
AND t1.org_account = #{oAccount}
AND t1.daily_time >= #{time}
GROUP BY
t1.shop_account
</select>
<select id="countClientDistribution" resultType="java.lang.Long">
SELECT
IFNULL( count(*), 0 ) as num
FROM
dr_new_add_client_and_case_by_day t1
WHERE
t1.deleted = 0
AND t1.org_account = #{oAccount}
AND t1.shop_province_name is not null
AND t1.daily_time = #{time}
GROUP BY
t1.shop_province_name
</select>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dr.mapper.DrProductRecommendByDayMapper">
<insert id="saveBatch" parameterType="java.util.List">
INSERT INTO dr_product_recommend_by_day (
shop_name, shop_account, org_name, org_account, daily_time, goods_name,
recommend_num, goods_id, deleted, create_user_name, create_time,
update_time, update_user_name, shop_province_name, shop_city_name,
shop_region_name, shop_address
) VALUES
<foreach collection="list" item="item" separator=",">
(
#{item.shopName}, #{item.shopAccount}, #{item.orgName}, #{item.orgAccount},
#{item.dailyTime}, #{item.goodsName}, #{item.recommendNum}, #{item.goodsId},
#{item.deleted}, #{item.createUserName}, #{item.createTime}, #{item.updateTime},
#{item.updateUserName}, #{item.shopProvinceName}, #{item.shopCityName},
#{item.shopRegionName}, #{item.shopAddress}
)
</foreach>
</insert>
<select id="selectList" resultType="com.dr.vo.NewProductRecommendVO">
SELECT
t1.goods_name AS productName,
sum( t1.recommend_num ) AS recommendNum
FROM
dr_product_recommend_by_day t1
WHERE
t1.org_account = #{oAccount}
AND t1.shop_account = #{mAccount}
AND t1.deleted = 0
GROUP BY
t1.goods_name
ORDER BY
recommendNum DESC
limit ${(pageNum-1)*pageSize},${pageSize}
</select>
<select id="selectCount" resultType="java.lang.Long">
SELECT
IFNULL( count(*), 0 ) as num
FROM
dr_product_recommend_by_day t1
WHERE
t1.org_account = #{oAccount}
AND t1.shop_account = #{mAccount}
AND t1.deleted = 0
GROUP BY
t1.goods_name
</select>
</mapper>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment