提交 52968795 authored 作者: 李秋林's avatar 李秋林

考勤打卡信息

上级 596b5893
FROM openjdk:8
WORKDIR /sfa
ADD ./target/wangxiaolu-sfa-module-operation.jar /sfa/app.jar
#设置时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
# 定义容器启动命令ENTRYPOINT 和 CMD指令类似,都可以用于增加启动参数
ENTRYPOINT ["nohup","java", "-jar", "/sfa/app.jar"]
CMD ["--spring.profiles.active=qa"]
EXPOSE 9202
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<groupId>com.wangxiaolu.sfa</groupId> <groupId>com.wangxiaolu.sfa</groupId>
<artifactId>wangxiaolu-sfa-parent</artifactId> <artifactId>wangxiaolu-sfa-parent</artifactId>
<version>0.0.1</version> <version>0.0.1</version>
<relativePath/> <!-- <relativePath/>-->
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
...@@ -71,11 +71,6 @@ ...@@ -71,11 +71,6 @@
<artifactId>wangxiaolu-sfa-common-swagger</artifactId> <artifactId>wangxiaolu-sfa-common-swagger</artifactId>
</dependency> </dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-annotation</artifactId>
</dependency>
<dependency> <dependency>
<groupId>com.baomidou</groupId> <groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId> <artifactId>mybatis-plus-boot-starter</artifactId>
...@@ -91,6 +86,10 @@ ...@@ -91,6 +86,10 @@
<artifactId>spring-webmvc</artifactId> <artifactId>spring-webmvc</artifactId>
</dependency> </dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>/Library/apache-maven-3.8.6/repository</localRepository>
<mirrors>
<!-- <mirror>-->
<!-- <id>mirror</id>-->
<!-- <mirrorOf>!rdc-releases,!rdc-snapshots</mirrorOf>-->
<!-- <name>mirror</name>-->
<!-- <url>http://maven.aliyun.com/nexus/content/groups/public</url>-->
<!-- </mirror>-->
<mirror>
<id>nexus-tencentyun</id>
<!-- 此配置避免了本仓库制品的拉取流量被切换到腾讯云镜像源,保证您在使用镜像加速的同时可以从本仓库拉取制品 -->
<mirrorOf>!g-pkkp8204-wangxiaolu-sfa-maven</mirrorOf>
<name>Nexus tencentyun</name>
<url>http://mirrors.cloud.tencent.com/nexus/repository/maven-public/</url>
</mirror>
</mirrors>
<servers>
<server>
<id>rdc-releases</id>
<username>G8G0iR</username>
<password>Do1l7QXnPg</password>
</server>
<server>
<id>rdc-snapshots</id>
<username>G8G0iR</username>
<password>Do1l7QXnPg</password>
</server>
<server>
<id>g-pkkp8204-wangxiaolu-sfa-maven</id>
<username>liqiulin@wangxiaolu.com.cn</username>
<password>Wangxiaolu_lql123</password>
</server>
</servers>
<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>central</id>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>snapshots</id>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>rdc-releases</id>
<url>https://repo.rdc.aliyun.com/repository/35126-release-kef1BI/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>rdc-snapshots</id>
<url>https://repo.rdc.aliyun.com/repository/35126-snapshot-j8LEe7/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>snapshots</id>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>rdc-releases</id>
<url>https://repo.rdc.aliyun.com/repository/35126-release-kef1BI/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>rdc-snapshots</id>
<url>https://repo.rdc.aliyun.com/repository/35126-snapshot-j8LEe7/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
<profile>
<id>Repository Proxy</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<repositories>
<repository>
<id>g-pkkp8204-wangxiaolu-sfa-maven</id>
<name>maven</name>
<url>https://g-pkkp8204-maven.pkg.coding.net/repository/wangxiaolu-sfa/maven/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
</settings>
\ No newline at end of file
package com.sfa.operation; package com.sfa.operation;
import com.sfa.common.security.annotation.EnableCustomConfig;
import com.sfa.common.security.annotation.EnableRyFeignClients;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
@EnableCustomConfig
@EnableRyFeignClients
@MapperScan("com.sfa.operation.domain.mapper")
@SpringBootApplication @SpringBootApplication
public class WangxiaoluSfaModuleOperationApplication { public class WangxiaoluSfaModuleOperationApplication {
......
package com.sfa.operation.advice;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.sfa.common.core.domain.R;
import com.sfa.common.core.web.domain.AjaxResult;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
/**
* @author : liqiulin
* @date : 2024-10-28 17
* @describe :自动封装
*/
@RestControllerAdvice
public class ControllerResponseAdvice implements ResponseBodyAdvice<Object>{
/**
* response是R类型或者注释了NotControllerResponseAdvice都不进行包装
*/
@Override
public boolean supports(MethodParameter methodParameter, Class converterType) {
return !methodParameter.getParameterType().isAssignableFrom(R.class);
}
@Override
public Object beforeBodyWrite(Object body, MethodParameter methodParameter, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
// String类型不能直接包装
if (methodParameter.getGenericParameterType().equals(String.class)) {
ObjectMapper objectMapper = new ObjectMapper();
try {
// 将数据包装在ResultVo里后转换为json串进行返回
return objectMapper.writeValueAsString(R.ok(body));
} catch (JsonProcessingException e) {
throw new RuntimeException();
}
}
// 包装成R返回
return R.ok(body);
}
}
package com.sfa.operation.controller.core;
import com.sfa.common.security.utils.SecurityUtils;
import com.sfa.operation.pojo.request.KqMxVo;
import com.sfa.operation.pojo.response.SfaKqMxDto;
import com.sfa.operation.service.IKqMxCoreService;
import com.sfa.system.api.model.LoginUser;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
/**
* @author : liqiulin
* @date : 2024-11-04 17
* @describe :
*/
@RestController
@RequestMapping("/kqmx/core")
public class KqMxCoreController {
@Autowired
IKqMxCoreService kqMxCoreService;
/**
* 打卡
* @param kqMxVo 打卡基础明细
*/
@PostMapping
public void kqClockIn(@RequestBody @Validated KqMxVo kqMxVo){
SfaKqMxDto kqMxDto = new SfaKqMxDto();
BeanUtils.copyProperties(kqMxVo,kqMxDto);
LoginUser loginUser = SecurityUtils.getLoginUser();
Date date = new Date();
kqMxDto.setKqUserid(loginUser.getUserid())
.setKqTime(date)
.setRuleId(loginUser.getRuleId())
.setRuleName(loginUser.getRuleName())
.setCreateDate(date)
.setCreateBy(loginUser.getUsername())
.setCreateUserId(loginUser.getUserid())
.setKqAddress(kqMxDto.getKqProvinc() + "-" + kqMxDto.getKqCity() + "-" + kqMxDto.getKqCounty() + "-" + kqMxDto.getKqAddress());
kqMxCoreService.kqClockIn(kqMxDto);
}
}
package com.sfa.operation.controller.query;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.sfa.common.security.utils.SecurityUtils;
import com.sfa.operation.service.IKqMxQueryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
/**
* @author : liqiulin
* @date : 2024-11-05 13
* @describe :
*/
@RestController
@RequestMapping("/kqmx/query")
public class KqMxQueryController {
@Autowired
IKqMxQueryService kqMxQueryService;
@GetMapping("/roll")
public Map rollDateList(){
Long userId = SecurityUtils.getUserId();
DateTime dateTime = DateUtil.offsetDay(new DateTime(), -7);
Map dataMap = kqMxQueryService.rollDateList(dateTime, userId);
HashMap<String,Object> rMap = new HashMap<>();
rMap.put("data",dataMap);
rMap.put("current",new DateTime());
return rMap;
}
}
package com.sfa.operation.domain.dao;
import cn.hutool.core.date.DateTime;
import com.sfa.operation.pojo.response.SfaKqMxDto;
import java.util.List;
/**
* @author : liqiulin
* @date : 2024-11-05 10
* @describe :
*/
public interface ISfaKqmxDao {
void add(SfaKqMxDto kqMxDto);
List<SfaKqMxDto> betweentDate(DateTime dateTime,Long userId);
}
package com.sfa.operation.domain.dao.impl;
import cn.hutool.core.date.DateTime;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.sfa.common.core.enums.ECode;
import com.sfa.common.core.exception.WXLSQLException;
import com.sfa.operation.domain.dao.ISfaKqmxDao;
import com.sfa.operation.domain.entity.SfaKqmx;
import com.sfa.operation.domain.mapper.SfaKqmxMapper;
import com.sfa.operation.pojo.response.SfaKqMxDto;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author : liqiulin
* @date : 2024-11-05 10
* @describe :
*/
@Service
public class SfaKqmxDaoImpl implements ISfaKqmxDao {
@Autowired
SfaKqmxMapper sfaKqmxMapper;
@Override
public void add(SfaKqMxDto kqMxDto) {
try {
SfaKqmx kqDo = new SfaKqmx();
BeanUtils.copyProperties(kqMxDto,kqDo);
kqDo.setKqLon(kqMxDto.getKqLocal()[0]);
kqDo.setKqLat(kqMxDto.getKqLocal()[1]);
sfaKqmxMapper.insertOne(kqDo);
}catch (Exception e) {
String eMsg = e.getCause().getMessage();
if (eMsg.contains("for key 'date_type_unique'")) {
throw new WXLSQLException(ECode.KQMX_CURRENTLY_TYPE_KQ_HAS);
}else {
throw new WXLSQLException(ECode.KQMX_CLOCK_IN_ERRPR);
}
}
}
@Override
public List<SfaKqMxDto> betweentDate(DateTime dateTime,Long userId) {
LambdaQueryWrapper<SfaKqmx> qw = new LambdaQueryWrapper<>();
qw.ge(SfaKqmx::getCreateDate, dateTime);
qw.eq(SfaKqmx::getCreateUserId,userId);
List<SfaKqmx> dos = sfaKqmxMapper.selectList(qw);
List<SfaKqMxDto> dtos = com.sfa.common.core.utils.bean.BeanUtils.transitionDtos(dos, SfaKqMxDto.class);
return dtos;
}
}
package com.sfa.operation.domain.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* sfa考勤明细表
* @TableName sfa_kqmx
*/
@AllArgsConstructor
@NoArgsConstructor
@TableName(value ="sfa_kqmx")
@Data
public class SfaKqmx implements Serializable {
/**
* 考勤明细ID
*/
@TableId(type = IdType.AUTO)
private Long kqmxId;
/**
* 员工ID
*/
private Long kqUserid;
/**
* 考勤规则ID
*/
private Long ruleId;
/**
* 考勤规则名称
*/
private String ruleName;
/**
* 上班打卡时间
*/
private Date kqTime;
/**
* 经度
*/
private BigDecimal kqLon;
/**
* 纬度
*/
private BigDecimal kqLat;
/**
* 打卡-省-市-区-详细地址
*/
private String kqAddress;
/**
* 打卡省编码
*/
private String kqProvinceNum;
/**
* 打卡省编码
*/
private String kqProvinc;
/**
* 打卡城市编码
*/
private String kqCityNum;
/**
* 打卡市编码
*/
private String kqCity;
/**
* 打卡县/区编码
*/
private String kqCountyNum;
/**
* 打卡区编码
*/
private String kqCounty;
/**
* 考勤照片
*/
private String kqPicurl;
/**
* 1:上班;2:午班;3:下班;
*/
private Integer kqType;
private Date createDate;
/**
* 记录版本
*/
private Integer flag;
/**
* 记录删除
*/
private String delFlag;
/**
* 创建者/打卡人员
*/
private String createBy;
/**
* 创建人UserID
*/
private Long createUserId;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新者
*/
private String updateBy;
/**
* 修改人UserID
*/
private Long updateUserId;
/**
* 更新时间
*/
private Date updateTime;
/**
* 备注
*/
private String remark;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}
\ No newline at end of file
package com.sfa.operation.domain.mapper;
import com.sfa.operation.domain.entity.SfaKqmx;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
/**
* @author a02200059
* @description 针对表【sfa_kqmx(sfa考勤明细表)】的数据库操作Mapper
* @createDate 2024-11-04 15:50:25
* @Entity com.sfa.operation.domain.entity.SfaKqmx
*/
@Mapper
@Repository
public interface SfaKqmxMapper extends BaseMapper<SfaKqmx> {
void insertOne(SfaKqmx kqDo);
}
package com.sfa.operation.pojo.request;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.awt.geom.Point2D;
import java.lang.reflect.Array;
import java.math.BigDecimal;
/**
* @author : liqiulin
* @date : 2024-11-04 16
* @describe :
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
public class KqMxVo {
@NotNull(message = "打卡经纬度获取不到")
private BigDecimal[] kqLocal;
@NotBlank(message = "打卡省份获取不到")
private String kqProvinc;
@NotBlank(message = "打卡城市获取不到")
private String kqCity;
@NotBlank(message = "打卡区域获取不到")
private String kqCounty;
@NotBlank(message = "详细位置获取不到")
private String kqAddress;
private String kqPicurl;
/**
* 1:上班;2:午班;3:下班;
*/
@NotNull(message = "无法判断上下班类型,请刷新重试")
@Max(value = 3,message = "无法判断上下班类型,请刷新重试(<=3)")
@Min(value = 1,message = "无法判断上下班类型,请刷新重试(>=1)")
private Integer kqType;
}
package com.sfa.operation.pojo.response;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.lang.reflect.Array;
import java.math.BigDecimal;
import java.util.Date;
/**
* @author : liqiulin
* @date : 2024-11-04 16
* @describe :
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
public class SfaKqMxDto {
/**
* 考勤明细ID
*/
private Long kqmxId;
private Date kqTime;
private BigDecimal[] kqLocal;
private String kqProvinc;
private String kqCity;
private String kqCounty;
private String kqAddress;
private String kqPicurl;
/**
* 1:上班;2:午班;3:下班;
*/
private Integer kqType;
/**
* 员工ID
*/
private Long kqUserid;
/**
* 考勤规则ID
*/
private Long ruleId;
/**
* 考勤规则名称
*/
private String ruleName;
/**
* 打卡省编码
*/
private String kqProvinceNum;
/**
* 打卡城市编码
*/
private String kqCityNum;
/**
* 打卡县/区编码
*/
private String kqCountyNum;
private Date createDate;
/**
* 创建者/打卡人员
*/
private String createBy;
/**
* 创建人UserID
*/
private Long createUserId;
}
package com.sfa.operation.service;
import com.sfa.operation.pojo.response.SfaKqMxDto;
/**
* @author : liqiulin
* @date : 2024-11-04 18
* @describe :
*/
public interface IKqMxCoreService {
void kqClockIn(SfaKqMxDto kqMxDto);
}
package com.sfa.operation.service;
import cn.hutool.core.date.DateTime;
import java.util.Map;
/**
* @author : liqiulin
* @date : 2024-11-05 14
* @describe :
*/
public interface IKqMxQueryService {
Map rollDateList(DateTime dateTime,Long userId);
}
package com.sfa.operation.service.impl;
import com.sfa.common.core.constant.SecurityConstants;
import com.sfa.common.core.domain.R;
import com.sfa.operation.domain.dao.ISfaKqmxDao;
import com.sfa.operation.pojo.response.SfaKqMxDto;
import com.sfa.operation.service.IKqMxCoreService;
import com.sfa.system.api.RemoteSiteService;
import com.sfa.system.api.pojo.response.SiteDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Objects;
/**
* @author : liqiulin
* @date : 2024-11-04 18
* @describe :
*/
@Service
public class KqMxCoreServiceImpl implements IKqMxCoreService {
@Autowired
RemoteSiteService remoteSiteService;
@Autowired
ISfaKqmxDao kqmxDao;
@Override
public void kqClockIn(SfaKqMxDto kqMxDto) {
SiteDto siteDto = new SiteDto()
.setProvinceName(kqMxDto.getKqProvinc())
.setCityName(kqMxDto.getKqCity())
.setCountyName(kqMxDto.getKqCounty());
R<SiteDto> siteDtoR = remoteSiteService.getCountyName(siteDto, SecurityConstants.INNER);
if (!Objects.isNull(siteDtoR.getData())){
SiteDto data = siteDtoR.getData();
kqMxDto.setKqProvinceNum(data.getProvinceNum())
.setKqCityNum(data.getCityNum())
.setKqCountyNum(data.getCountyNum());
}
kqmxDao.add(kqMxDto);
}
}
package com.sfa.operation.service.impl;
import cn.hutool.core.date.DateTime;
import com.sfa.operation.domain.dao.ISfaKqmxDao;
import com.sfa.operation.pojo.response.SfaKqMxDto;
import com.sfa.operation.service.IKqMxQueryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.stream.Collectors;
/**
* @author : liqiulin
* @date : 2024-11-05 14
* @describe :
*/
@Service
public class KqMxQueryServiceImpl implements IKqMxQueryService {
@Autowired
ISfaKqmxDao sfaKqmxDao;
@Override
public Map rollDateList(DateTime dateTime,Long userId) {
List<SfaKqMxDto> dtos = sfaKqmxDao.betweentDate(dateTime,userId);
TreeMap<Date, List<SfaKqMxDto>> collect = dtos.stream().collect(Collectors.groupingBy(SfaKqMxDto::getCreateDate, TreeMap::new, Collectors.toList()));
return collect.descendingMap();
}
}
spring.application.name=wangxiaolu-sfa-module-operation
spring:
application:
name: wangxiaolu-sfa-operation
cloud:
nacos:
discovery:
server-addr: 192.168.100.38:8848
group: sfa
namespace: 7c6a8032-90e9-462f-9c58-ab8fcceb71f8
config:
server-addr: 192.168.100.38:8848
file-extension: yaml
group: sfa
namespace: 7c6a8032-90e9-462f-9c58-ab8fcceb71f8
spring:
application:
name: wangxiaolu-sfa-operation
cloud:
nacos:
discovery:
server-addr: 192.168.100.38:8848
group: sfa
namespace: 0be11bc6-b70a-4d5a-a774-b50a22863544
config:
server-addr: 192.168.100.38:8848
file-extension: yaml
group: sfa
namespace: 0be11bc6-b70a-4d5a-a774-b50a22863544
spring:
profiles:
active: dev
<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别从低到高分为 TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<property name="APP_NAME" value="wangxiaolu-sfa-module-operation"/>
<property name="MODEL_NAME" value="operation"/>
<contextName>${APP_NAME}</contextName>
<!-- 日志存放路径 对应yml文件中spring.profiles.active配置-->
<springProfile name="dev">
<property name="LOG_PATH" value="./logs/${APP_NAME}" />
</springProfile>
<springProfile name="qa,live">
<property name="LOG_PATH" value="/var/logs/sfa/${APP_NAME}" />
</springProfile>
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} --- [%thread] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<property name="FILE_LOG_PATTERN" value="${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} --- [%thread] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="rollingFile"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
<file>${LOG_PATH}/${MODEL_NAME}-today.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<cleanHistoryOnStart>false</cleanHistoryOnStart>
<fileNamePattern>${LOG_PATH}/${MODEL_NAME}-%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
<maxFileSize>200MB</maxFileSize>
<maxHistory>30</maxHistory>
<totalSizeCap>0</totalSizeCap>
</rollingPolicy>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="errorFile"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
<file>${LOG_PATH}/${MODEL_NAME}-error-today.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<cleanHistoryOnStart>false</cleanHistoryOnStart>
<fileNamePattern>${LOG_PATH}/${MODEL_NAME}-error-%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
<maxFileSize>200MB</maxFileSize>
<maxHistory>30</maxHistory>
<totalSizeCap>0</totalSizeCap>
</rollingPolicy>
<!--
此日志文件只记录debug级别的
onMatch和onMismatch都有三个属性值,分别为Accept、DENY和NEUTRAL
onMatch="ACCEPT" 表示匹配该级别及以上
onMatch="DENY" 表示不匹配该级别及以上
onMatch="NEUTRAL" 表示该级别及以上的,由下一个filter处理,如果当前是最后一个,则表示匹配该级别及以上
onMismatch="ACCEPT" 表示匹配该级别以下
onMismatch="NEUTRAL" 表示该级别及以下的,由下一个filter处理,如果当前是最后一个,则不匹配该级别以下的
onMismatch="DENY" 表示不匹配该级别以下的
-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 控制台-->
<root level="INFO">
<appender-ref ref="console" />
</root>
<!-- 文件日志-->
<root level="INFO">
<appender-ref ref="rollingFile" />
<appender-ref ref="errorFile" />
<!-- <appender-ref ref="logstash"/>-->
</root>
</configuration>
\ 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.sfa.operation.domain.mapper.SfaKqmxMapper">
<resultMap id="BaseResultMap" type="com.sfa.operation.domain.entity.SfaKqmx">
<id property="kqmxId" column="kqmx_id" jdbcType="BIGINT"/>
<result property="kqUserid" column="kq_userid" jdbcType="BIGINT"/>
<result property="ruleId" column="rule_id" jdbcType="BIGINT"/>
<result property="ruleName" column="rule_name" jdbcType="VARCHAR"/>
<result property="kqTime" column="kq_time" jdbcType="TIMESTAMP"/>
<result property="kqLon" column="kq_lon" jdbcType="DECIMAL"/>
<result property="kqLat" column="kq_lat" jdbcType="DECIMAL"/>
<result property="kqAddress" column="kq_address" jdbcType="VARCHAR"/>
<result property="kqProvinceNum" column="kq_province_num" jdbcType="VARCHAR"/>
<result property="kqProvinc" column="kq_provinc" jdbcType="VARCHAR"/>
<result property="kqCityNum" column="kq_city_num" jdbcType="VARCHAR"/>
<result property="kqCity" column="kq_city" jdbcType="VARCHAR"/>
<result property="kqCountyNum" column="kq_county_num" jdbcType="VARCHAR"/>
<result property="kqCounty" column="kq_county" jdbcType="VARCHAR"/>
<result property="kqPicurl" column="kq_picurl" jdbcType="VARCHAR"/>
<result property="kqType" column="kq_type" jdbcType="INTEGER"/>
<result property="createDate" column="create_date" jdbcType="DATE"/>
<result property="flag" column="flag" jdbcType="INTEGER"/>
<result property="delFlag" column="del_flag" jdbcType="CHAR"/>
<result property="createBy" column="create_by" jdbcType="VARCHAR"/>
<result property="createUserId" column="create_user_id" jdbcType="BIGINT"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="updateBy" column="update_by" jdbcType="VARCHAR"/>
<result property="updateUserId" column="update_user_id" jdbcType="BIGINT"/>
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
<result property="remark" column="remark" jdbcType="VARCHAR"/>
</resultMap>
<sql id="Base_Column_List">
kqmx_id
,kq_userid,rule_id,
rule_name,kq_time,
kq_lon,kq_lat,kq_address,
kq_province_num,kq_provinc,kq_city_num,
kq_city,kq_county_num,kq_county,
kq_picurl,kq_type,create_date,
flag,del_flag,create_by,
create_user_id,create_time,update_by,
update_user_id,update_time,remark
</sql>
<insert id="insertOne" parameterType="com.sfa.operation.domain.entity.SfaKqmx">
INSERT INTO sfa_kqmx (kq_userid, rule_id, rule_name, kq_time, kq_local, kq_lon, kq_lat, kq_address,
kq_province_num, kq_provinc, kq_city_num, kq_city, kq_county_num, kq_county, kq_picurl,
kq_type, create_date, create_by, create_user_id)
VALUES (#{kqUserid}, #{ruleId}, #{ruleName}, #{kqTime},ST_GeomFromText('POINT(${kqLon} ${kqLat})'),
#{kqLon},
#{kqLat}, #{kqAddress}, #{kqProvinceNum}, #{kqProvinc}, #{kqCityNum},
#{kqCity},
#{kqCountyNum},
#{kqCounty}, #{kqPicurl}, #{kqType}, #{createDate}, #{createBy},
#{createUserId});
</insert>
</mapper>
package com.sfa.operation;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class WangxiaoluSfaModuleOperationApplicationTests {
@Test
void contextLoads() {
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论