Commit e361b04d by liangkaiping

copy

parent 0752a179
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>sign-project</artifactId>
<groupId>com.yizhi</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.yizhi</groupId>
<artifactId>cloud-sign-api</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.yizhi</groupId>
<artifactId>cloud-common-api</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.yizhi</groupId>-->
<!-- <artifactId>cloud-system-api</artifactId>-->
<!-- <version>1.0-SNAPSHOT</version>-->
<!-- <scope>provided</scope>-->
<!-- </dependency>-->
<dependency>
<groupId>com.yizhi</groupId>
<artifactId>cloud-util</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
package com.yizhi.sign.application.constant;
public interface EnrollError {
final String ENROLL_SEARCH_ERROR ="SIGN_SEARCH_ERROR";
final String ENROLL_SEARCH_ERROR_MSG ="签到搜索错误";
}
/**
*
* 功能描述:
* @Package: com.yizhi.application.constant
* @author: xingliang
* @date: 2018年3月7日 下午4:04:57
*/
package com.yizhi.sign.application.constant;
/**
*
* @ClassName: SignError.java
* @Description:
*
* @author: xingliang
* @date: 2018年3月7日 下午4:04:57
*
* 2018年3月7日 xingliang
*/
public class SignError {
public static final String SIGN_QRCODE_ERROR = "SIGN_QRCODE_ERROR";
public static final String SIGN_QRCODE_ERROR_MSG = "二维码生成错误";
public static final String SIGN_QRCODE_PARAM_NOT_FOUND = "SIGN_QRCODE_PARAM_NOT_FOUND";
public static final String SIGN_QRCODE_PARAM_NOT_FOUND_MSG = "培训项目id为空";
}
/**
*
* 功能描述:
* @Package: com.yizhi.application.constant
* @author: xingliang
* @date: 2018年3月8日 上午11:15:16
*/
package com.yizhi.sign.application.constant;
/**
*
* @ClassName: SignRespCode.java
* @Description:
*
* @author: xingliang
* @date: 2018年3月8日 上午11:15:16
*
* 2018年3月8日 xingliang
*/
public class SignRespCode {
public static String TRAINING_PROJECT_NULL = "TRAINING_PROJECT_NULL";
public static String TRAINING_PROJECT_NULL_MSG = "项目不存在";
public static Integer TRAINING_PROJECT_SIGN_TYPE_NO = 0;
public static String TRAINING_PROJECT_SIGN_TYPE_NO_MSG = "项目不需要签到";
/**
* 开启补签
*/
public static Integer SIGN_ENABLE_RETROACTIVE_TRUE = 1;
/**
* 关闭补签
*/
public static Integer SIGN_ENABLE_RETROACTIVE_FALSE = 0;
/**
* 正常签到
*/
public static Integer SIGN_RECORD_STATUS_DEFAULT = 0;
/**
* 补签到
*/
public static Integer SIGN_RECORD_STATUS_RETROACTIVE = 1;
}
package com.yizhi.sign.application.feign;
import com.baomidou.mybatisplus.plugins.Page;
import com.yizhi.sign.application.vo.domain.StatisticsSign;
import com.yizhi.sign.application.vo.domain.StatisticsSignLearn;
import com.yizhi.sign.application.vo.domain.TrSign;
import com.yizhi.sign.application.vo.domain.TrSignTime;
import com.yizhi.util.application.domain.Response;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.Date;
import java.util.List;
@FeignClient(name = "sign", contextId = "ReportSignClient")
public interface ReportSignClient {
/**
* 异步加载统计
*
* @param startDate
* @param endDate
* @return
*/
@GetMapping("/remote/statisticsSign/asynchronous/load/data")
public Response<String> asynchronousSign(@RequestParam("startDate") String startDate, @RequestParam("endDate") String endDate);
@GetMapping("/remote/statisticsSign/group")
Page<StatisticsSign> signPage(@RequestParam(name = "projectId", required = false) Long projectId,
@RequestParam(name = "kwd", required = false) String kwd,
@RequestParam(name = "startDate", required = false) String startDate,
@RequestParam(name = "endDate", required = false) String endDate,
@RequestParam(name = "signCompanyId", required = false) Long signCompanyId,
@RequestParam(name = "signOrgIds", required = false) List<Long> signOrgIds,
@RequestParam(name = "signSiteId", required = false) Long signSiteId,
@RequestParam(name = "pageNo", required = false) Integer pageNo,
@RequestParam(name = "pageSize", required = false) Integer pageSize);
@GetMapping("/remote/statisticsSign/group/view")
Page<StatisticsSign> signView(
@RequestParam(name = "id", required = true) Long id,
@RequestParam(name = "projectId", required = true) Long projectId,
@RequestParam(name = "startDate", required = false) String startDate,
@RequestParam(name = "endDate", required = false) String endDate,
@RequestParam(name = "orgNameOrCode", required = false) String orgNameOrCode,
@RequestParam(name = "accountName", required = false) String accountName,
@RequestParam(name = "pageNo", required = false) Integer pageNo,
@RequestParam(name = "pageSize", required = false) Integer pageSize);
@GetMapping("/remote/statisticsSign/chart/group")
List<StatisticsSign> chartGroup(@RequestParam(name = "trainningProjectId", required = false) Long trainningProjectId,
@RequestParam(name = "startDate", required = false) String startDate,
@RequestParam(name = "endDate", required = false) String endDate,
@RequestParam(name = "signCompanyId", required = false) Long signCompanyId,
@RequestParam(name = "signOrgIds", required = false) List<Long> signOrgIds,
@RequestParam(name = "signSiteId", required = false) Long signSiteId);
@ApiOperation(value = "各项目的签到统计", notes = "各项目的签到统计")
@GetMapping("/remote/statisticsSign/group/count")
Integer signPageCount(@RequestParam(name = "projectId", required = false) Long projectId,
@RequestParam(name = "startDate", required = false) String startDate,
@RequestParam(name = "endDate", required = false) String endDate,
@RequestParam(name = "signCompanyId", required = false) Long signCompanyId,
@RequestParam(name = "signOrgIds", required = false) List<Long> signOrgIds,
@RequestParam(name = "signSiteId", required = false) Long signSiteId);
@ApiOperation(value = "各项目的签到统计列表", notes = "各项目的签到统计")
@GetMapping("/remote/statisticsSign/group/list")
List<StatisticsSign> signPageList(@RequestParam(name = "projectId", required = false) Long projectId,
@RequestParam(name = "startDate", required = false) String startDate,
@RequestParam(name = "endDate", required = false) String endDate,
@RequestParam(name = "signCompanyId", required = false) Long signCompanyId,
@RequestParam(name = "signOrgIds", required = false) List<Long> signOrgIds,
@RequestParam(name = "signSiteId", required = false) Long signSiteId,
@RequestParam(name = "pageNo", required = false) Integer pageNo,
@RequestParam(name = "pageSize", required = false) Integer pageSize);
@ApiOperation(value = "某个项目的签到统计个数", notes = "某个项目的签到统计个数")
@GetMapping("/remote/statisticsSign/group/view/count")
Integer signViewCount(
@RequestParam(name = "id", required = true) Long id,
@RequestParam(name = "projectId", required = true) Long projectId,
@RequestParam(name = "startDate", required = false) String startDate,
@RequestParam(name = "endDate", required = false) String endDate,
@RequestParam(name = "orgNameOrCode", required = false) String orgNameOrCode,
@RequestParam(name = "accountName", required = false) String accountName);
@ApiOperation(value = "某个项目的签到统计个数列表", notes = "某个项目的签到统计个数列表")
@GetMapping("/remote/statisticsSign/group/view/list")
List<StatisticsSign> signViewList(
@RequestParam(name = "id", required = true) Long id,
@RequestParam(name = "projectId", required = true) Long projectId,
@RequestParam(name = "startDate", required = false) String startDate,
@RequestParam(name = "endDate", required = false) String endDate,
@RequestParam(name = "orgNameOrCode", required = false) String orgNameOrCode,
@RequestParam(name = "accountName", required = false) String accountName,
@RequestParam(name = "pageNo", required = false) Integer pageNo,
@RequestParam(name = "pageSize", required = false) Integer pageSize);
@ApiOperation(value = "获取签到时间段", notes = "获取签到时间段")
@GetMapping("/remote/statisticsSign/group/getSignTime")
TrSignTime getSignTime(@RequestParam("getSignTime") Long signTimeId);
@GetMapping("/remote/statisticsSign/group/selectRecordMinTime")
Date selectRecordMinTime();
@GetMapping("/remote/statisticsSign/group/getAllResearchs")
List<TrSign> getAllResearchs(@RequestParam("startDate") String startDate, @RequestParam("endDate") String endDate);
/**
* 报表服务获取签到记录
* @param signTimeId
* @param startDate
* @param endDate
* @return
*/
@GetMapping("/remote/statisticsSign/group/getRecords")
List<StatisticsSignLearn> getRecords(@RequestParam("signTimeId") Long signTimeId, @RequestParam("startDate") String startDate, @RequestParam("endDate") String endDate);
}
package com.yizhi.sign.application.feign;
import com.baomidou.mybatisplus.plugins.Page;
import com.yizhi.sign.application.vo.domain.TrSignAccount;
import com.yizhi.sign.application.vo.*;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.Map;
/**
* 签到-学员端 <br>
* 〈〉
*
* @author phone
* @create 2018/4/12
* @since 1.0.0
*/
@FeignClient(name = "sign", contextId = "SignApiClient")
public interface SignApiClient {
/**
* 学员端二维码签到
* @param signIdVO
* @return
*/
@PostMapping(value = "/remote/api/sign/", produces="text/html;charset=UTF-8")
String sign(@RequestBody SignVO signVO);
/**
* 我的签到记录
* @param pageVO
* @return
*/
@PostMapping("/remote/api/sign/my/record/list")
Page<TrSignRecordVo> recordList(@RequestBody PageVO pageVO);
/**
* 获取签到总数量( PC 端 培训项目中培训统计的签到总数)
* @param trainingProjectId
* @return
*/
@PostMapping("/remote/api/sign/pc/count")
public Integer getPcSignTimeCount(@RequestParam("trainingProjectId") Long trainingProjectId);
@ApiOperation(value = "验证签到邀请码", notes = "验证签到邀请码", response = TrSignAccount.class)
@GetMapping("/remote/api/sign/checkCode")
public Map<String, Object> checkCode(
@ApiParam(name = "code", value = "项目签到邀请码", required = false) @RequestParam(name = "code", required = true) String code,
@ApiParam(name = "openId", value = "微信小程序openId 默认不传", required = false) @RequestParam(name = "openId", required = false) String openId,
@ApiParam(name = "accountId", value = "用户id 默认不传", required = false) @RequestParam(name = "accountId", required = false) Long accountId);
@ApiOperation(value = "验证用户身份", notes = "验证用户身份")
@PostMapping("/remote/api/sign/checkAccount")
public Map<String, Object> checkAccount(@RequestBody SignAccountParam param);
@ApiOperation(value = "小程序签到详情", notes = "小程序签到详情", response = ApiSignTimeVO.class)
@GetMapping("/remote/api/sign/signDetail")
public ApiSignTimeVO signDetail(
@ApiParam(name = "accountId", value = "用户id ", required = true) @RequestParam(name = "accountId", required = true) Long accountId,
@ApiParam(name = "code", value = "项目签到邀请码", required = true) @RequestParam(name = "code", required = true) String code,
@ApiParam(name = "trainingProjectId", value = "培训项目id ", required = false) @RequestParam(name = "trainingProjectId", required = false) Long trainingProjectId);
@ApiOperation(value = "小程序签到切换用户", notes = "小程序签到切换用户")
@GetMapping("/remote/api/sign/delRelation")
public String delRelation(
@ApiParam(name = "accountId", value = "用户id ", required = true) @RequestParam(name = "accountId", required = true) Long accountId,
@ApiParam(name = "code", value = "项目签到邀请码", required = true) @RequestParam(name = "code", required = true) String code,
@ApiParam(name = "openId", value = "微信小程序openId", required = true) @RequestParam(name = "openId", required = true) String openId);
@GetMapping("/remote/api/sign/insert")
public String insert(
@ApiParam(name = "accountId", value = "用户id ", required = true) @RequestParam(name = "accountId", required = true) Long accountId,
@ApiParam(name = "trainingProjectId", value = "项目id ", required = true) @RequestParam(name = "trainingProjectId", required = true) Long trainingProjectId,
@ApiParam(name = "signTimeId", value = "签到id ", required = true) @RequestParam(name = "signTimeId", required = true) Long signTimeId);
}
\ No newline at end of file
/**
* Copyright (C), 2015-2018, XXX有限公司
* FileName: SignManageClient
* Author: phone
* Date: 2018/4/9 16:59
* Description: 签到-管理端
* History:
* <author> <time> <version> <desc>
* 作者姓名 修改时间 版本号 描述
*/
package com.yizhi.sign.application.feign;
import com.yizhi.sign.application.vo.domain.TrSign;
import com.yizhi.sign.application.vo.SignIdVO;
import com.yizhi.sign.application.vo.SignQrcodeVO;
import com.yizhi.sign.application.vo.SignVO;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
/**
* 〈一句话功能简述〉<br>
* 〈签到-管理端〉
*
* @author phone
* @create 2018/4/9
* @since 1.0.0
*/
@FeignClient(name = "sign", contextId = "SignManageClient")
public interface SignManageClient {
/**
* 新建签到信息
* @param signVO
* @return
*/
@PostMapping(value = "/remote/manage/sign/insert")
public Long insert(@RequestBody SignVO signVO);
/**
* 获取签到信息
* @param signIdVO
* @return
*/
@PostMapping(value = "/remote/manage/sign/view")
public SignVO getSign(@RequestBody SignIdVO signIdVO);
/**
* 修改签到信息
* @param signVO
* @return
*/
@PostMapping("/remote/manage/sign/update")
public boolean update(@RequestBody SignVO signVO);
/**
* 删除签到信息
* @param signIdVO
* @return
*/
@PostMapping("/remote/manage/sign/delete")
public boolean deleteSignByProjectId(@RequestBody SignIdVO signIdVO);
/**
* 获取生成的二维码Url
* @param signIdVO
* @return
*/
@PostMapping("/remote/manage/sign/qrcode/get")
List<SignQrcodeVO> qrcode(@RequestBody SignIdVO signIdVO);
@ApiOperation("根据签到id获取签到")
@GetMapping("/remote/manage/sign/one/get")
TrSign getSign(
@RequestParam(name = "signId" )Long signId
);
@ApiOperation("根据签到时间段id获取签到")
@GetMapping("/remote/manage/sign/time/get")
TrSign getSignByTime(@RequestParam(name = "signTimeId" )Long signId);
}
\ No newline at end of file
/**
* Copyright (C), 2015-2018, XXX有限公司
* FileName: SignRecordClient
* Author: phone
* Date: 2018/4/4 17:16
* Description: 签到记录接口
* History:
* <author> <time> <version> <desc>
* 作者姓名 修改时间 版本号 描述
*/
package com.yizhi.sign.application.feign;
import com.yizhi.sign.application.vo.domain.TrSignRecord;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
/**
* 〈一句话功能简述〉<br>
* 〈签到记录接口〉
*
* @author fanchunhui
* @create 2018/4/4
* @since 1.0.0
*/
@FeignClient(name = "sign", contextId = "SignRecordApiClient")
public interface SignRecordApiClient {
/**
* 我的签到总数量
* @return
*/
@GetMapping("/remote/api/sign/record/count")
Integer selectSignRecordCountByAccountId(@RequestParam("accountId") Long accountId);
/**
* 获取签到完成数量( PC 端 学习统计签到 完成数量)
* @param trainingProjectId 培训项目ID
* @return
*/
@GetMapping("/remote/api/sign/record/pc/finishedCount")
public Integer selectCountByTrainingProjectId(@RequestParam("trainingProjectId") Long trainingProjectId,@RequestParam("accountId")Long accountId);
/**
*签到记录导出
* @param trainingProjectId
* @return
*/
@GetMapping("/remote/api/sign/record/export")
public String exportSignRecord(@RequestParam(name = "trainingProjectId") Long trainingProjectId);
@PostMapping("/remote/api/sign/record/insert")
public boolean insertSignRecordList(@RequestBody List<TrSignRecord> signRecordList);
}
package com.yizhi.sign.application.vo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@Api(tags = "ApiSignTimeVO", description = "签到详情VO")
public class ApiSignTimeVO {
@ApiModelProperty(value = "主键id")
private Long id;
@ApiModelProperty(value = "有效签到时间区间(日期)左值,格式:yyyy-mm-dd HH:mm:ss")
private String startTime;
@ApiModelProperty(value = "有效签到时间区间(日期)右值,格式:yyyy-mm-dd HH:mm:ss")
private String endTime;
@ApiModelProperty(value = "签到地点")
private String address;
@ApiModelProperty(value = "签到范围")
private String range;
@ApiModelProperty(value = "签到积分")
private Integer point;
@ApiModelProperty(value = "培训项目id")
private Long trainingProjectId;
@ApiModelProperty(value = "培训项目名称")
private String name;
@ApiModelProperty(value = "签到状态")
private Integer state;
@ApiModelProperty(value = "签到时间")
private String signDate;
@ApiModelProperty(value = "经度")
private Double longitude;
@ApiModelProperty(value = "纬度")
private Double latitude;
@ApiModelProperty(value = "站点id")
private Long siteId;
}
package com.yizhi.sign.application.vo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* @author Ding
* @className ExportSignRecordVO
* @description TODO
* @date 2019/6/6
**/
@Data
@Api(tags = "ExportSignRecordVO", description = "签到记录导出VO")
public class ExportSignRecordVO {
@ApiModelProperty(value = "学员ID")
private Long accountId;
@ApiModelProperty(value = "项目名称")
private String tainingProjectName;
@ApiModelProperty(value = "开始时间")
private Date startTime;
@ApiModelProperty(value = "结束时间")
private Date endTime;
@ApiModelProperty(value = "用户名")
private String accountName;
@ApiModelProperty(value = "姓名")
private String accountFullName;
@ApiModelProperty(value = "签到状态,0未签到,1已签到,2补签")
private Integer signState;
@ApiModelProperty(value = "签到时间")
private Date signTime;
@ApiModelProperty(value = "所属部门")
private String orgName;
@ApiModelProperty(value = "用户状态")
private Integer accountState;
}
/**
* Copyright (C), 2015-2018, XXX有限公司
* FileName: PageVO
* Author: phone
* Date: 2018/4/12 16:28
* Description: 分页VO
* History:
* <author> <time> <version> <desc>
* 作者姓名 修改时间 版本号 描述
*/
package com.yizhi.sign.application.vo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 〈一句话功能简述〉<br>
* 〈分页VO〉
*
* @author phone
* @create 2018/4/12
* @since 1.0.0
*/
@Data
@Api(tags = "PageVO", description = "分页查询参数")
public class PageVO {
@ApiModelProperty(value = "学员ID")
private Long accountId;
@ApiModelProperty(value = "页码")
Integer pageNo;
@ApiModelProperty(value = "每页显示数")
Integer pageSize;
@ApiModelProperty(value = "年份")
String year;
@ApiModelProperty(value = "月份")
String month;
}
\ No newline at end of file
package com.yizhi.sign.application.vo;
import lombok.Data;
@Data
public class SignAccountParam {
private String name;
private String pwd;
private String code;
private String openId;
}
/**
* Copyright (C), 2015-2018, XXX有限公司
* FileName: SignIdVO
* Author: phone
* Date: 2018/4/9 17:11
* Description: Post参数VO
* History:
* <author> <time> <version> <desc>
* 作者姓名 修改时间 版本号 描述
*/
package com.yizhi.sign.application.vo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 〈一句话功能简述〉<br>
* 〈Post参数VO〉
*
* @author phone
* @create 2018/4/9
* @since 1.0.0
*/
@Data
@Api(tags = "SignIdVO", description = "主键")
public class SignIdVO {
@ApiModelProperty(value = "主键id")
Long id;
@ApiModelProperty(value = "企业ID")
Long companyId;
@ApiModelProperty(value = "站点ID")
Long siteId;
@ApiModelProperty(value = "组织ID")
Long orgId;
@ApiModelProperty(value = "学员名ID")
Long accountId;
@ApiModelProperty(value = "学员名")
String accountName;
}
\ No newline at end of file
package com.yizhi.sign.application.vo;
import java.util.Date;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class SignQrcodeVO {
private Long id;
private Date startTime;
private Date endTime;
@ApiModelProperty(value = "是否开启定位(0:否,1:是),默认否")
private Integer enablePosition;
@ApiModelProperty(value = "签到地点")
private String address;
@ApiModelProperty(value = "签到范围")
private String range;
private String code;
@ApiModelProperty(value = "签到积分")
private Integer point;
}
package com.yizhi.sign.application.vo;
import java.util.Date;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "线下签到导入行对象", description = "线下签到导入行对象")
public class SignRecordImportVO {
@ApiModelProperty("用户名")
private String name;
@ApiModelProperty("用户Id")
private Long accountId;
@ApiModelProperty("部门id")
private Long orgId;
@ApiModelProperty("部门名称")
private String orgName;
@ApiModelProperty("项目id")
private Long trainProjectId;
@ApiModelProperty("项目名称")
private String trainProjectName;
@ApiModelProperty(value = "有效签到时间区间左值")
private Date startTime;
@ApiModelProperty(value = "有效签到时间区间右值")
private Date endTime;
@ApiModelProperty("签到时间")
private Date signTime;
@ApiModelProperty("行数")
private Integer rowNumber;
@ApiModelProperty("是否签到")
private String isSign;
}
package com.yizhi.sign.application.vo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* Created by phone on 2018/3/9.
*/
@Data
@Api(tags = "SignRemindVO", description = "签到提醒表VO,一个 sign_time 对应一个 sign_remind")
public class SignRemindVO {
@ApiModelProperty(value = "主键id")
private Long id;
@ApiModelProperty(value = "提醒时间")
private Integer remindTime;
}
package com.yizhi.sign.application.vo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* Created by phone on 2018/3/8.
*/
@Data
@Api(tags = "SignTimeVO", description = "签到时间段VO,一个 sign 对应多个 sign_time")
public class SignTimeVO {
@ApiModelProperty(value = "主键id(为空新增,不为空修改)")
private Long id;
@ApiModelProperty(value = "有效签到时间区间(日期)左值,格式:2018-05-17")
private String startTime;
@ApiModelProperty(value = "有效签到时间区间(小时)左值")
private String startHour;
@ApiModelProperty(value = "有效签到时间区间(分钟)左值")
private String startMinute;
@ApiModelProperty(value = "有效签到时间区间(日期)右值,格式:2018-05-17")
private String endTime;
@ApiModelProperty(value = "有效签到时间区间(小时)右值")
private String endHour;
@ApiModelProperty(value = "有效签到时间区间(分钟)右值")
private String endMinute;
@ApiModelProperty(value = "签到地点")
private String address;
@ApiModelProperty(value = "签到范围")
private String range;
@ApiModelProperty(value = "签到积分")
private Integer point;
@ApiModelProperty(value = "经度")
private Double longitude;
@ApiModelProperty(value = "纬度")
private Double latitude;
}
package com.yizhi.sign.application.vo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* <p>
* 签到主体表,入口在培训项目
* </p>
*
* @author fanchunhui123
* @since 2018-03-07
*/
@Data
@Api(tags = "SignVO", description = "签到VO类,入口在培训项目")
public class SignVO {
@ApiModelProperty(value = "主键id")
private Long id;
@ApiModelProperty(value = "学员ID")
private Long accountId;
@ApiModelProperty(value = "培训项目id")
private Long trainingProjectId;
@ApiModelProperty(value = "签到名称")
private String name;
@ApiModelProperty(value = "二维码,0:生成一张,1:按时间段生成多张")
private Integer type;
@ApiModelProperty(value = "是否开启补签(0:否,1:是),默认否")
private Integer enableRetroactive;
@ApiModelProperty(value = "是否消息提醒(分钟),0不提醒")
private Integer remindTime;
@ApiModelProperty(value = "是否开启邮件提醒(0:否,1:是),默认否。")
private Integer enableRemindMail;
@ApiModelProperty(value = "是否开启站内提醒(0:否,1:是),默认否。")
private Integer enableRemindNote;
@ApiModelProperty(value = "签到提醒模版ID。")
private Long mailRemindTemplateId;
@ApiModelProperty(value = "提醒内容")
private String remindContent;
@ApiModelProperty(value = "签到时间列表")
private List<SignTimeVO> trSignTimeVOs;
@ApiModelProperty(value = "签到途径")
private Integer signType;
@ApiModelProperty(value = "签到时间段")
private Long signTimeId;
@ApiModelProperty(value = "企业ID")
Long companyId;
@ApiModelProperty(value = "站点ID")
Long siteId;
@ApiModelProperty(value = "组织ID")
Long orgId;
@ApiModelProperty(value = "学员名")
String accountName;
@ApiModelProperty(value = "是否开启定位(0:否,1:是),默认否")
private Integer enablePosition;
}
package com.yizhi.sign.application.vo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* <p>
* 签到记录表
* </p>
*
* @author fanchunhui123
* @since 2018-03-07
*/
@Data
@Api(tags = "TrSignRecordVo", description = "签到记录Vo")
public class TrSignRecordVo {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "培训项目ID")
private Long trainingProjectId;
@ApiModelProperty(value = "培训项目name")
private String trainingProjectName;
@ApiModelProperty(value = "月份")
private String month;
@ApiModelProperty(value = "签到时间")
private String signDate;
@ApiModelProperty(value = "签到地点")
private String address;
}
/**
*
* 功能描述:
* @Package: com.yizhi.application.domain
* @author: xingliang
* @date: 2018年3月9日 下午3:32:03
*/
package com.yizhi.sign.application.vo.domain;
/**
*
* @ClassName: SignRecordVO.java
* @Description:
*
* @author: xingliang
* @date: 2018年3月9日 下午3:32:03
*
* 2018年3月9日 xingliang
*/
public class SignRecordVO {
private String trainingProjectName;
private String signTime;
/**
* @return the trainingProjectName
*/
public String getTrainingProjectName() {
return trainingProjectName;
}
/**
* @param trainingProjectName the trainingProjectName to set
*/
public void setTrainingProjectName(String trainingProjectName) {
this.trainingProjectName = trainingProjectName;
}
/**
* @return the signTime
*/
public String getSignTime() {
return signTime;
}
/**
* @param signTime the signTime to set
*/
public void setSignTime(String signTime) {
this.signTime = signTime;
}
}
package com.yizhi.sign.application.vo.domain;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
@Data
@Api(tags = "StatisticsSign", description = "签到统计表")
@TableName("statistics_sign_metadata")
public class StatisticsSign {
@ApiModelProperty(value = "自增")
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@ApiModelProperty(value = "签到id")
@TableField("sign_id")
private Long signId;
@ApiModelProperty(value = "签到时间段id")
@TableField("sign_time_id")
private Long signTimeId;
@ApiModelProperty(value = "培训项目id")
@TableField("trainning_project_id")
private Long trainningProjectId;
@ApiModelProperty(value = "签到编号")
@TableField("sign_no")
private String signNo;
@ApiModelProperty(value = "签到名称")
@TableField("sign_name")
private String signName;
@ApiModelProperty(value = "培训项目名称")
@TableField("trainning_project_name")
private String trainningProjectName;
@ApiModelProperty(value = "签到开始时间")
@TableField("sign_start_time")
private Date signStartTime;
@ApiModelProperty(value = "签到结束时间")
@TableField("sign_end_time")
private Date signEndTime;
@ApiModelProperty(value = "创建签到的公司Id")
@TableField("sign_company_id")
private Long signCompanyId;
@ApiModelProperty(value = "创建签到的组织id")
@TableField("sign_org_id")
private Long signOrgId;
@ApiModelProperty(value = "创建签到的站点id")
@TableField("sign_site_id")
private Long signSiteId;
@ApiModelProperty(value = "签到创建时间")
@TableField("sign_create_time")
private Date signCreateTime;
@ApiModelProperty(value = "项目创建时间")
@TableField("project_create_time")
private Date projectCreateTime;
@ApiModelProperty(value = "用户id")
@TableField("account_id")
private Long accountId;
@ApiModelProperty(value = "用户编号")
@TableField("account_work_num")
private String accountWorkNum;
@ApiModelProperty(value = "用户名")
@TableField("account_name")
private String accountName;
@ApiModelProperty(value = "用户姓名")
@TableField("account_fullname")
private String accountFullname;
@ApiModelProperty(value = "用户状态")
@TableField("account_state")
private Integer accountState;
@ApiModelProperty(value = "用户公司id")
@TableField("account_company_id")
private Long accountCompanyId;
@ApiModelProperty(value = "用户组织id")
@TableField("account_org_id")
private Long accountOrgId;
@ApiModelProperty(value = "用户站点id")
@TableField("account_site_id")
private Long accountSiteId;
@ApiModelProperty(value = "签到时间")
@TableField("sign_time")
private Date signTime;
@ApiModelProperty(value = "用户组织名称")
@TableField("org_name")
private String orgName;
@ApiModelProperty(value = "用户所有父类组织")
@TableField("org_parent_names")
private String orgParentNames;
@ApiModelProperty(value = "应签到")
@TableField("can_state")
private Integer canState;
@ApiModelProperty(value = "实际签到")
@TableField("join_state")
private Integer joinState;
@ApiModelProperty(value = "应签到人数")
@TableField(exist = false)
private Integer canStateCount;
@ApiModelProperty(value = "实际签到人数")
@TableField(exist = false)
private Integer joinStateCount;
@ApiModelProperty(value = "未签到人数")
@TableField(exist = false)
private Integer notSignCount;
@ApiModelProperty(value = "签到地点")
@TableField("address")
private String address;
@ApiModelProperty(value = "签到范围")
@TableField("range")
private String range;
}
package com.yizhi.sign.application.vo.domain;
import com.baomidou.mybatisplus.annotations.TableName;
import io.swagger.annotations.Api;
import lombok.Data;
@Data
@Api(tags = "StatisticsSignLearn", description = "签到明细")
@TableName("statistics_sign_learn_metadata")
public class StatisticsSignLearn extends StatisticsSign{
private static final long serialVersionUID = -1170397195805248674L;
}
package com.yizhi.sign.application.vo.domain;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.FieldFill;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* <p>
* 签到主体表,入口在培训项目
* </p>
*
* @author fanchunhui123
* @since 2018-03-07
*/
@Data
@Api(tags = "TrSign", description = "签到主体表,入口在培训项目")
@TableName("tr_sign")
public class TrSign extends Model<TrSign> {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键id")
private Long id;
@ApiModelProperty(value = "培训项目id")
@TableField("training_project_id")
private Long trainingProjectId;
@ApiModelProperty(value = "签到名称")
private String name;
@ApiModelProperty(value = "0:生成一张,1:按时间段生成多张")
private Integer type;
@ApiModelProperty(value = "是否消息提醒(分钟),0不提醒")
@TableField("remind_time")
private Integer remindTime;
@ApiModelProperty(value = "是否开启补签(0:否,1:是),默认否")
@TableField("enable_retroactive")
private Integer enableRetroactive;
@ApiModelProperty(value = "是否开启邮件提醒(0:否,1:是),默认否。")
@TableField("enable_remind_mail")
private Integer enableRemindMail;
@ApiModelProperty(value = "是否开启短信提醒(0:否,1:是),默认否。")
@TableField("enable_remind_note")
private Integer enableRemindNote;
@ApiModelProperty(value = "是否开启app推送签到提醒,默认0")
@TableField("enable_remind_app")
private String enableRemindApp;
@ApiModelProperty(value = "邮件模板")
@TableField("mail_remind_template_id")
private Long mailRemindTemplateId;
@ApiModelProperty(value = "app消息推送模板")
@TableField("app_remind_template_id")
private Long appRemindTemplateId;
@ApiModelProperty(value = "提醒内容")
@TableField("remind_content")
private String remindContent;
@ApiModelProperty(value = "企业id")
@TableField("company_id")
private Long companyId;
@ApiModelProperty(value = "站点id")
@TableField("site_id")
private Long siteId;
@TableField("org_id")
private Long orgId;
@ApiModelProperty(value = "创建者id")
@TableField(value = "create_by_id", fill = FieldFill.INSERT)
private Long createById;
@ApiModelProperty(value = "创建者名称")
@TableField(value = "create_by_name", fill = FieldFill.INSERT)
private String createByName;
@ApiModelProperty(value = "创建时间")
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
@ApiModelProperty(value = "更新者id")
@TableField(value = "update_by_id", fill = FieldFill.INSERT)
private Long updateById;
@ApiModelProperty(value = "修改者名称")
@TableField(value = "update_by_name", fill = FieldFill.INSERT)
private String updateByName;
@ApiModelProperty(value = "修改时间")
@TableField(value = "update_time", fill = FieldFill.INSERT)
private Date updateTime;
@ApiModelProperty(value = "是否删除:0.未删除 1.已删除")
private Integer state;
@ApiModelProperty(value = "可见范围")
@TableField(exist = false)
private Integer visibleRange;
@ApiModelProperty("培训项目名称")
@TableField(exist = false)
private String trainningProjectName;
@ApiModelProperty("培训项目创建时间")
@TableField(exist = false)
private Date projectCreateTime;
@ApiModelProperty("签到时间段id")
@TableField(exist = false)
private Long signTimeId;
@ApiModelProperty("某个签到的开始时间")
@TableField(exist = false)
private Date signStartDate;
@ApiModelProperty("某个签到的结束时间")
@TableField(exist = false)
private Date signEndDate;
@ApiModelProperty(value = "是否开启定位(0:否,1:是),默认否")
@TableField("enable_position")
private Integer enablePosition;
@ApiModelProperty(value = "签到地点")
@TableField("address")
private String address;
@ApiModelProperty(value = "签到范围")
@TableField("range")
private String range;
@Override
protected Serializable pkVal() {
return this.id;
}
}
package com.yizhi.sign.application.vo.domain;
import java.util.Date;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.FieldFill;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@Api(tags = "TrSignAccount", description = "小程序签到绑定关系表")
@TableName("tr_sign_account")
public class TrSignAccount {
@ApiModelProperty(value = "主键id")
private Long id;
@ApiModelProperty(value = "用户id")
@TableField(value = "account_id")
private Long accountId;
@ApiModelProperty(value = "小程序openId")
@TableField(value = "open_id")
private String openId;
@ApiModelProperty(value = "是否解绑(0:否,1:是) 默认0")
private Integer deleted;
@ApiModelProperty(value = "签到邀请码")
private String code;
@ApiModelProperty(value = "创建者id")
@TableField(value = "create_by_id", fill = FieldFill.INSERT)
private Long createById;
@ApiModelProperty(value = "姓名")
@TableField(value = "full_name", fill = FieldFill.INSERT)
private String fullName;
@ApiModelProperty(value = "创建者名称")
@TableField(value = "create_by_name", fill = FieldFill.INSERT)
private String createByName;
@ApiModelProperty(value = "创建时间")
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
@ApiModelProperty(value = "更新者id")
@TableField(value = "update_by_id", fill = FieldFill.INSERT)
private Long updateById;
@ApiModelProperty(value = "修改者名称")
@TableField(value = "update_by_name", fill = FieldFill.INSERT)
private String updateByName;
@ApiModelProperty(value = "修改时间")
@TableField(value = "update_time", fill = FieldFill.INSERT)
private Date updateTime;
}
package com.yizhi.sign.application.vo.domain;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableName;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* <p>
* 签到记录表
* </p>
*
* @author fanchunhui123
* @since 2018-03-07
*/
@Data
@Api(tags = "TrSignRecord", description = "签到记录表")
@TableName("tr_sign_record")
public class TrSignRecord extends Model<TrSignRecord> {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键id")
private Long id;
@ApiModelProperty(value = "签到id")
@TableField("sign_id")
private Long signId;
@ApiModelProperty(value = "培训项目id")
@TableField("training_project_id")
private Long trainingProjectId;
@ApiModelProperty(value = "账号id")
@TableField("account_id")
private Long accountId;
@ApiModelProperty(value = "签到时间")
@TableField("sign_time")
private Date signTime;
@ApiModelProperty(value = "签到状态:0:正常签到,1:补签。默认0。")
@TableField("sign_status")
private Integer signStatus;
@ApiModelProperty(value = "签到类型:0:平台签到,1:自定义项目。默认0。")
@TableField("type")
private Integer type;
@ApiModelProperty(value = "创建时间")
@TableField("create_time")
private Date createTime;
@ApiModelProperty(value = "签到地点")
@TableField("address")
private String address;
@Override
protected Serializable pkVal() {
return this.id;
}
}
package com.yizhi.sign.application.vo.domain;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.FieldFill;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* <p>
* 签到提醒时间,一个sign_time对应一个sign_time
* </p>
*
* @author fanchunhui123
* @since 2018-03-07
*/
@Data
@Api(tags = "TrSignRemind", description = "签到提醒时间,一个sign_time对应一个sign_time")
@TableName("tr_sign_remind")
public class TrSignRemind extends Model<TrSignRemind> {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键id")
private Long id;
@ApiModelProperty(value = "签到时间段id")
@TableField("sign_time_id")
private Long signTimeId;
@ApiModelProperty(value = "提醒时间")
@TableField("remind_time")
private Date remindTime;
@ApiModelProperty(value = "创建者id")
@TableField(value = "create_by_id", fill = FieldFill.INSERT)
private Long createById;
@ApiModelProperty(value = "创建者名称")
@TableField(value = "create_by_name", fill = FieldFill.INSERT)
private String createByName;
@ApiModelProperty(value = "创建时间")
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
@ApiModelProperty(value = "更新者id")
@TableField(value = "update_by_id", fill = FieldFill.INSERT)
private Long updateById;
@ApiModelProperty(value = "修改者名称")
@TableField(value = "update_by_name", fill = FieldFill.INSERT)
private String updateByName;
@ApiModelProperty(value = "修改时间")
@TableField(value = "update_time", fill = FieldFill.INSERT)
private Date updateTime;
@Override
protected Serializable pkVal() {
return this.id;
}
}
package com.yizhi.sign.application.vo.domain;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.FieldFill;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* <p>
* 签到时间段,一个 sign 对应多个 sign_time
* </p>
*
* @author fanchunhui123
* @since 2018-03-07
*/
@Data
@Api(tags = "TrSignTime", description = "签到时间段,一个 sign 对应多个 sign_time")
@TableName("tr_sign_time")
public class TrSignTime extends Model<TrSignTime> {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键id")
private Long id;
@ApiModelProperty(value = "冗余项目id")
@TableField("training_project_id")
private Long trainingProjectId;
@ApiModelProperty(value = "签名id")
@TableField("sign_id")
private Long signId;
@ApiModelProperty(value = "有效签到时间区间左值")
@TableField("start_time")
private Date startTime;
@ApiModelProperty(value = "有效签到时间区间右值")
@TableField("end_time")
private Date endTime;
@ApiModelProperty(value = "是否停用(0:否,1:是) 默认0")
private Integer deleted;
@ApiModelProperty(value = "创建者id")
@TableField(value = "create_by_id", fill = FieldFill.INSERT)
private Long createById;
@ApiModelProperty(value = "创建者名称")
@TableField(value = "create_by_name", fill = FieldFill.INSERT)
private String createByName;
@ApiModelProperty(value = "创建时间")
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
@ApiModelProperty(value = "更新者id")
@TableField(value = "update_by_id", fill = FieldFill.INSERT)
private Long updateById;
@ApiModelProperty(value = "修改者名称")
@TableField(value = "update_by_name", fill = FieldFill.INSERT)
private String updateByName;
@ApiModelProperty(value = "修改时间")
@TableField(value = "update_time", fill = FieldFill.INSERT)
private Date updateTime;
@ApiModelProperty(value = "是否开启定位(0:否,1:是),默认否")
@TableField("enable_position")
private Integer enablePosition;
@ApiModelProperty(value = "签到地点")
@TableField("address")
private String address;
@ApiModelProperty(value = "签到范围")
@TableField("range")
private String range;
@ApiModelProperty(value = "签到积分")
@TableField("point")
private Integer point;
@ApiModelProperty(value = "邀请码")
@TableField("code")
private String code;
@ApiModelProperty(value = "经度")
@TableField("longitude")
private Double longitude;
@ApiModelProperty(value = "纬度")
@TableField("latitude")
private Double latitude;
@Override
protected Serializable pkVal() {
return this.id;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>sign-project</artifactId>
<groupId>com.yizhi</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.yizhi</groupId>
<artifactId>cloud-sign</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.yizhi</groupId>
<artifactId>cloud-sign-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.yizhi</groupId>
<artifactId>cloud-training-project-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.yizhi</groupId>
<artifactId>cloud-newMessage-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.yizhi</groupId>
<artifactId>cloud-system-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.yizhi</groupId>
<artifactId>cloud-point-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.yizhi</groupId>
<artifactId>cloud-core</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.yizhi</groupId>
<artifactId>cloud-orm</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.yizhi</groupId>
<artifactId>cloud-util</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.yizhi</groupId>
<artifactId>cloud-common-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- deploy 时跳过该模块 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
</project>
package com.yizhi.application;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScans;
/**
* @Author: shengchenglong
* @Date: 2018/3/6 14:29
*/
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients(basePackages = {"com.yizhi"})
@ComponentScan(basePackages = {"com.yizhi"})
public class SignApplication {
public static void main(String[] args) {
SpringApplication.run(SignApplication.class, args);
}
}
package com.yizhi.application;
import static com.google.common.base.Predicates.or;
import static springfox.documentation.builders.PathSelectors.regex;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.ResponseEntity;
import org.springframework.web.context.request.async.DeferredResult;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.groupName("项目签到服务")
.genericModelSubstitutes(DeferredResult.class)
.genericModelSubstitutes(ResponseEntity.class)
.useDefaultResponseMessages(false)
.forCodeGeneration(true)
.pathMapping("/")
.select()
.paths(or(regex("/api.*"),regex("/manage.*"),regex("/remote.*")))
.build()
.apiInfo(apiInfo());
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("项目签到服务")
.version("1.0")//版本
.build();
}
}
package com.yizhi.application.controller.api;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.yizhi.system.application.vo.AccountVO;
import com.yizhi.training.application.vo.domain.TpAuthorizationRangeVo;
import com.yizhi.training.application.vo.domain.TrainingProjectVo;
import com.yizhi.point.application.feign.PointRedisFeignClients;
import com.yizhi.application.orm.id.IdGenerator;
import com.yizhi.application.service.SignAccountService;
import com.yizhi.application.service.SignRecordService;
import com.yizhi.application.service.SignService;
import com.yizhi.application.service.SignTimeService;
import com.yizhi.system.application.vo.domain.Account;
import com.yizhi.system.application.system.remote.AccountClient;
import com.yizhi.core.application.task.TaskExecutor;
import com.yizhi.util.application.encrypt.ShaEncrypt;
import com.yizhi.util.application.json.JsonUtil;
import com.yizhi.application.domain.TrSignAccount;
import com.yizhi.application.domain.TrSignTime;
import com.yizhi.training.application.feign.TrainingProjectClient;
import com.yizhi.sign.application.vo.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.*;
/**
* <p>
* 签到主体表,入口在培训项目 前端控制器 学员端
* </p>
*
* @author fanchunhui123
* @since 2018-03-07
*/
@Api(tags = "签到-学员端", description = "签到-学员端")
@RestController
@RequestMapping("/api/sign")
public class SignController {
private static final Logger LOG = LoggerFactory.getLogger(SignController.class);
@Autowired
private SignService signService;
@Autowired
private TaskExecutor taskExecutor;
@Autowired
private SignTimeService signTimeService;
@Autowired
private SignAccountService signAccountService;
@Autowired
private TrainingProjectClient trainingProjectClient;
@Autowired
private AccountClient accountClient;
@Autowired
IdGenerator idGenerator;
@Autowired
private SignRecordService signRecordService;
@Autowired
private PointRedisFeignClients pointRedisFeignClients;
@Autowired
private AmqpTemplate amqpTemplate;
/**
* 学员端二维码签到
*
* @param signVO
* @return
*/
@PostMapping(value = "/", produces = "text/html;charset=UTF-8")
public String sign(@RequestBody SignVO signVO) {
try {
if (null == signVO) {
return "不存在此签到";
}
if (null == signVO.getTrainingProjectId() || null == signVO.getSignTimeId()
|| null == signVO.getAccountId()) {
return "不存在此签到";
}
// 查询是否签到
String result = signService.sign(signVO.getAccountId(), String.valueOf(signVO.getTrainingProjectId()),
String.valueOf(signVO.getSignTimeId()), signVO.getSignType());
LOG.info(result);
return result;
} catch (Exception e) {
LOG.error("", e);
return "不存在此签到";
}
}
/**
* 我的签到记录
*
* @param pageVO
* @return
*/
@PostMapping("/my/record/list")
public Page<TrSignRecordVo> recordList(@RequestBody PageVO pageVO) {
try {
// TODO 查询签到端
// accountId 学员账号id
Long accountId = pageVO.getAccountId();
String year = pageVO.getYear();
Calendar calendar = null;
// if (StringUtils.isBlank(year)) {
// calendar = Calendar.getInstance();
// calendar.setTime(new Date());
// year = String.valueOf(calendar.get(Calendar.YEAR));
// }
// else {
// year = year.trim();
// }
if (StringUtils.isNotBlank(year)) {
year = year.trim();
}
String month = pageVO.getMonth();
if (!StringUtils.isBlank(month)) {
month = month.trim();
}
Integer pageNo = pageVO.getPageNo();
Integer pageSize = pageVO.getPageSize();
if (null == pageNo || pageNo == 0) {
pageNo = 1;
}
if (null == pageSize) {
pageSize = 10;
}
Page<TrSignRecordVo> page = signService.selectSignRecordListByAccountIdAndMonth(accountId, year, month,
pageNo, pageSize);
/*
* Map<String, Integer> pageMap = new HashMap<String, Integer>();
* pageMap.put("pageNo", pageVO.getPageNo()); pageMap.put("pageSize",
* pageVO.getPageSize()); pageMap.put("pageTotal", page.getTotal());
*
* Map<String, Object> resap = new HashMap<String, Object>(); resap.put("list",
* page.getRecords()); resap.put("page", pageMap);
*/
return page;
} catch (Exception e) {
LOG.error("", e);
return null;
}
}
/********************************************************************
* PC 端
************************************************************************/
/**
* 获取签到总数量( PC 端 培训项目中培训统计的签到总数)
*
* @param trainingProjectId
* @return
*/
@PostMapping("/pc/count")
public Integer getPcSignTimeCount(@RequestParam("trainingProjectId") Long trainingProjectId) {
Integer count = signService.getPcSignTimeCount(trainingProjectId);
return count;
}
@ApiOperation(value = "验证签到邀请码", notes = "验证签到邀请码", response = TrSignAccount.class)
@GetMapping("/checkCode")
public Map<String, Object> checkCode(
@ApiParam(name = "code", value = "项目签到邀请码", required = false) @RequestParam(name = "code", required = true) String code,
@ApiParam(name = "openId", value = "微信小程序openId 默认不传", required = false) @RequestParam(name = "openId", required = false) String openId,
@ApiParam(name = "accountId", value = "用户id 默认不传", required = false) @RequestParam(name = "accountId", required = false) Long accountId) {
Map<String, Object> map = new HashMap<String, Object>();
String result = "";
TrSignTime signTime = new TrSignTime();
signTime.setCode(code);
signTime.setDeleted(0);
TrSignTime one = signTimeService.selectOne(new EntityWrapper<TrSignTime>(signTime));
if (one != null) {
Date endTime = one.getEndTime();
long day = (System.currentTimeMillis() - endTime.getTime()) / (60 * 60 * 24 * 1000);
if ((System.currentTimeMillis() - endTime.getTime()) > 0 && day >= 0 && day <= 7) {
result = "签到已过期";
map.put("error", result);
return map;
}
if (day > 7) {
result = "无效邀请码,请重新输入";
map.put("error", result);
return map;
}
TrSignAccount account = new TrSignAccount();
account.setCode(code);
if (openId != null) {
account.setOpenId(openId);
}
if (accountId != null) {
account.setAccountId(accountId);
}
account.setDeleted(0);
TrSignAccount signAccount = signAccountService.selectOne(new EntityWrapper<TrSignAccount>(account));
if (signAccount != null) {
map.put("success", JsonUtil.object2Json(signAccount));
return map;
} else {
return map;
}
}
result = "无效邀请码,请重新输入";
map.put("error", result);
return map;
}
@ApiOperation(value = "验证用户身份", notes = "验证用户身份", response = Account.class)
@PostMapping("/checkAccount")
public Map<String, Object> checkAccount(@RequestBody SignAccountParam param) {
Integer result = 0;
String error = "";
Map<String, Object> map = new HashMap<String, Object>();
Date date = new Date();
TrSignTime signTime = new TrSignTime();
signTime.setCode(param.getCode());
signTime.setDeleted(0);
TrSignTime one = signTimeService.selectOne(new EntityWrapper<TrSignTime>(signTime));
if (one != null) {
Date endTime = one.getEndTime();
if (date.after(endTime)) {
error = "签到已过期";
map.put("error", error);
return map;
}
Long tpId = one.getTrainingProjectId();
TrainingProjectVo tProject = trainingProjectClient.getOne(tpId);
if (tProject == null) {
LOG.error(tpId + "培训项目不存在!!!");
error = "培训项目不存在";
map.put("error", error);
return map;
}
LOG.info("返回培训项目对象实体" + tProject.toString());
Long companyId = tProject.getCompanyId();
Account user = accountClient.findAccountByName(param.getName(), companyId);
if (user == null) {
LOG.error(param.getName() + "用户不存在");
map.put("error", "账号或密码输入错误!");
return map;
}
if (!ShaEncrypt.comparePassword(param.getPwd(), user.getPassword())) {
LOG.info("用户密码错误,加密密码=" + user.getPassword() + "输入密码=" + param.getPwd());
map.put("error", "账号或密码输入错误!");
return map;
}
if (!user.getEnabled() || user.getLocked()) {
// 账号未启用或者锁定
map.put("error", "账号或密码输入错误!");
return map;
// 前面时间大于后面时间==1
} else if (user.getExpiredType() == 2 && user.getEndTime().compareTo(new Date()) <= 0) {
// 账号已过期
map.put("error", "账号或密码输入错误!");
return map;
} else if (user.getExpiredType() == 3 && user.getExpiredTime().compareTo(new Date()) <= 0) {
map.put("error", "账号或密码输入错误!");
return map;
}
Integer range = tProject.getVisibleRange();
if (range == 1) {
result = 1;
} else if (range == 0) {
List<Long> accountIds = new ArrayList<>();
List<TpAuthorizationRangeVo> visibleRanges = trainingProjectClient.VisibleRange(tpId);
for (TpAuthorizationRangeVo visibleRange : visibleRanges) {
if (2 == visibleRange.getType()) {
accountIds.add(visibleRange.getRelationId());
} else {
List<AccountVO> list = accountClient.findByOrgId(visibleRange.getRelationId(), companyId);
List<Long> ids = new ArrayList<Long>();
if (CollectionUtils.isNotEmpty(list)) {
for (AccountVO vo : list) {
ids.add(vo.getId());
}
}
if (CollectionUtils.isNotEmpty(ids)) {
accountIds.addAll(ids);
}
}
}
if (CollectionUtils.isEmpty(accountIds)) {
error = "您没有权限";
map.put("error", error);
return map;
}
result = accountIds.contains(user.getId()) ? 1 : 0;
}
if (result.equals(0)) {
error = "您没有权限";
map.put("error", error);
return map;
}
TrSignAccount signAccount = new TrSignAccount();
signAccount.setId(idGenerator.generate());
signAccount.setAccountId(user.getId());
signAccount.setCode(param.getCode());
signAccount.setOpenId(param.getOpenId());
signAccount.setDeleted(0);
signAccount.setFullName(user.getFullName());
signAccount.setCreateById(user.getId());
signAccount.setCreateByName(user.getName());
signAccount.setCreateTime(date);
signAccountService.insert(signAccount);
map.put("success", JsonUtil.object2Json(user));
return map;
}
LOG.error(param.getCode() + "无效邀请码");
error = "无效邀请码,请重新输入";
map.put("error", error);
return map;
}
@ApiOperation(value = "小程序签到详情", notes = "小程序签到详情", response = ApiSignTimeVO.class)
@GetMapping("/signDetail")
public ApiSignTimeVO signDetail(
@ApiParam(name = "accountId", value = "用户id ", required = true) @RequestParam(name = "accountId", required = true) Long accountId,
@ApiParam(name = "code", value = "项目签到邀请码", required = true) @RequestParam(name = "code", required = true) String code,
@ApiParam(name = "trainingProjectId", value = "培训项目id ", required = false) @RequestParam(name = "trainingProjectId", required = false) Long trainingProjectId) {
ApiSignTimeVO vo = signService.getSignTimeDeatil(accountId, code, trainingProjectId);
return vo;
}
@ApiOperation(value = "小程序签到切换用户", notes = "小程序签到切换用户")
@GetMapping("/delRelation")
public String delRelation(
@ApiParam(name = "accountId", value = "用户id ", required = true) @RequestParam(name = "accountId", required = true) Long accountId,
@ApiParam(name = "code", value = "项目签到邀请码", required = true) @RequestParam(name = "code", required = true) String code,
@ApiParam(name = "openId", value = "微信小程序openId", required = true) @RequestParam(name = "openId", required = true) String openId) {
TrSignAccount signAccount = new TrSignAccount();
signAccount.setAccountId(accountId);
signAccount.setCode(code);
signAccount.setOpenId(openId);
signAccount.setDeleted(0);
TrSignAccount one = signAccountService.selectOne(new EntityWrapper<TrSignAccount>(signAccount));
if (one == null) {
return "error";
}
one.setUpdateById(accountId);
one.setUpdateTime(new Date());
one.setDeleted(1);
signAccountService.updateById(one);
return "success";
}
@GetMapping("/insert")
public String insert(
@ApiParam(name = "accountId", value = "用户id ", required = true) @RequestParam(name = "accountId", required = true) Long accountId,
@ApiParam(name = "trainingProjectId", value = "项目id ", required = true) @RequestParam(name = "trainingProjectId", required = true) Long trainingProjectId,
@ApiParam(name = "signTimeId", value = "签到id ", required = true) @RequestParam(name = "signTimeId", required = true) Long signTimeId) {
try {
// 查询是否签到
String result = signService.sign(accountId, String.valueOf(trainingProjectId),
String.valueOf(signTimeId), 0);
LOG.info(result);
return result;
} catch (Exception e) {
LOG.error("", e);
return "不存在此签到";
}
}
}
package com.yizhi.application.controller.api;
import com.yizhi.core.application.context.ContextHolder;
import com.yizhi.core.application.context.RequestContext;
import com.yizhi.application.domain.TrSignRecord;
import com.yizhi.application.export.ExportSignRecord;
import com.yizhi.application.service.SignRecordService;
import com.yizhi.util.application.domain.Response;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiParam;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* <p>
* 签到记录表 前端控制器 学员端
* </p>
*
* @author fanchunhui123
* @since 2018-03-07
*/
@Api(tags = "签到-学员端", description = "签到记录表学员端接口")
@RestController
@RequestMapping("/api/sign/record")
public class SignRecordController {
Logger logger = LoggerFactory.getLogger(SignRecordController.class);
@Autowired
SignRecordService signRecordService;
@Autowired
ExportSignRecord exportSignRecord;
/**
* 签到记录信息
*
* @param trainingProjectId
* @return
*/
@PostMapping("/list")
public Response<String> list(
@ApiParam(value = "培训项目ID", required = true) String trainingProjectId) {
return Response.ok();
}
/**
* 我的签到总数量
*
* @param accountId 学员ID
* @return
*/
@GetMapping("/count")
public Integer selectSignRecordCountByAccountId(@RequestParam("accountId") Long accountId) {
Integer count = signRecordService.selectCountByAccountId(accountId);
if (null == count) {
count = 0;
}
return count;
}
/**
* 获取签到完成数量( PC 端 学习统计签到 完成数量)
*
* @param trainingProjectId 培训项目ID
* @return
*/
@GetMapping("/pc/finishedCount")
public Integer selectCountByTrainingProjectId(@RequestParam("trainingProjectId") Long trainingProjectId, @RequestParam("accountId") Long accountId) {
logger.info("trainingProjectId为:" + trainingProjectId + "accountId:" + accountId);
Integer count = signRecordService.selectCountByTrainingProjectId(trainingProjectId, accountId);
if (null == count) {
count = 0;
}
logger.info("已完成的签到数量为:" + count);
return count;
}
/**
* 签到记录导出
*
* @param trainingProjectId
* @return
*/
@GetMapping("/export")
public String exportSignRecord(@RequestParam(name = "trainingProjectId") Long trainingProjectId) {
Map<String, Object> map = new HashMap<>();
RequestContext res = ContextHolder.get();
Long taskId = System.currentTimeMillis();
String serialNo = "SIGN-RECORD-EXPORT" + taskId.toString();
String taskName = "签到记录导出" + taskId.toString();
map.put("taskId", taskId);
map.put("serialNo", serialNo);
map.put("taskName", taskName);
map.put("res", res);
map.put("trainingProjectId", trainingProjectId);
exportSignRecord.execute(map, true);
return serialNo;
}
@PostMapping("/insert")
public boolean insertSignRecordList(@RequestBody List<TrSignRecord> signRecordList) {
return signRecordService.insertSignRecordList(signRecordList);
}
}
package com.yizhi.application.controller.api;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* <p>
* 签到提醒时间,一个sign_time对应一个sign_time 前端控制器 学员端
* </p>
*
* @author fanchunhui123
* @since 2018-03-07
*/
@Controller
@RequestMapping("/trSignRemind")
public class SignRemindController {
}
package com.yizhi.application.controller.api;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* <p>
* 签到时间段,一个 sign 对应多个 sign_time 前端控制器 学员端
* </p>
*
* @author fanchunhui123
* @since 2018-03-07
*/
@Controller
@RequestMapping("/trSignTime")
public class SignTimeController {
}
package com.yizhi.application.controller.manage;
import java.util.List;
import com.yizhi.application.domain.TrSign;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.yizhi.application.orm.id.IdGenerator;
import com.yizhi.application.service.SignService;
import com.yizhi.util.application.domain.Response;
import com.yizhi.sign.application.vo.SignIdVO;
import com.yizhi.sign.application.vo.SignQrcodeVO;
import com.yizhi.sign.application.vo.SignVO;
import io.swagger.annotations.ApiParam;
/**
* <p>
* 签到主体表,入口在培训项目 前端控制器 管理端
* </p>
*
* @author fanchunhui123
* @since 2018-03-07
*/
@RestController
@RequestMapping("/manage/sign")
public class SignManageController {
private static final Logger LOG = LoggerFactory.getLogger(SignManageController.class);
@Autowired
SignService signService;
@Autowired
IdGenerator idGenerator;
@PostMapping(value = "/insert")
public Long insert(@ApiParam(value = "签到主体表", required = true) @RequestBody SignVO signVO) {
try {
Long id = idGenerator.generate();
signVO.setId(id);
boolean result = signService.insertSignAndSignTimeAndSignRemind(signVO);
if(!result){
id = null;
}
return id;
} catch (Exception e) {
LOG.error("新建签到失败!", e);
return null;
}
}
@PostMapping(value = "/view")
public SignVO getSign(@ApiParam(value = "培训项目id", required = true) @RequestBody SignIdVO signIdVO) {
SignVO signVO = null;
try {
signVO = signService.querySign(signIdVO.getId());
return signVO;
} catch (Exception e) {
LOG.error("新建签到失败!", e);
return signVO;
}
}
@PostMapping("/update")
public boolean update(@ApiParam(value = "签到主体表", required = true) @RequestBody SignVO signVO) {
try {
boolean result = signService.updateSignAndSignTimeAndSignRemind(signVO);
return result;
} catch (Exception e) {
LOG.error("编辑签到失败!", e);
return false;
}
}
@PostMapping("/report")
public Response<String> report() {
return Response.ok();
}
@PostMapping("/report/export")
public Response<String> reportExport(@ApiParam(value = "培训项目ID", required = true) String trainingProjectId) {
return Response.ok();
}
@PostMapping("/delete")
public boolean deleteByProjectId(@RequestBody SignIdVO signIdVO) {
return signService.deleteSignByProjectId(signIdVO);
}
/**
* 获取生成的二维码Url
*
* @param signIdVO
* @return
*/
@PostMapping("/qrcode/get")
public List<SignQrcodeVO> qrcode(@RequestBody SignIdVO signIdVO) {
try {
// 校验培训项目id
if (StringUtils.isBlank(String.valueOf(signIdVO.getId()))) {
return null;
}
// TODO 目前没有项目
// 查询生成二维码必需参数
List<SignQrcodeVO> resultList = signService.querySignTime(signIdVO.getId());
LOG.info("成功获取生成二维码必需数据");
return resultList;
} catch (Exception e) {
LOG.error("", e);
return null;
}
}
@ApiOperation("根据签到id获取签到")
@GetMapping("/one/get")
public TrSign getSign(
@RequestParam(name = "signId" )Long signId
){
return signService.selectById(signId);
}
@ApiOperation("根据签到时间段id获取签到")
@GetMapping("/time/get")
public TrSign getSignByTime(@RequestParam(name = "signTimeId" )Long signId){
return signService.selectByTimeId(signId);
}
}
package com.yizhi.application.controller.manage;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* <p>
* 签到记录表 前端控制器 管理端
* </p>
*
* @author fanchunhui123
* @since 2018-03-07
*/
@Controller
@RequestMapping("/trSignRecord")
public class SignRecordManageController {
}
package com.yizhi.application.controller.manage;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* <p>
* 签到提醒时间,一个sign_time对应一个sign_time 前端控制器 管理端
* </p>
*
* @author fanchunhui123
* @since 2018-03-07
*/
@Controller
@RequestMapping("/trSignRemind")
public class SignRemindManageController {
}
package com.yizhi.application.controller.manage;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* <p>
* 签到时间段,一个 sign 对应多个 sign_time 前端控制器 管理端
* </p>
*
* @author fanchunhui123
* @since 2018-03-07
*/
@Controller
@RequestMapping("/trSignTime")
public class SignTimeManageController {
}
package com.yizhi.application.controller.manage;
import com.baomidou.mybatisplus.plugins.Page;
import com.yizhi.application.domain.StatisticsSign;
import com.yizhi.application.domain.StatisticsSignLearn;
import com.yizhi.application.domain.TrSign;
import com.yizhi.application.domain.TrSignTime;
import com.yizhi.application.mapper.StatisticsSignMapper;
import com.yizhi.application.orm.util.DomainConverter;
import com.yizhi.application.service.SignTimeService;
import com.yizhi.application.service.StatisticsSignService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
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.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
import java.util.List;
@RestController
@RequestMapping("/statisticsSign")
public class StatisticsSignController {
// @Autowired
// private StatisticsSignRun statisticsSignRun;
@Autowired
private StatisticsSignService statisticsSignService;
@Autowired
private SignTimeService signTimeService;
@Autowired
private StatisticsSignMapper statisticsSignMapper;
@Autowired
DomainConverter domainConverter;
// @GetMapping("/asynchronous/load/data")
// public Response<String> asynchronousSign(@RequestParam("startDate") String startDate, @RequestParam("endDate") String endDate) {
// Map<String, Object> map = new HashMap<String, Object>();
// map.put("startDate", startDate);
// map.put("endDate", endDate);
// statisticsSignRun.execute(map, true);
// return Response.ok();
// }
@ApiOperation(value = "各项目的签到统计", notes = "各项目的签到统计")
@GetMapping("/group")
public Page<com.yizhi.sign.application.vo.domain.StatisticsSign> signPage(@RequestParam(name = "projectId", required = false) Long projectId,
@RequestParam(name = "kwd", required = false) String kwd,
@RequestParam(name = "startDate", required = false) String startDate,
@RequestParam(name = "endDate", required = false) String endDate,
@RequestParam(name = "signCompanyId", required = false) Long signCompanyId,
@RequestParam(name = "signOrgIds", required = false) List<Long> signOrgIds,
@RequestParam(name = "signSiteId", required = false) Long signSiteId,
@RequestParam(name = "pageNo", required = false) Integer pageNo,
@RequestParam(name = "pageSize", required = false) Integer pageSize) {
return statisticsSignService.statisticsSignPage(projectId, kwd, startDate, endDate, signCompanyId, signOrgIds, signSiteId, pageNo, pageSize);
}
@ApiOperation(value = "某个项目的签到统计", notes = "某个项目的签到统计")
@GetMapping("/group/view")
public Page<com.yizhi.sign.application.vo.domain.StatisticsSign> signView(
@RequestParam(name = "id", required = true) Long id,
@RequestParam(name = "projectId", required = true) Long projectId,
@RequestParam(name = "startDate", required = false) String startDate,
@RequestParam(name = "endDate", required = false) String endDate,
@RequestParam(name = "orgNameOrCode", required = false) String orgNameOrCode,
@RequestParam(name = "accountName", required = false) String accountName,
@RequestParam(name = "pageNo", required = false) Integer pageNo,
@RequestParam(name = "pageSize", required = false) Integer pageSize) {
Page<StatisticsSign> statisticsSignPage = statisticsSignService.statisticsSignView(id, projectId, startDate, endDate, orgNameOrCode, accountName, pageNo, pageSize);
Page<com.yizhi.sign.application.vo.domain.StatisticsSign> page = new Page<>(pageNo,pageSize);
BeanUtils.copyProperties(statisticsSignPage,page);
return page;
}
@ApiOperation(value = "图形报表", notes = "图形报表")
@GetMapping("/chart/group")
public List<com.yizhi.sign.application.vo.domain.StatisticsSign> chartGroup(@RequestParam(name = "trainningProjectId", required = false) Long trainningProjectId,
@RequestParam(name = "startDate", required = false) String startDate,
@RequestParam(name = "endDate", required = false) String endDate,
@RequestParam(name = "signCompanyId", required = false) Long signCompanyId,
@RequestParam(name = "signOrgIds", required = false) List<Long> signOrgIds,
@RequestParam(name = "signSiteId", required = false) Long signSiteId) {
List<StatisticsSign> statisticsSigns = statisticsSignService.chartGroup(trainningProjectId, startDate, endDate, signCompanyId, signOrgIds, signSiteId);
return domainConverter.toDOList(statisticsSigns, com.yizhi.sign.application.vo.domain.StatisticsSign.class);
}
@ApiOperation(value = "各项目的签到统计个数", notes = "各项目的签到统计个数")
@GetMapping("/group/count")
public Integer signPageCount(@RequestParam(name = "projectId", required = false) Long projectId,
@RequestParam(name = "startDate", required = false) String startDate,
@RequestParam(name = "endDate", required = false) String endDate,
@RequestParam(name = "signCompanyId", required = false) Long signCompanyId,
@RequestParam(name = "signOrgIds", required = false) List<Long> signOrgIds,
@RequestParam(name = "signSiteId", required = false) Long signSiteId) {
return statisticsSignService.statisticsSignPageCount(projectId, startDate, endDate, signCompanyId, signOrgIds, signSiteId);
}
@ApiOperation(value = "各项目的签到统计列表", notes = "各项目的签到统计")
@GetMapping("/group/list")
public List<StatisticsSign> signPageList(@RequestParam(name = "projectId", required = false) Long projectId,
@RequestParam(name = "startDate", required = false) String startDate,
@RequestParam(name = "endDate", required = false) String endDate,
@RequestParam(name = "signCompanyId", required = false) Long signCompanyId,
@RequestParam(name = "signOrgIds", required = false) List<Long> signOrgIds,
@RequestParam(name = "signSiteId", required = false) Long signSiteId,
@RequestParam(name = "pageNo", required = false) Integer pageNo,
@RequestParam(name = "pageSize", required = false) Integer pageSize) {
return statisticsSignService.statisticsSignList(projectId, startDate, endDate, signCompanyId, signOrgIds, signSiteId, pageNo, pageSize);
}
@ApiOperation(value = "某个项目的签到统计个数", notes = "某个项目的签到统计个数")
@GetMapping("/group/view/count")
public Integer signViewCount(
@RequestParam(name = "id", required = true) Long id,
@RequestParam(name = "projectId", required = true) Long projectId,
@RequestParam(name = "startDate", required = false) String startDate,
@RequestParam(name = "endDate", required = false) String endDate,
@RequestParam(name = "orgNameOrCode", required = false) String orgNameOrCode,
@RequestParam(name = "accountName", required = false) String accountName) {
return statisticsSignService.statisticsSignViewCount(id, projectId, startDate, endDate, orgNameOrCode, accountName);
}
@ApiOperation(value = "某个项目的签到统计个数列表", notes = "某个项目的签到统计个数列表")
@GetMapping("/group/view/list")
public List<StatisticsSign> signViewList(
@RequestParam(name = "id", required = true) Long id,
@RequestParam(name = "projectId", required = true) Long projectId,
@RequestParam(name = "startDate", required = false) String startDate,
@RequestParam(name = "endDate", required = false) String endDate,
@RequestParam(name = "orgNameOrCode", required = false) String orgNameOrCode,
@RequestParam(name = "accountName", required = false) String accountName,
@RequestParam(name = "pageNo", required = false) Integer pageNo,
@RequestParam(name = "pageSize", required = false) Integer pageSize) {
return statisticsSignService.statisticsSignViewList(id, projectId, startDate, endDate, orgNameOrCode, accountName, pageNo, pageSize);
}
@ApiOperation(value = "获取签到时间段", notes = "获取签到时间段")
@GetMapping("/group/getSignTime")
public TrSignTime getSignTime(@RequestParam("getSignTime") Long signTimeId) {
return signTimeService.selectById(signTimeId);
}
@GetMapping("/group/selectRecordMinTime")
Date selectRecordMinTime() {
return statisticsSignMapper.selectRecordMinTime();
}
@GetMapping("/group/getAllResearchs")
List<TrSign> getAllResearchs(@RequestParam("startDate") String startDate, @RequestParam("endDate") String endDate) {
return statisticsSignMapper.getAllResearchs(startDate, endDate);
}
@GetMapping("/group/getRecords")
List<StatisticsSignLearn> getRecords(@RequestParam("signTimeId") Long signTimeId, @RequestParam("startDate") String startDate, @RequestParam("endDate") String endDate) {
return statisticsSignMapper.getRecords(signTimeId, startDate, endDate);
}
}
//package com.yizhi.application.controller.manage;
//
//import java.text.ParseException;
//import java.text.SimpleDateFormat;
//import java.util.ArrayList;
//import java.util.Calendar;
//import java.util.Date;
//import java.util.GregorianCalendar;
//import java.util.HashMap;
//import java.util.Iterator;
//import java.util.List;
//import java.util.Map;
//
//import org.apache.commons.collections.CollectionUtils;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//
//import com.alibaba.fastjson.JSON;
//import com.yizhi.application.context.TaskContext;
//import com.yizhi.application.domain.StatisticsSign;
//import com.yizhi.application.domain.StatisticsSignLearn;
//import com.yizhi.application.domain.TrSign;
//import com.yizhi.application.file.task.AbstractDefaultTask;
//import com.yizhi.application.mapper.StatisticsSignMapper;
//import com.yizhi.application.orm.id.IdGenerator;
//import com.yizhi.application.service.StatisticsSignService;
//import com.yizhi.system.application.remote.ReportClient;
//import com.yizhi.util.application.page.PageInfo;
//import com.yizhi.application.vo.ReportAccountRespVO;
//import com.yizhi.application.vo.ReportRangeAccountReqVO;
//
//@Component
//public class StatisticsSignRun extends AbstractDefaultTask<String,Map<String,Object>> {
//
// private Logger logger = LoggerFactory.getLogger(StatisticsSignRun.class);
//
// @Autowired
// private StatisticsSignMapper statisticsSignMapper;
//
// @Autowired
// private StatisticsSignService statisticsSignService;
//
//
// @Autowired
// IdGenerator idGenerator;
//
// @Autowired
// private ReportClient reportClient;
//
// /**
// * 缓存学员学习信息
// */
// private final Map<String, Map<Long, StatisticsSign>> accountMap = new HashMap<String, Map<Long, StatisticsSign>>();
//
// private int pageNo = 1;
//
// private int pageSize = 50;
//
//
// @Override
// public String execute(Map<String, Object> map) {
//
// Date startRunDate = new Date();
//
// SimpleDateFormat formatDate = new SimpleDateFormat("yyyy-MM-dd");
//
// Long taskId = idGenerator.generate();
// TaskContext taskContext = new TaskContext(taskId, formatDate.format(startRunDate) + " 在线签到报表分析", 999L, startRunDate);
// working(taskContext);
//
// String startDate = null;
// String endDate = null;
// Date dCurDate = null;
//
// if(map != null){
// startDate = (String) map.get("startDate");
// endDate = (String) map.get("endDate");
// }
//
// if (startDate == null || "".equals(startDate)) {
// Date middleMaxTime = statisticsSignMapper.selectMaxDate();
// if (middleMaxTime != null) {
// dCurDate = addDay(middleMaxTime, 1);
// startDate = formatDate.format(dCurDate);
// } else {
// Date recordMinTime = statisticsSignMapper.selectRecordMinTime();
// startDate = formatDate.format(recordMinTime);
// }
// }
// if (endDate == null || "".equals(endDate)) {
// dCurDate = addDay(new Date(), -1);
// endDate = formatDate.format(dCurDate);
// }
//
// Long day = 0L;
// Date beginDate = null;
// try {
// beginDate = formatDate.parse(startDate);
// Date end = formatDate.parse(endDate);
// day = (end.getTime() - beginDate.getTime()) / (24 * 60 * 60 * 1000);
// } catch (ParseException e1) {
// return null;
// }
//
// List<StatisticsSign> insertList = new ArrayList<StatisticsSign>();
//
// // 获得所有的调研(条件:未上架/已上架,没有被删除的调研)
// List<TrSign> getAllResearch = statisticsSignMapper.getAllResearchs(startDate, endDate);
//
//
// //指定范围可见的调研人员的IdList
// List<Long> listAccountIdRange = new ArrayList<>();
//
// // 先删除这天的记录再添加,防止一天添加多次记录
// for (int d = 0; d <= day; d++) {
// String currentDate = startDate;
// if (d > 0) {
// dCurDate = addDay(beginDate, d);
// currentDate = formatDate.format(dCurDate);
// }
// statisticsSignMapper.deleteRecordeByDate(currentDate);
// }
//
// taskDetail(taskId, "***** 签到统计开始 *****");
//
// String rangeKey = "";
// List<StatisticsSignLearn> accountLearnIds = null;
//
// boolean isOk = true;
// String curSignName = "";
// Long curSignId = 0L;
//
// try{
// // 按调研遍历学员学习记录
// for (TrSign sign : getAllResearch) {
// // 判断调研在所有日期中是否有学习记录,没有就添加一条空的学习记录
// Long signId = sign.getId();
// String signName = sign.getTrainningProjectName();
// curSignId = signId;
// curSignName = signName;
//
// Long examSiteId = sign.getSiteId(); // 调研的站点ID
// Integer scope = sign.getVisibleRange(); // 可见范围 1 平台用户 2
// // 指定范围
// if (scope != null && scope == 0) { // 如果是指定范围 不是根据站点Id找人
// listAccountIdRange = statisticsSignMapper.getAllRelationId(sign.getTrainingProjectId());
// if (null == listAccountIdRange) {
// taskDetail(taskId, signName + "(" + signId + ")" + " 未设置指定范围,请确认是否为该签到设置的范围,无法统计数据");
// rangeKey = "";
// } else {
// rangeKey = examSiteId.toString() + listAccountIdRange.toString();
// }
// examSiteId = null;
// } else {
// listAccountIdRange = null;
// if (examSiteId != null) {
// rangeKey = examSiteId.toString();
// } else {
// rangeKey = "";
// taskDetail(taskId,
// signName + "(" + signId + ")" + " 全平台可见为空:(" + examSiteId + ") 请确认数据,无法统计数据");
// }
// }
// if ("".equals(rangeKey)) {
// continue;
// }
//
// // 从缓存中获取用户,没有找到再请求system查询
// Map<Long, StatisticsSign> resultccountMap = accountMap.get(rangeKey);
// if (resultccountMap == null) {
// resultccountMap = new HashMap<Long, StatisticsSign>();
// getReportAccountRespVO(sign.getSiteId(), listAccountIdRange, pageNo, pageSize, null, resultccountMap,
// rangeKey, taskId, signName + "(" + signId + ")");
// if (resultccountMap.size() == 0) {
// if (examSiteId == null) {
// taskDetail(taskId, signName + "(" + signId + ")" + " 没有查找到该站点(" + sign.getSiteId() + ")下" + "指定范围IDs:("
// + listAccountIdRange.toString() + ") 的学员信息,无法统计数据");
// } else {
// taskDetail(taskId, signName + "(" + signId + ")" + " 没有查找到全平台:(" + examSiteId
// + ") 的学员信息,无法统计数据");
// }
// continue;
// }
// }
// if (resultccountMap != null) {
// // 添加应参加学员信息
// insertEmptyResearchLearn(resultccountMap, sign, insertList, taskId);
// }
//
// // 循环统计每天的学习记录
// for (int d = 0; d <= day; d++) {
// String currentDate = startDate;
// if(d > 0){
// dCurDate = addDay(beginDate, d);
// currentDate = formatDate.format(dCurDate);
// }
//
// // 批量添加当前日期学习记录
// accountLearnIds = statisticsSignService.insertAccountLearn(signId, currentDate);
// // 没有学习记录,跳转
// if (accountLearnIds == null || accountLearnIds.size() == 0) {
// continue;
// }
// }
// }
// } catch(Exception e){
// e.printStackTrace();
// isOk = false;
// taskDetail(taskId, "统计签到 " + curSignName + "(" + curSignId + ")异常:" + e.getMessage());
// }
//
// try{
// //添加调研,先删除后添加信息ign
// statisticsSignMapper.deleteStatisticsResearchToGroupFind();
// statisticsSignMapper.insertStatisticsResearchToGroupFind();
//
// //添加学员,先删除后添加信息
// statisticsSignMapper.deleteStatisticsResearchToAccountGroupFind();
// statisticsSignMapper.insertStatisticsResearchToAccountGroupFind();
//
// //删除、添加应参加人数
// statisticsSignMapper.deleteStatisticsAccountCanCount();
// statisticsSignMapper.insertStatisticsAccountCanCount();
// } catch(Exception e){
// logger.info("***** 添加数据到按部门统计表错误 *****");
// taskDetail(taskId, "添加数据到中间表异常:" + e.getMessage());
// isOk = false;
// }
//
// accountMap.clear();
//
// Date endRunDate = new Date();
//
// String con = "签到报表分析完成耗时 :" + (endRunDate.getTime() - startRunDate.getTime()) / 1000 + "秒";
// taskDetail(taskId, con);
// if(isOk){
// success(taskContext, con);
// } else {
// fail(taskContext, con + ",执行过程中有错误");
// }
//
// return "ok";
// }
//
// /**
// * 创建和获取学员学习对象,缓存全平台可见的学员对象
// *
// * @param siteId 站点ID,为空不缓存学员信息
// * @param orgIdsAndAccountIds 指定范围可见ID集合
// * @param pageNo 页码
// * @param pageSize 页数
// * @param resultAccountIds 保存当前查询的学员IDs,每次会清空集合中的记录
// * @param resultccountMap 保存当前查询的学员信息,每次会清空集合中的记录
// * @return 当前查询的学员IDs
// */
// private StatisticsSign getReportAccountRespVO(Long siteId, List<Long> orgIdsAndAccountIds, Integer pageNo, Integer pageSize,
// Long findAccountId, Map<Long, StatisticsSign> resultccountMap, String rangeKey,
// Long taskId, String taskCon) {
//
// //查找指定的人
// StatisticsSign learnStu = null;
//
// // 获取用户信息
// ReportRangeAccountReqVO rrarv = new ReportRangeAccountReqVO();
// rrarv.setSiteId(siteId);
// rrarv.setPageNo(pageNo);
// rrarv.setOrgIdsAndAccountIds(orgIdsAndAccountIds);
// rrarv.setPageSize(pageSize);
// PageInfo<ReportAccountRespVO> page = null;
// try{
// page = reportClient.getRangeAccounts(rrarv);
// if(page == null || page.getRecords() == null){
// return null;
// }
// learnStu = initStatisticsResearchMetadatas(page.getRecords(), findAccountId, resultccountMap, rangeKey, taskId);
//
// String msg = "";
// if(orgIdsAndAccountIds == null){
// msg += "全平台,第1页:siteId:" + siteId + " (总页数:" +page.getPageTotal() + "),查询人数:" + page.getRecords().size() + " 缓存人数:" + resultccountMap.size();
// } else {
// msg += "指定范围,第1页:siteId:" + siteId + " (总页数:" +page.getPageTotal() + "),查询人数:" + page.getRecords().size() + " 缓存人数:" + resultccountMap.size();
// }
// taskDetail(taskId, msg);
//
// //分页查询查找所有人
// int pageTotal = page.getPageTotal();
// for (int i = 2; i <= pageTotal; i++) {
// rrarv.setSiteId(siteId);
// rrarv.setPageNo(i);
// rrarv.setOrgIdsAndAccountIds(orgIdsAndAccountIds);
// rrarv.setPageSize(pageSize);
// page = reportClient.getRangeAccounts(rrarv);
// if(page != null && page.getRecords().size() > 0){
// if(learnStu == null){
// learnStu = initStatisticsResearchMetadatas(page.getRecords(), findAccountId, resultccountMap, rangeKey, taskId);
// } else {
// initStatisticsResearchMetadatas(page.getRecords(), null, resultccountMap, rangeKey, taskId);
// }
// msg = "";
// if(orgIdsAndAccountIds == null){
// msg += "全平台,第" + i +"页:siteId:" + siteId + " (总页数:" +page.getPageTotal() + "),查询人数:" + page.getRecords().size() + " 缓存人数:" + resultccountMap.size();
// } else {
// msg += "指定范围,第" + i + "页:siteId:" + siteId + " (总页数:" +page.getPageTotal() + "),查询人数:" + page.getRecords().size() + " 缓存人数:" + resultccountMap.size();
// }
// taskDetail(taskId, msg);
// }
// }
// } catch(Exception e){
// e.printStackTrace();
// if(siteId == null){
// taskDetail(taskId, "获取" + taskCon + "的指定范围Ids:(" + orgIdsAndAccountIds + ") system服务不可用,:" + e.getMessage());
// } else {
// taskDetail(taskId, "获取" + taskCon + "的全平台:(" + siteId + ") system服务不可用,:" + e.getMessage());
// }
//
// return null;
// }
//
// return learnStu;
// }
//
// /**
// * 创建和获取学员学习对象
// *
// * @param siteId 站点ID,为空不缓存学员信息
// * @param listReportAccountRespVO 查询出的学员
// * @param resultAccountIds 保存当前查询的学员IDs,每次会清空集合中的记录
// * @param resultccountMap 保存当前查询的学员信息,每次会清空集合中的记录
// * @return 当前查询的学员IDs
// */
// private StatisticsSign initStatisticsResearchMetadatas(List<ReportAccountRespVO> listReportAccountRespVO, Long findAccountId,
// Map<Long, StatisticsSign> resultccountMap, String rangeKey, Long taskId) {
//
// //查找指定的人
// StatisticsSign learnStu = null;
//
// // 初始化学员学习信息
// for (ReportAccountRespVO item : listReportAccountRespVO) {
// Long accountId = item.getUserId();
// StatisticsSign stu = null;
// if(accountMap.get(rangeKey) != null){
// stu = accountMap.get(rangeKey).get(accountId);
// } else {
// accountMap.put(rangeKey, resultccountMap);
// }
//
// if(stu == null){
// stu = new StatisticsSign();
// stu.setId(null);
// stu.setAccountId(accountId);
// stu.setAccountState(item.getStatus());
// stu.setAccountWorkNum(item.getWorkNum());
// stu.setAccountName(item.getUserName());
// stu.setAccountFullname(item.getUserFullName());
// stu.setOrgName(item.getOrgName());
// stu.setAccountOrgId(item.getOrgId());
// String orgParentNames = null;
// if (item.getParentOrgNames() != null) {
// for (String orgName : item.getParentOrgNames()) {
// if (orgParentNames == null) {
// orgParentNames = orgName;
// } else {
// orgParentNames += "/" + orgName;
// }
// }
// stu.setOrgParentNames(orgParentNames);
// }
//
// // 设置实际参加状态,用于实际人数的统计
// stu.setCanState(1);
// //设置已参加状态为0(未参加)
// stu.setJoinState(0);
// resultccountMap.put(accountId, stu);
// } else {
// taskDetail(taskId, "mcz已存在人员信息:" + stu.toString());
// }
// if(findAccountId != null && findAccountId.compareTo(accountId) == 0){
// learnStu = stu;
// }
// }
// return learnStu;
// }
//
// @SuppressWarnings("static-access")
// private Date addDay(Date date, int num) {
// Calendar calendar = new GregorianCalendar();
// calendar.setTime(date);
// calendar.add(calendar.DATE, num);
// date = calendar.getTime();
// return date;
// }
//
// /**
// * 测试数据
// * @param pageNo
// * @param pageSize
// * @return
// */
// private PageInfo<ReportAccountRespVO> getTestData(int pageNo, int pageSize){
// List<ReportAccountRespVO> l = new ArrayList<ReportAccountRespVO>();
// ReportAccountRespVO x = new ReportAccountRespVO();
// x.setUserId(1016273921890463744L);
// x.setOrgName("xxxx");
// l.add(x);
//
// x = new ReportAccountRespVO();
// x.setOrgName("xxxx");
// x.setUserId(81754L);
// l.add(x);
//
// /*x = new ReportAccountRespVO();
// x.setUserId(989311074940907520L);
// l.add(x);
// x = new ReportAccountRespVO();
// x.setUserId(1004566068968501248L);
// l.add(x);
// x = new ReportAccountRespVO();
// x.setUserId(1004591602767192064L);
// l.add(x);
// x = new ReportAccountRespVO();
// x.setUserId(1004594320063819776L);
// l.add(x);
// x = new ReportAccountRespVO();
// x.setUserId(1006492895324151808L);
// l.add(x);
// x = new ReportAccountRespVO();
// x.setUserId(1006492995672875008L);l.add(x);
// x = new ReportAccountRespVO();
// x.setUserId(1006733944520974336L);l.add(x);
// x = new ReportAccountRespVO();
// x.setUserId(1006734302269939712L);l.add(x);
// x = new ReportAccountRespVO();
// x.setUserId(1006734588979978240L);l.add(x);
// x = new ReportAccountRespVO();
// x.setUserId(1006734878378565632L);l.add(x);
// x = new ReportAccountRespVO();
// x.setUserId(1011930094964150272L);l.add(x);
// x = new ReportAccountRespVO();
// x.setUserId(1011929942455062528L);l.add(x);
// x = new ReportAccountRespVO();
// x.setUserId(1011925785505533952L);l.add(x);*/
//
// //模拟分页
// int startIndex = (pageNo - 1) * pageSize;
// int endIndex = pageSize + startIndex;
// int total = l.size();
// endIndex = endIndex > total ? total : endIndex;
// List<ReportAccountRespVO> dataCharts = new ArrayList<ReportAccountRespVO>();
// for (; startIndex < endIndex; startIndex++) {
// dataCharts.add(l.get(startIndex));
// }
//
// PageInfo<ReportAccountRespVO> page = new PageInfo<ReportAccountRespVO>();
// page.setRecords(dataCharts);
// page.setPageTotal(l.size());
//
// return page;
// }
//
// public void clearInfo(StatisticsSign stu){
// stu.setJoinState(null);
// stu.setSignId(null);
// stu.setSignName(null);
// stu.setSignCreateTime(null);
// stu.setSignCompanyId(null);
// stu.setSignSiteId(null);
// stu.setSignOrgId(null);
// stu.setSignTime(null);
// stu.setAccountCompanyId(null);
// stu.setAccountSiteId(null);
// stu.setAccountOrgId(null);
// stu.setTrainningProjectId(null);
// stu.setTrainningProjectName(null);
// stu.setProjectCreateTime(null);
// stu.setSignStartTime(null);
// stu.setSignEndTime(null);
// }
//
// private void insertEmptyResearchLearn(Map<Long, StatisticsSign> resultccountMap, TrSign sign,
// List<StatisticsSign> insertList, Long taskId){
// if(insertList != null){
// insertList.clear();
// }
//
// //获取该调研的学员信息
// Map<Long, Long> stuMap = statisticsSignMapper.selectAccountLearnByResearchId(sign.getId());
//
// Iterator<StatisticsSign> statResearchs = resultccountMap.values().iterator();
// StatisticsSign statCourse;
// while (statResearchs.hasNext()){
// //更新调研信息
// statCourse = statResearchs.next();
// statCourse.setJoinState(0);
// statCourse.setSignStartTime(sign.getSignStartDate());
// statCourse.setSignEndTime(sign.getSignEndDate());
// statCourse.setSignId(sign.getId());
// statCourse.setSignName(sign.getTrainningProjectName());
// statCourse.setSignCreateTime(sign.getCreateTime());
// statCourse.setSignCompanyId(sign.getCompanyId());
// statCourse.setSignSiteId(sign.getSiteId());
// statCourse.setSignOrgId(sign.getOrgId());
// statCourse.setProjectCreateTime(sign.getProjectCreateTime());
// statCourse.setTrainningProjectName(sign.getTrainningProjectName());
// statCourse.setTrainningProjectId(sign.getTrainingProjectId());
// statCourse.setSignTimeId(sign.getSignTimeId());
//
// if(stuMap == null){
// insertList.add(statCourse);
// } else {
// if(stuMap.get(statCourse.getAccountId()) == null){
// insertList.add(statCourse);
// }
// }
// }
// //批量插入
// if(!CollectionUtils.isEmpty(insertList)) {
// try{
// statisticsSignService.insertBatch(insertList);
// taskDetail(taskId, "批量添加成功" + sign.getTrainningProjectName() + "(" + sign.getId() + ")"+ "实际添加人数:" + insertList.size() + " 总人数:" + resultccountMap.size());
// } catch(Exception e){
// logger.info("***insert data*********" + JSON.toJSONString(insertList));
// e.printStackTrace();
// taskDetail(taskId, "批量添加" + sign.getTrainningProjectName() + "(" + sign.getId() + ")"+ "数据错误:" + e.getMessage());
// }
// }
// }
//}
package com.yizhi.application.controller.remote;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.yizhi.application.domain.TrSignAccount;
import com.yizhi.application.domain.TrSignTime;
import com.yizhi.point.application.feign.PointRedisFeignClients;
import com.yizhi.application.orm.id.IdGenerator;
import com.yizhi.application.service.SignAccountService;
import com.yizhi.application.service.SignRecordService;
import com.yizhi.application.service.SignService;
import com.yizhi.application.service.SignTimeService;
import com.yizhi.system.application.system.remote.AccountClient;
import com.yizhi.core.application.task.TaskExecutor;
import com.yizhi.system.application.vo.AccountVO;
import com.yizhi.util.application.encrypt.ShaEncrypt;
import com.yizhi.util.application.json.JsonUtil;
import com.yizhi.system.application.vo.domain.Account;
import com.yizhi.training.application.feign.TrainingProjectClient;
import com.yizhi.training.application.vo.domain.TpAuthorizationRangeVo;
import com.yizhi.training.application.vo.domain.TrainingProjectVo;
import com.yizhi.sign.application.vo.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.*;
/**
* <p>
* 签到主体表,入口在培训项目 前端控制器 学员端
* </p>
*
* @author fanchunhui123
* @since 2018-03-07
*/
@Api(tags = "签到-学员端", description = "签到-学员端")
@RestController
@RequestMapping("/remote/api/sign")
public class RemoteSignController {
private static final Logger LOG = LoggerFactory.getLogger(RemoteSignController.class);
@Autowired
private SignService signService;
@Autowired
private TaskExecutor taskExecutor;
@Autowired
private SignTimeService signTimeService;
@Autowired
private SignAccountService signAccountService;
@Autowired
private TrainingProjectClient trainingProjectClient;
@Autowired
private AccountClient accountClient;
@Autowired
IdGenerator idGenerator;
@Autowired
private SignRecordService signRecordService;
@Autowired
private PointRedisFeignClients pointRedisFeignClients;
@Autowired
private AmqpTemplate amqpTemplate;
/**
* 学员端二维码签到
*
* @param signVO
* @return
*/
@PostMapping(value = "/", produces = "text/html;charset=UTF-8")
public String sign(@RequestBody SignVO signVO) {
try {
if (null == signVO) {
return "不存在此签到";
}
if (null == signVO.getTrainingProjectId() || null == signVO.getSignTimeId()
|| null == signVO.getAccountId()) {
return "不存在此签到";
}
// 查询是否签到
String result = signService.sign(signVO.getAccountId(), String.valueOf(signVO.getTrainingProjectId()),
String.valueOf(signVO.getSignTimeId()), signVO.getSignType());
LOG.info(result);
return result;
} catch (Exception e) {
LOG.error("", e);
return "不存在此签到";
}
}
/**
* 我的签到记录
*
* @param pageVO
* @return
*/
@PostMapping("/my/record/list")
public Page<TrSignRecordVo> recordList(@RequestBody PageVO pageVO) {
try {
// TODO 查询签到端
// accountId 学员账号id
Long accountId = pageVO.getAccountId();
String year = pageVO.getYear();
Calendar calendar = null;
// if (StringUtils.isBlank(year)) {
// calendar = Calendar.getInstance();
// calendar.setTime(new Date());
// year = String.valueOf(calendar.get(Calendar.YEAR));
// }
// else {
// year = year.trim();
// }
if (StringUtils.isNotBlank(year)) {
year = year.trim();
}
String month = pageVO.getMonth();
if (!StringUtils.isBlank(month)) {
month = month.trim();
}
Integer pageNo = pageVO.getPageNo();
Integer pageSize = pageVO.getPageSize();
if (null == pageNo || pageNo == 0) {
pageNo = 1;
}
if (null == pageSize) {
pageSize = 10;
}
Page<TrSignRecordVo> page = signService.selectSignRecordListByAccountIdAndMonth(accountId, year, month,
pageNo, pageSize);
/*
* Map<String, Integer> pageMap = new HashMap<String, Integer>();
* pageMap.put("pageNo", pageVO.getPageNo()); pageMap.put("pageSize",
* pageVO.getPageSize()); pageMap.put("pageTotal", page.getTotal());
*
* Map<String, Object> resap = new HashMap<String, Object>(); resap.put("list",
* page.getRecords()); resap.put("page", pageMap);
*/
return page;
} catch (Exception e) {
LOG.error("", e);
return null;
}
}
/********************************************************************
* PC 端
************************************************************************/
/**
* 获取签到总数量( PC 端 培训项目中培训统计的签到总数)
*
* @param trainingProjectId
* @return
*/
@PostMapping("/pc/count")
public Integer getPcSignTimeCount(@RequestParam("trainingProjectId") Long trainingProjectId) {
Integer count = signService.getPcSignTimeCount(trainingProjectId);
return count;
}
@ApiOperation(value = "验证签到邀请码", notes = "验证签到邀请码", response = TrSignAccount.class)
@GetMapping("/checkCode")
public Map<String, Object> checkCode(
@ApiParam(name = "code", value = "项目签到邀请码", required = false) @RequestParam(name = "code", required = true) String code,
@ApiParam(name = "openId", value = "微信小程序openId 默认不传", required = false) @RequestParam(name = "openId", required = false) String openId,
@ApiParam(name = "accountId", value = "用户id 默认不传", required = false) @RequestParam(name = "accountId", required = false) Long accountId) {
Map<String, Object> map = new HashMap<String, Object>();
String result = "";
TrSignTime signTime = new TrSignTime();
signTime.setCode(code);
signTime.setDeleted(0);
TrSignTime one = signTimeService.selectOne(new EntityWrapper<TrSignTime>(signTime));
if (one != null) {
Date endTime = one.getEndTime();
long day = (System.currentTimeMillis() - endTime.getTime()) / (60 * 60 * 24 * 1000);
if ((System.currentTimeMillis() - endTime.getTime()) > 0 && day >= 0 && day <= 7) {
result = "签到已过期";
map.put("error", result);
return map;
}
if (day > 7) {
result = "无效邀请码,请重新输入";
map.put("error", result);
return map;
}
TrSignAccount account = new TrSignAccount();
account.setCode(code);
if (openId != null) {
account.setOpenId(openId);
}
if (accountId != null) {
account.setAccountId(accountId);
}
account.setDeleted(0);
TrSignAccount signAccount = signAccountService.selectOne(new EntityWrapper<TrSignAccount>(account));
if (signAccount != null) {
map.put("success", JsonUtil.object2Json(signAccount));
return map;
} else {
return map;
}
}
result = "无效邀请码,请重新输入";
map.put("error", result);
return map;
}
@ApiOperation(value = "验证用户身份", notes = "验证用户身份", response = Account.class)
@PostMapping("/checkAccount")
public Map<String, Object> checkAccount(@RequestBody SignAccountParam param) {
Integer result = 0;
String error = "";
Map<String, Object> map = new HashMap<String, Object>();
Date date = new Date();
TrSignTime signTime = new TrSignTime();
signTime.setCode(param.getCode());
signTime.setDeleted(0);
TrSignTime one = signTimeService.selectOne(new EntityWrapper<TrSignTime>(signTime));
if (one != null) {
Date endTime = one.getEndTime();
if (date.after(endTime)) {
error = "签到已过期";
map.put("error", error);
return map;
}
Long tpId = one.getTrainingProjectId();
TrainingProjectVo tProject = trainingProjectClient.getOne(tpId);
if (tProject == null) {
LOG.error(tpId + "培训项目不存在!!!");
error = "培训项目不存在";
map.put("error", error);
return map;
}
LOG.info("返回培训项目对象实体" + tProject.toString());
Long companyId = tProject.getCompanyId();
Account user = accountClient.findAccountByName(param.getName(), companyId);
if (user == null) {
LOG.error(param.getName() + "用户不存在");
map.put("error", "账号或密码输入错误!");
return map;
}
if (!ShaEncrypt.comparePassword(param.getPwd(), user.getPassword())) {
LOG.info("用户密码错误,加密密码=" + user.getPassword() + "输入密码=" + param.getPwd());
map.put("error", "账号或密码输入错误!");
return map;
}
if (!user.getEnabled() || user.getLocked()) {
// 账号未启用或者锁定
map.put("error", "账号或密码输入错误!");
return map;
// 前面时间大于后面时间==1
} else if (user.getExpiredType() == 2 && user.getEndTime().compareTo(new Date()) <= 0) {
// 账号已过期
map.put("error", "账号或密码输入错误!");
return map;
} else if (user.getExpiredType() == 3 && user.getExpiredTime().compareTo(new Date()) <= 0) {
map.put("error", "账号或密码输入错误!");
return map;
}
Integer range = tProject.getVisibleRange();
if (range == 1) {
result = 1;
} else if (range == 0) {
List<Long> accountIds = new ArrayList<>();
List<TpAuthorizationRangeVo> visibleRanges = trainingProjectClient.VisibleRange(tpId);
for (TpAuthorizationRangeVo visibleRange : visibleRanges) {
if (2 == visibleRange.getType()) {
accountIds.add(visibleRange.getRelationId());
} else {
List<AccountVO> list = accountClient.findByOrgId(visibleRange.getRelationId(), companyId);
List<Long> ids = new ArrayList<Long>();
if (CollectionUtils.isNotEmpty(list)) {
for (AccountVO vo : list) {
ids.add(vo.getId());
}
}
if (CollectionUtils.isNotEmpty(ids)) {
accountIds.addAll(ids);
}
}
}
if (CollectionUtils.isEmpty(accountIds)) {
error = "您没有权限";
map.put("error", error);
return map;
}
result = accountIds.contains(user.getId()) ? 1 : 0;
}
if (result.equals(0)) {
error = "您没有权限";
map.put("error", error);
return map;
}
TrSignAccount signAccount = new TrSignAccount();
signAccount.setId(idGenerator.generate());
signAccount.setAccountId(user.getId());
signAccount.setCode(param.getCode());
signAccount.setOpenId(param.getOpenId());
signAccount.setDeleted(0);
signAccount.setFullName(user.getFullName());
signAccount.setCreateById(user.getId());
signAccount.setCreateByName(user.getName());
signAccount.setCreateTime(date);
signAccountService.insert(signAccount);
map.put("success", JsonUtil.object2Json(user));
return map;
}
LOG.error(param.getCode() + "无效邀请码");
error = "无效邀请码,请重新输入";
map.put("error", error);
return map;
}
@ApiOperation(value = "小程序签到详情", notes = "小程序签到详情", response = ApiSignTimeVO.class)
@GetMapping("/signDetail")
public ApiSignTimeVO signDetail(
@ApiParam(name = "accountId", value = "用户id ", required = true) @RequestParam(name = "accountId", required = true) Long accountId,
@ApiParam(name = "code", value = "项目签到邀请码", required = true) @RequestParam(name = "code", required = true) String code,
@ApiParam(name = "trainingProjectId", value = "培训项目id ", required = false) @RequestParam(name = "trainingProjectId", required = false) Long trainingProjectId) {
ApiSignTimeVO vo = signService.getSignTimeDeatil(accountId, code, trainingProjectId);
return vo;
}
@ApiOperation(value = "小程序签到切换用户", notes = "小程序签到切换用户")
@GetMapping("/delRelation")
public String delRelation(
@ApiParam(name = "accountId", value = "用户id ", required = true) @RequestParam(name = "accountId", required = true) Long accountId,
@ApiParam(name = "code", value = "项目签到邀请码", required = true) @RequestParam(name = "code", required = true) String code,
@ApiParam(name = "openId", value = "微信小程序openId", required = true) @RequestParam(name = "openId", required = true) String openId) {
TrSignAccount signAccount = new TrSignAccount();
signAccount.setAccountId(accountId);
signAccount.setCode(code);
signAccount.setOpenId(openId);
signAccount.setDeleted(0);
TrSignAccount one = signAccountService.selectOne(new EntityWrapper<TrSignAccount>(signAccount));
if (one == null) {
return "error";
}
one.setUpdateById(accountId);
one.setUpdateTime(new Date());
one.setDeleted(1);
signAccountService.updateById(one);
return "success";
}
@GetMapping("/insert")
public String insert(
@ApiParam(name = "accountId", value = "用户id ", required = true) @RequestParam(name = "accountId", required = true) Long accountId,
@ApiParam(name = "trainingProjectId", value = "项目id ", required = true) @RequestParam(name = "trainingProjectId", required = true) Long trainingProjectId,
@ApiParam(name = "signTimeId", value = "签到id ", required = true) @RequestParam(name = "signTimeId", required = true) Long signTimeId) {
try {
// 查询是否签到
String result = signService.sign(accountId, String.valueOf(trainingProjectId),
String.valueOf(signTimeId), 0);
LOG.info(result);
return result;
} catch (Exception e) {
LOG.error("", e);
return "不存在此签到";
}
}
}
package com.yizhi.application.controller.remote;
import com.yizhi.application.domain.TrSign;
import com.yizhi.application.orm.id.IdGenerator;
import com.yizhi.application.service.SignService;
import com.yizhi.util.application.domain.Response;
import com.yizhi.sign.application.vo.SignIdVO;
import com.yizhi.sign.application.vo.SignQrcodeVO;
import com.yizhi.sign.application.vo.SignVO;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* <p>
* 签到主体表,入口在培训项目 前端控制器 管理端
* </p>
*
* @author fanchunhui123
* @since 2018-03-07
*/
@RestController
@RequestMapping("/remote/manage/sign")
public class RemoteSignManageController {
private static final Logger LOG = LoggerFactory.getLogger(RemoteSignManageController.class);
@Autowired
SignService signService;
@Autowired
IdGenerator idGenerator;
@PostMapping(value = "/insert")
public Long insert(@ApiParam(value = "签到主体表", required = true) @RequestBody SignVO signVO) {
try {
Long id = idGenerator.generate();
signVO.setId(id);
boolean result = signService.insertSignAndSignTimeAndSignRemind(signVO);
if(!result){
id = null;
}
return id;
} catch (Exception e) {
LOG.error("新建签到失败!", e);
return null;
}
}
@PostMapping(value = "/view")
public SignVO getSign(@ApiParam(value = "培训项目id", required = true) @RequestBody SignIdVO signIdVO) {
SignVO signVO = null;
try {
signVO = signService.querySign(signIdVO.getId());
return signVO;
} catch (Exception e) {
LOG.error("新建签到失败!", e);
return signVO;
}
}
@PostMapping("/update")
public boolean update(@ApiParam(value = "签到主体表", required = true) @RequestBody SignVO signVO) {
try {
boolean result = signService.updateSignAndSignTimeAndSignRemind(signVO);
return result;
} catch (Exception e) {
LOG.error("编辑签到失败!", e);
return false;
}
}
@PostMapping("/report")
public Response<String> report() {
return Response.ok();
}
@PostMapping("/report/export")
public Response<String> reportExport(@ApiParam(value = "培训项目ID", required = true) String trainingProjectId) {
return Response.ok();
}
@PostMapping("/delete")
public boolean deleteByProjectId(@RequestBody SignIdVO signIdVO) {
return signService.deleteSignByProjectId(signIdVO);
}
/**
* 获取生成的二维码Url
*
* @param signIdVO
* @return
*/
@PostMapping("/qrcode/get")
public List<SignQrcodeVO> qrcode(@RequestBody SignIdVO signIdVO) {
try {
// 校验培训项目id
if (StringUtils.isBlank(String.valueOf(signIdVO.getId()))) {
return null;
}
// TODO 目前没有项目
// 查询生成二维码必需参数
List<SignQrcodeVO> resultList = signService.querySignTime(signIdVO.getId());
LOG.info("成功获取生成二维码必需数据");
return resultList;
} catch (Exception e) {
LOG.error("", e);
return null;
}
}
@ApiOperation("根据签到id获取签到")
@GetMapping("/one/get")
public com.yizhi.sign.application.vo.domain.TrSign getSign(
@RequestParam(name = "signId" )Long signId
){
TrSign trSign = signService.selectById(signId);
com.yizhi.sign.application.vo.domain.TrSign trSign1 = new com.yizhi.sign.application.vo.domain.TrSign();
BeanUtils.copyProperties(trSign,trSign1);
return trSign1;
}
@ApiOperation("根据签到时间段id获取签到")
@GetMapping("/time/get")
public com.yizhi.sign.application.vo.domain.TrSign getSignByTime(@RequestParam(name = "signTimeId" )Long signId){
TrSign trSign = signService.selectByTimeId(signId);
com.yizhi.sign.application.vo.domain.TrSign trSign1 = new com.yizhi.sign.application.vo.domain.TrSign();
BeanUtils.copyProperties(trSign,trSign1);
return trSign1;
}
}
package com.yizhi.application.controller.remote;
import com.yizhi.core.application.context.ContextHolder;
import com.yizhi.core.application.context.RequestContext;
import com.yizhi.application.domain.TrSignRecord;
import com.yizhi.application.export.ExportSignRecord;
import com.yizhi.application.service.SignRecordService;
import com.yizhi.util.application.domain.Response;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiParam;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* <p>
* 签到记录表 前端控制器 学员端
* </p>
*
* @author fanchunhui123
* @since 2018-03-07
*/
@Api(tags = "签到-学员端", description = "签到记录表学员端接口")
@RestController
@RequestMapping("/remote/api/sign/record")
public class RemoteSignRecordController {
Logger logger = LoggerFactory.getLogger(RemoteSignRecordController.class);
@Autowired
SignRecordService signRecordService;
@Autowired
ExportSignRecord exportSignRecord;
/**
* 签到记录信息
*
* @param trainingProjectId
* @return
*/
@PostMapping("/list")
public Response<String> list(
@ApiParam(value = "培训项目ID", required = true) String trainingProjectId) {
return Response.ok();
}
/**
* 我的签到总数量
*
* @param accountId 学员ID
* @return
*/
@GetMapping("/count")
public Integer selectSignRecordCountByAccountId(@RequestParam("accountId") Long accountId) {
Integer count = signRecordService.selectCountByAccountId(accountId);
if (null == count) {
count = 0;
}
return count;
}
/**
* 获取签到完成数量( PC 端 学习统计签到 完成数量)
*
* @param trainingProjectId 培训项目ID
* @return
*/
@GetMapping("/pc/finishedCount")
public Integer selectCountByTrainingProjectId(@RequestParam("trainingProjectId") Long trainingProjectId, @RequestParam("accountId") Long accountId) {
logger.info("trainingProjectId为:" + trainingProjectId + "accountId:" + accountId);
Integer count = signRecordService.selectCountByTrainingProjectId(trainingProjectId, accountId);
if (null == count) {
count = 0;
}
logger.info("已完成的签到数量为:" + count);
return count;
}
/**
* 签到记录导出
*
* @param trainingProjectId
* @return
*/
@GetMapping("/export")
public String exportSignRecord(@RequestParam(name = "trainingProjectId") Long trainingProjectId) {
Map<String, Object> map = new HashMap<>();
RequestContext res = ContextHolder.get();
Long taskId = System.currentTimeMillis();
String serialNo = "SIGN-RECORD-EXPORT" + taskId.toString();
String taskName = "签到记录导出" + taskId.toString();
map.put("taskId", taskId);
map.put("serialNo", serialNo);
map.put("taskName", taskName);
map.put("res", res);
map.put("trainingProjectId", trainingProjectId);
exportSignRecord.execute(map, true);
return serialNo;
}
@PostMapping("/insert")
public boolean insertSignRecordList(@RequestBody List<TrSignRecord> signRecordList) {
return signRecordService.insertSignRecordList(signRecordList);
}
}
package com.yizhi.application.controller.remote;
import com.baomidou.mybatisplus.plugins.Page;
import com.yizhi.application.domain.StatisticsSign;
import com.yizhi.application.domain.StatisticsSignLearn;
import com.yizhi.application.domain.TrSign;
import com.yizhi.application.domain.TrSignTime;
import com.yizhi.application.mapper.StatisticsSignMapper;
import com.yizhi.application.orm.util.DomainConverter;
import com.yizhi.application.service.SignTimeService;
import com.yizhi.application.service.StatisticsSignService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
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.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
import java.util.List;
@RestController
@RequestMapping("/remote/statisticsSign")
public class RemoteStatisticsSignController {
// @Autowired
// private StatisticsSignRun statisticsSignRun;
@Autowired
private StatisticsSignService statisticsSignService;
@Autowired
private SignTimeService signTimeService;
@Autowired
private StatisticsSignMapper statisticsSignMapper;
@Autowired
DomainConverter domainConverter;
// @GetMapping("/asynchronous/load/data")
// public Response<String> asynchronousSign(@RequestParam("startDate") String startDate, @RequestParam("endDate") String endDate) {
// Map<String, Object> map = new HashMap<String, Object>();
// map.put("startDate", startDate);
// map.put("endDate", endDate);
// statisticsSignRun.execute(map, true);
// return Response.ok();
// }
@ApiOperation(value = "各项目的签到统计", notes = "各项目的签到统计")
@GetMapping("/group")
public Page<com.yizhi.sign.application.vo.domain.StatisticsSign> signPage(@RequestParam(name = "projectId", required = false) Long projectId,
@RequestParam(name = "kwd", required = false) String kwd,
@RequestParam(name = "startDate", required = false) String startDate,
@RequestParam(name = "endDate", required = false) String endDate,
@RequestParam(name = "signCompanyId", required = false) Long signCompanyId,
@RequestParam(name = "signOrgIds", required = false) List<Long> signOrgIds,
@RequestParam(name = "signSiteId", required = false) Long signSiteId,
@RequestParam(name = "pageNo", required = false) Integer pageNo,
@RequestParam(name = "pageSize", required = false) Integer pageSize) {
return statisticsSignService.statisticsSignPage(projectId, kwd, startDate, endDate, signCompanyId, signOrgIds, signSiteId, pageNo, pageSize);
}
@ApiOperation(value = "某个项目的签到统计", notes = "某个项目的签到统计")
@GetMapping("/group/view")
public Page<com.yizhi.sign.application.vo.domain.StatisticsSign> signView(
@RequestParam(name = "id", required = true) Long id,
@RequestParam(name = "projectId", required = true) Long projectId,
@RequestParam(name = "startDate", required = false) String startDate,
@RequestParam(name = "endDate", required = false) String endDate,
@RequestParam(name = "orgNameOrCode", required = false) String orgNameOrCode,
@RequestParam(name = "accountName", required = false) String accountName,
@RequestParam(name = "pageNo", required = false) Integer pageNo,
@RequestParam(name = "pageSize", required = false) Integer pageSize) {
Page<StatisticsSign> statisticsSignPage = statisticsSignService.statisticsSignView(id, projectId, startDate, endDate, orgNameOrCode, accountName, pageNo, pageSize);
Page<com.yizhi.sign.application.vo.domain.StatisticsSign> page = new Page<>(pageNo,pageSize);
BeanUtils.copyProperties(statisticsSignPage,page);
return page;
}
@ApiOperation(value = "图形报表", notes = "图形报表")
@GetMapping("/chart/group")
public List<com.yizhi.sign.application.vo.domain.StatisticsSign> chartGroup(@RequestParam(name = "trainningProjectId", required = false) Long trainningProjectId,
@RequestParam(name = "startDate", required = false) String startDate,
@RequestParam(name = "endDate", required = false) String endDate,
@RequestParam(name = "signCompanyId", required = false) Long signCompanyId,
@RequestParam(name = "signOrgIds", required = false) List<Long> signOrgIds,
@RequestParam(name = "signSiteId", required = false) Long signSiteId) {
List<StatisticsSign> statisticsSigns = statisticsSignService.chartGroup(trainningProjectId, startDate, endDate, signCompanyId, signOrgIds, signSiteId);
return domainConverter.toDOList(statisticsSigns, com.yizhi.sign.application.vo.domain.StatisticsSign.class);
}
@ApiOperation(value = "各项目的签到统计个数", notes = "各项目的签到统计个数")
@GetMapping("/group/count")
public Integer signPageCount(@RequestParam(name = "projectId", required = false) Long projectId,
@RequestParam(name = "startDate", required = false) String startDate,
@RequestParam(name = "endDate", required = false) String endDate,
@RequestParam(name = "signCompanyId", required = false) Long signCompanyId,
@RequestParam(name = "signOrgIds", required = false) List<Long> signOrgIds,
@RequestParam(name = "signSiteId", required = false) Long signSiteId) {
return statisticsSignService.statisticsSignPageCount(projectId, startDate, endDate, signCompanyId, signOrgIds, signSiteId);
}
@ApiOperation(value = "各项目的签到统计列表", notes = "各项目的签到统计")
@GetMapping("/group/list")
public List<com.yizhi.sign.application.vo.domain.StatisticsSign> signPageList(@RequestParam(name = "projectId", required = false) Long projectId,
@RequestParam(name = "startDate", required = false) String startDate,
@RequestParam(name = "endDate", required = false) String endDate,
@RequestParam(name = "signCompanyId", required = false) Long signCompanyId,
@RequestParam(name = "signOrgIds", required = false) List<Long> signOrgIds,
@RequestParam(name = "signSiteId", required = false) Long signSiteId,
@RequestParam(name = "pageNo", required = false) Integer pageNo,
@RequestParam(name = "pageSize", required = false) Integer pageSize) {
List<StatisticsSign> statisticsSigns = statisticsSignService.statisticsSignList(projectId, startDate, endDate, signCompanyId, signOrgIds, signSiteId, pageNo, pageSize);
return domainConverter.toDOList(statisticsSigns, com.yizhi.sign.application.vo.domain.StatisticsSign.class);
}
@ApiOperation(value = "某个项目的签到统计个数", notes = "某个项目的签到统计个数")
@GetMapping("/group/view/count")
public Integer signViewCount(
@RequestParam(name = "id", required = true) Long id,
@RequestParam(name = "projectId", required = true) Long projectId,
@RequestParam(name = "startDate", required = false) String startDate,
@RequestParam(name = "endDate", required = false) String endDate,
@RequestParam(name = "orgNameOrCode", required = false) String orgNameOrCode,
@RequestParam(name = "accountName", required = false) String accountName) {
return statisticsSignService.statisticsSignViewCount(id, projectId, startDate, endDate, orgNameOrCode, accountName);
}
@ApiOperation(value = "某个项目的签到统计个数列表", notes = "某个项目的签到统计个数列表")
@GetMapping("/group/view/list")
public List<com.yizhi.sign.application.vo.domain.StatisticsSign> signViewList(
@RequestParam(name = "id", required = true) Long id,
@RequestParam(name = "projectId", required = true) Long projectId,
@RequestParam(name = "startDate", required = false) String startDate,
@RequestParam(name = "endDate", required = false) String endDate,
@RequestParam(name = "orgNameOrCode", required = false) String orgNameOrCode,
@RequestParam(name = "accountName", required = false) String accountName,
@RequestParam(name = "pageNo", required = false) Integer pageNo,
@RequestParam(name = "pageSize", required = false) Integer pageSize) {
List<StatisticsSign> statisticsSigns = statisticsSignService.statisticsSignViewList(id, projectId, startDate, endDate, orgNameOrCode, accountName, pageNo, pageSize);
return domainConverter.toDOList(statisticsSigns,com.yizhi.sign.application.vo.domain.StatisticsSign.class);
}
@ApiOperation(value = "获取签到时间段", notes = "获取签到时间段")
@GetMapping("/group/getSignTime")
public com.yizhi.sign.application.vo.domain.TrSignTime getSignTime(@RequestParam("getSignTime") Long signTimeId) {
TrSignTime trSignTime = signTimeService.selectById(signTimeId);
com.yizhi.sign.application.vo.domain.TrSignTime trSignTime1 = new com.yizhi.sign.application.vo.domain.TrSignTime();
BeanUtils.copyProperties(trSignTime,trSignTime1);
return trSignTime1;
}
@GetMapping("/group/selectRecordMinTime")
Date selectRecordMinTime() {
return statisticsSignMapper.selectRecordMinTime();
}
@GetMapping("/group/getAllResearchs")
List<com.yizhi.sign.application.vo.domain.TrSign> getAllResearchs(@RequestParam("startDate") String startDate, @RequestParam("endDate") String endDate) {
List<TrSign> allResearchs = statisticsSignMapper.getAllResearchs(startDate, endDate);
return domainConverter.toDOList(allResearchs,com.yizhi.sign.application.vo.domain.TrSign.class);
}
@GetMapping("/group/getRecords")
List<com.yizhi.sign.application.vo.domain.StatisticsSignLearn> getRecords(@RequestParam("signTimeId") Long signTimeId, @RequestParam("startDate") String startDate, @RequestParam("endDate") String endDate) {
List<StatisticsSignLearn> records = statisticsSignMapper.getRecords(signTimeId, startDate, endDate);
return domainConverter.toDOList(records,com.yizhi.sign.application.vo.domain.StatisticsSignLearn.class);
}
}
package com.yizhi.application.controller.remote;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* <p>
* 签到记录表 前端控制器 内部api
* </p>
*
* @author fanchunhui123
* @since 2018-03-07
*/
@Controller
@RequestMapping("/trSignRecord")
public class SignRecordRemoteController {
}
package com.yizhi.application.controller.remote;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* <p>
* 签到提醒时间,一个sign_time对应一个sign_time 前端控制器 内部api
* </p>
*
* @author fanchunhui123
* @since 2018-03-07
*/
@Controller
@RequestMapping("/trSignRemind")
public class SignRemindRemoteController {
}
package com.yizhi.application.controller.remote;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* <p>
* 签到主体表,入口在培训项目 前端控制器 内部api
* </p>
*
* @author fanchunhui123
* @since 2018-03-07
*/
@Controller
@RequestMapping("/trSign")
public class SignRemoteController {
}
package com.yizhi.application.controller.remote;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* <p>
* 签到时间段,一个 sign 对应多个 sign_time 前端控制器 内部api
* </p>
*
* @author fanchunhui123
* @since 2018-03-07
*/
@Controller
@RequestMapping("/trSignTime")
public class SignTimeRemoteController {
}
package com.yizhi.application.domain;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
@Data
@Api(tags = "StatisticsSign", description = "签到统计表")
@TableName("statistics_sign_metadata")
public class StatisticsSign {
@ApiModelProperty(value = "自增")
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@ApiModelProperty(value = "签到id")
@TableField("sign_id")
private Long signId;
@ApiModelProperty(value = "签到时间段id")
@TableField("sign_time_id")
private Long signTimeId;
@ApiModelProperty(value = "培训项目id")
@TableField("trainning_project_id")
private Long trainningProjectId;
@ApiModelProperty(value = "签到编号")
@TableField("sign_no")
private String signNo;
@ApiModelProperty(value = "签到名称")
@TableField("sign_name")
private String signName;
@ApiModelProperty(value = "培训项目名称")
@TableField("trainning_project_name")
private String trainningProjectName;
@ApiModelProperty(value = "签到开始时间")
@TableField("sign_start_time")
private Date signStartTime;
@ApiModelProperty(value = "签到结束时间")
@TableField("sign_end_time")
private Date signEndTime;
@ApiModelProperty(value = "创建签到的公司Id")
@TableField("sign_company_id")
private Long signCompanyId;
@ApiModelProperty(value = "创建签到的组织id")
@TableField("sign_org_id")
private Long signOrgId;
@ApiModelProperty(value = "创建签到的站点id")
@TableField("sign_site_id")
private Long signSiteId;
@ApiModelProperty(value = "签到创建时间")
@TableField("sign_create_time")
private Date signCreateTime;
@ApiModelProperty(value = "项目创建时间")
@TableField("project_create_time")
private Date projectCreateTime;
@ApiModelProperty(value = "用户id")
@TableField("account_id")
private Long accountId;
@ApiModelProperty(value = "用户编号")
@TableField("account_work_num")
private String accountWorkNum;
@ApiModelProperty(value = "用户名")
@TableField("account_name")
private String accountName;
@ApiModelProperty(value = "用户姓名")
@TableField("account_fullname")
private String accountFullname;
@ApiModelProperty(value = "用户状态")
@TableField("account_state")
private Integer accountState;
@ApiModelProperty(value = "用户公司id")
@TableField("account_company_id")
private Long accountCompanyId;
@ApiModelProperty(value = "用户组织id")
@TableField("account_org_id")
private Long accountOrgId;
@ApiModelProperty(value = "用户站点id")
@TableField("account_site_id")
private Long accountSiteId;
@ApiModelProperty(value = "签到时间")
@TableField("sign_time")
private Date signTime;
@ApiModelProperty(value = "用户组织名称")
@TableField("org_name")
private String orgName;
@ApiModelProperty(value = "用户所有父类组织")
@TableField("org_parent_names")
private String orgParentNames;
@ApiModelProperty(value = "应签到")
@TableField("can_state")
private Integer canState;
@ApiModelProperty(value = "实际签到")
@TableField("join_state")
private Integer joinState;
@ApiModelProperty(value = "应签到人数")
@TableField(exist = false)
private Integer canStateCount;
@ApiModelProperty(value = "实际签到人数")
@TableField(exist = false)
private Integer joinStateCount;
@ApiModelProperty(value = "未签到人数")
@TableField(exist = false)
private Integer notSignCount;
@ApiModelProperty(value = "签到地点")
@TableField("address")
private String address;
@ApiModelProperty(value = "签到范围")
@TableField("range")
private String range;
}
package com.yizhi.application.domain;
import com.baomidou.mybatisplus.annotations.TableName;
import com.yizhi.sign.application.vo.domain.StatisticsSign;
import io.swagger.annotations.Api;
import lombok.Data;
@Data
@Api(tags = "StatisticsSignLearn", description = "签到明细")
@TableName("statistics_sign_learn_metadata")
public class StatisticsSignLearn extends StatisticsSign {
private static final long serialVersionUID = -1170397195805248674L;
}
package com.yizhi.application.domain;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.FieldFill;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* <p>
* 签到主体表,入口在培训项目
* </p>
*
* @author fanchunhui123
* @since 2018-03-07
*/
@Data
@Api(tags = "TrSign", description = "签到主体表,入口在培训项目")
@TableName("tr_sign")
public class TrSign extends Model<TrSign> {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键id")
private Long id;
@ApiModelProperty(value = "培训项目id")
@TableField("training_project_id")
private Long trainingProjectId;
@ApiModelProperty(value = "签到名称")
private String name;
@ApiModelProperty(value = "0:生成一张,1:按时间段生成多张")
private Integer type;
@ApiModelProperty(value = "是否消息提醒(分钟),0不提醒")
@TableField("remind_time")
private Integer remindTime;
@ApiModelProperty(value = "是否开启补签(0:否,1:是),默认否")
@TableField("enable_retroactive")
private Integer enableRetroactive;
@ApiModelProperty(value = "是否开启邮件提醒(0:否,1:是),默认否。")
@TableField("enable_remind_mail")
private Integer enableRemindMail;
@ApiModelProperty(value = "是否开启短信提醒(0:否,1:是),默认否。")
@TableField("enable_remind_note")
private Integer enableRemindNote;
@ApiModelProperty(value = "是否开启app推送签到提醒,默认0")
@TableField("enable_remind_app")
private String enableRemindApp;
@ApiModelProperty(value = "邮件模板")
@TableField("mail_remind_template_id")
private Long mailRemindTemplateId;
@ApiModelProperty(value = "app消息推送模板")
@TableField("app_remind_template_id")
private Long appRemindTemplateId;
@ApiModelProperty(value = "提醒内容")
@TableField("remind_content")
private String remindContent;
@ApiModelProperty(value = "企业id")
@TableField("company_id")
private Long companyId;
@ApiModelProperty(value = "站点id")
@TableField("site_id")
private Long siteId;
@TableField("org_id")
private Long orgId;
@ApiModelProperty(value = "创建者id")
@TableField(value = "create_by_id", fill = FieldFill.INSERT)
private Long createById;
@ApiModelProperty(value = "创建者名称")
@TableField(value = "create_by_name", fill = FieldFill.INSERT)
private String createByName;
@ApiModelProperty(value = "创建时间")
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
@ApiModelProperty(value = "更新者id")
@TableField(value = "update_by_id", fill = FieldFill.INSERT)
private Long updateById;
@ApiModelProperty(value = "修改者名称")
@TableField(value = "update_by_name", fill = FieldFill.INSERT)
private String updateByName;
@ApiModelProperty(value = "修改时间")
@TableField(value = "update_time", fill = FieldFill.INSERT)
private Date updateTime;
@ApiModelProperty(value = "是否删除:0.未删除 1.已删除")
private Integer state;
@ApiModelProperty(value = "可见范围")
@TableField(exist = false)
private Integer visibleRange;
@ApiModelProperty("培训项目名称")
@TableField(exist = false)
private String trainningProjectName;
@ApiModelProperty("培训项目创建时间")
@TableField(exist = false)
private Date projectCreateTime;
@ApiModelProperty("签到时间段id")
@TableField(exist = false)
private Long signTimeId;
@ApiModelProperty("某个签到的开始时间")
@TableField(exist = false)
private Date signStartDate;
@ApiModelProperty("某个签到的结束时间")
@TableField(exist = false)
private Date signEndDate;
@ApiModelProperty(value = "是否开启定位(0:否,1:是),默认否")
@TableField("enable_position")
private Integer enablePosition;
@ApiModelProperty(value = "签到地点")
@TableField("address")
private String address;
@ApiModelProperty(value = "签到范围")
@TableField("range")
private String range;
@Override
protected Serializable pkVal() {
return this.id;
}
}
package com.yizhi.application.domain;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.FieldFill;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
@Data
@Api(tags = "TrSignAccount", description = "小程序签到绑定关系表")
@TableName("tr_sign_account")
public class TrSignAccount {
@ApiModelProperty(value = "主键id")
private Long id;
@ApiModelProperty(value = "用户id")
@TableField(value = "account_id")
private Long accountId;
@ApiModelProperty(value = "小程序openId")
@TableField(value = "open_id")
private String openId;
@ApiModelProperty(value = "是否解绑(0:否,1:是) 默认0")
private Integer deleted;
@ApiModelProperty(value = "签到邀请码")
private String code;
@ApiModelProperty(value = "创建者id")
@TableField(value = "create_by_id", fill = FieldFill.INSERT)
private Long createById;
@ApiModelProperty(value = "姓名")
@TableField(value = "full_name", fill = FieldFill.INSERT)
private String fullName;
@ApiModelProperty(value = "创建者名称")
@TableField(value = "create_by_name", fill = FieldFill.INSERT)
private String createByName;
@ApiModelProperty(value = "创建时间")
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
@ApiModelProperty(value = "更新者id")
@TableField(value = "update_by_id", fill = FieldFill.INSERT)
private Long updateById;
@ApiModelProperty(value = "修改者名称")
@TableField(value = "update_by_name", fill = FieldFill.INSERT)
private String updateByName;
@ApiModelProperty(value = "修改时间")
@TableField(value = "update_time", fill = FieldFill.INSERT)
private Date updateTime;
}
package com.yizhi.application.domain;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableName;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* <p>
* 签到记录表
* </p>
*
* @author fanchunhui123
* @since 2018-03-07
*/
@Data
@Api(tags = "TrSignRecord", description = "签到记录表")
@TableName("tr_sign_record")
public class TrSignRecord extends Model<TrSignRecord> {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键id")
private Long id;
@ApiModelProperty(value = "签到id")
@TableField("sign_id")
private Long signId;
@ApiModelProperty(value = "培训项目id")
@TableField("training_project_id")
private Long trainingProjectId;
@ApiModelProperty(value = "账号id")
@TableField("account_id")
private Long accountId;
@ApiModelProperty(value = "签到时间")
@TableField("sign_time")
private Date signTime;
@ApiModelProperty(value = "签到状态:0:正常签到,1:补签。默认0。")
@TableField("sign_status")
private Integer signStatus;
@ApiModelProperty(value = "签到类型:0:平台签到,1:自定义项目。默认0。")
@TableField("type")
private Integer type;
@ApiModelProperty(value = "创建时间")
@TableField("create_time")
private Date createTime;
@ApiModelProperty(value = "签到地点")
@TableField("address")
private String address;
@Override
protected Serializable pkVal() {
return this.id;
}
}
package com.yizhi.application.domain;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.FieldFill;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* <p>
* 签到提醒时间,一个sign_time对应一个sign_time
* </p>
*
* @author fanchunhui123
* @since 2018-03-07
*/
@Data
@Api(tags = "TrSignRemind", description = "签到提醒时间,一个sign_time对应一个sign_time")
@TableName("tr_sign_remind")
public class TrSignRemind extends Model<TrSignRemind> {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键id")
private Long id;
@ApiModelProperty(value = "签到时间段id")
@TableField("sign_time_id")
private Long signTimeId;
@ApiModelProperty(value = "提醒时间")
@TableField("remind_time")
private Date remindTime;
@ApiModelProperty(value = "创建者id")
@TableField(value = "create_by_id", fill = FieldFill.INSERT)
private Long createById;
@ApiModelProperty(value = "创建者名称")
@TableField(value = "create_by_name", fill = FieldFill.INSERT)
private String createByName;
@ApiModelProperty(value = "创建时间")
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
@ApiModelProperty(value = "更新者id")
@TableField(value = "update_by_id", fill = FieldFill.INSERT)
private Long updateById;
@ApiModelProperty(value = "修改者名称")
@TableField(value = "update_by_name", fill = FieldFill.INSERT)
private String updateByName;
@ApiModelProperty(value = "修改时间")
@TableField(value = "update_time", fill = FieldFill.INSERT)
private Date updateTime;
@Override
protected Serializable pkVal() {
return this.id;
}
}
package com.yizhi.application.domain;
import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.FieldFill;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* <p>
* 签到时间段,一个 sign 对应多个 sign_time
* </p>
*
* @author fanchunhui123
* @since 2018-03-07
*/
@Data
@Api(tags = "TrSignTime", description = "签到时间段,一个 sign 对应多个 sign_time")
@TableName("tr_sign_time")
public class TrSignTime extends Model<TrSignTime> {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键id")
private Long id;
@ApiModelProperty(value = "冗余项目id")
@TableField("training_project_id")
private Long trainingProjectId;
@ApiModelProperty(value = "签名id")
@TableField("sign_id")
private Long signId;
@ApiModelProperty(value = "有效签到时间区间左值")
@TableField("start_time")
private Date startTime;
@ApiModelProperty(value = "有效签到时间区间右值")
@TableField("end_time")
private Date endTime;
@ApiModelProperty(value = "是否停用(0:否,1:是) 默认0")
private Integer deleted;
@ApiModelProperty(value = "创建者id")
@TableField(value = "create_by_id", fill = FieldFill.INSERT)
private Long createById;
@ApiModelProperty(value = "创建者名称")
@TableField(value = "create_by_name", fill = FieldFill.INSERT)
private String createByName;
@ApiModelProperty(value = "创建时间")
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
@ApiModelProperty(value = "更新者id")
@TableField(value = "update_by_id", fill = FieldFill.INSERT)
private Long updateById;
@ApiModelProperty(value = "修改者名称")
@TableField(value = "update_by_name", fill = FieldFill.INSERT)
private String updateByName;
@ApiModelProperty(value = "修改时间")
@TableField(value = "update_time", fill = FieldFill.INSERT)
private Date updateTime;
@ApiModelProperty(value = "是否开启定位(0:否,1:是),默认否")
@TableField("enable_position")
private Integer enablePosition;
@ApiModelProperty(value = "签到地点")
@TableField("address")
private String address;
@ApiModelProperty(value = "签到范围")
@TableField("range")
private String range;
@ApiModelProperty(value = "签到积分")
@TableField("point")
private Integer point;
@ApiModelProperty(value = "邀请码")
@TableField("code")
private String code;
@ApiModelProperty(value = "经度")
@TableField("longitude")
private Double longitude;
@ApiModelProperty(value = "纬度")
@TableField("latitude")
private Double latitude;
@Override
protected Serializable pkVal() {
return this.id;
}
}
package com.yizhi.application.export;
import com.baomidou.mybatisplus.toolkit.CollectionUtils;
import com.yizhi.core.application.context.RequestContext;
import com.yizhi.core.application.context.TaskContext;
import com.yizhi.core.application.file.constant.FileConstant;
import com.yizhi.core.application.file.task.AbstractDefaultTask;
import com.yizhi.core.application.file.util.OssUpload;
import com.yizhi.application.service.SignRecordService;
import com.yizhi.sign.application.vo.ExportSignRecordVO;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.File;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* @Auther: ding
* @Date: 2019/06/04
* @Description:按考试统计查看结果下载
*/
@Component
public class ExportSignRecord extends AbstractDefaultTask<String, Map<String, Object>> {
private static final Logger LOGGER = LoggerFactory.getLogger(ExportSignRecord.class);
@Autowired
private SignRecordService signRecordService;
@Override
protected String execute(Map<String, Object> map) {
String uploadUrl = null;
Long trainingProjectId = (Long) map.get("trainingProjectId");
RequestContext res = (RequestContext) map.get("res");
Long accountId = res.getAccountId();
Long siteId = res.getSiteId();
Long companyId = res.getCompanyId();
boolean isAdmin = res.isAdmin();
Date comitTime = new Date();
Long taskId = (Long) map.get("taskId");
String serialNo = (String) map.get("serialNo");
String taskName = (String) map.get("taskName");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyyMMddHHmmss");
TaskContext taskContext = new TaskContext(taskId, serialNo, taskName, accountId, comitTime, siteId, companyId);
working(taskContext);
List<ExportSignRecordVO> list = null;
try {
list = signRecordService.exportSignRecord(accountId, isAdmin, siteId, trainingProjectId);
} catch (Exception e) {
LOGGER.info("签到记录明细获取数据过程中出现错误", e);
fail(taskContext, "签到记录明细获取数据过程中出现错误");
}
try {
if (CollectionUtils.isEmpty(list)) {
success(taskContext, "未找到数据", "");
}
String traningProjectName = list.get(0).getTainingProjectName();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
XSSFWorkbook wb = new XSSFWorkbook();
XSSFSheet sheet = wb.createSheet("签到记录明细表");
XSSFRow row = sheet.createRow(0);
// HSSFCellStyle cellStyle = wb.createCellStyle();
// //水平居中
// cellStyle.setAlignment(HorizontalAlignment.CENTER);
// //垂直居中
// cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
// HSSFFont font = wb.createFont();
// //字体加粗
// font.setBold(true);
// //字体大小14
// font.setFontHeightInPoints((short) 14);
//
// cellStyle.setFont(font);
CellRangeAddress cra = new CellRangeAddress(0, 0, 0, 12);
sheet.addMergedRegion(cra);
XSSFCell cell = row.createCell(0);
// cell.setCellStyle(cellStyle);
cell.setCellValue(traningProjectName + "签到记录明细表");
row = sheet.createRow(1);
cra = new CellRangeAddress(1, 1, 0, 12);
sheet.addMergedRegion(cra);
cell = row.createCell(0);
cell.setCellValue("统计周期:截止:" + sdf.format(new Date()));
XSSFRow row2 = sheet.createRow(2);
row2.createCell(0).setCellValue("项目名称");
row2.createCell(1).setCellValue("签到时间段");
row2.createCell(2).setCellValue("用户名");
row2.createCell(3).setCellValue("姓名");
row2.createCell(4).setCellValue("签到状态");
row2.createCell(5).setCellValue("签到时间");
row2.createCell(6).setCellValue("所在部门");
row2.createCell(7).setCellValue("用户状态");
if (CollectionUtils.isNotEmpty(list)) {
for (ExportSignRecordVO recordVO : list) {
row = sheet.createRow(list.indexOf(recordVO) + 3);
row.createCell(0).setCellValue(recordVO.getTainingProjectName() == null ? "--" : recordVO.getTainingProjectName());
row.createCell(1).setCellValue(sdf.format(recordVO.getStartTime()) + "~" + sdf.format(recordVO.getEndTime()));
row.createCell(2).setCellValue(recordVO.getAccountName() == null ? "--" : recordVO.getAccountName());
row.createCell(3).setCellValue(recordVO.getAccountFullName() == null ? "--" : recordVO.getAccountFullName());
if (recordVO.getSignState() == 0) {
row.createCell(4).setCellValue("未签到");
} else if (recordVO.getSignState() == 1) {
row.createCell(4).setCellValue("已签到");
} else if (recordVO.getSignState() == 2) {
row.createCell(4).setCellValue("已补签");
}
row.createCell(5).setCellValue(recordVO.getSignTime() == null ? "--" : sdf.format(recordVO.getSignTime()));
row.createCell(6).setCellValue(recordVO.getOrgName() == null ? "--" : recordVO.getOrgName());
row.createCell(7).setCellValue(recordVO.getAccountState() == 0 ? "停用" : "启用");
}
}
String fileName = traningProjectName + "签到记录明细表" + sdf2.format(comitTime) + ".xlsx";
// String requestPath = "/Users/dingxiaowei/aaa";
String requestPath = FileConstant.SAVE_PATH;
File fileDir = new File(requestPath);
if (!fileDir.exists()) {
fileDir.mkdir();
}
String path = requestPath + "/" + fileName;
FileOutputStream os = null;
File file = null;
try {
os = new FileOutputStream(path);
wb.write(os);
uploadUrl = OssUpload.upload(path, fileName);
file = new File(path);
success(taskContext, "成功", uploadUrl);
} catch (Exception e2) {
e2.printStackTrace();
fail(taskContext, "签到记录明细表,写入过程出现错误");
LOGGER.error("签到记录明细表,写入过程出现错误");
} finally {
if (os != null) {
os.close();
}
if (wb != null) {
wb.close();
}
if (file != null) {
file.delete();
}
}
} catch (Exception e) {
e.printStackTrace();
fail(taskContext, "签到记录明细表,下载考试结果数据出现错误");
LOGGER.error("签到记录明细表,下载考试结果数据出现错误");
}
return uploadUrl;
}
}
package com.yizhi.application.mapper;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.yizhi.application.domain.TrSignAccount;
public interface SignAccountMapper extends BaseMapper<TrSignAccount>{
}
package com.yizhi.application.mapper;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.yizhi.application.domain.TrSign;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;
/**
* <p>
* 签到主体表,入口在培训项目 Mapper 接口
* </p>
*
* @author fanchunhui123
* @since 2018-03-07
*/
public interface SignMapper extends BaseMapper<TrSign> {
@Update("update cloud_trainning_project.tr_sign set state = 1 where training_project_id = #{projectId}")
Integer deleteSignByProjectId(@Param("projectId") Long projectId);
}
package com.yizhi.application.mapper;
import java.util.List;
import com.yizhi.application.domain.TrSignTime;
import com.yizhi.application.domain.TrSignRecord;
import com.yizhi.sign.application.vo.ExportSignRecordVO;
import com.yizhi.training.application.vo.domain.TpAuthorizationRangeVo;
import com.yizhi.training.application.vo.domain.TrainingProjectVo;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.yizhi.sign.application.vo.TrSignRecordVo;
/**
* <p>
* 签到记录表 Mapper 接口
* </p>
*
* @author fanchunhui123
* @since 2018-03-07
*/
public interface SignRecordMapper extends BaseMapper<TrSignRecord> {
/**
* 获取我的签到
* @param accountId 学员ID
* @param month,月份可为空查询所有
* @return
*/
List<TrSignRecordVo> selectSignRecordListByAccountIdAndMonth(@Param("page") Page<TrSignRecordVo> page, @Param("accountId") Long accountId,
@Param("year") String year, @Param("month") String month);
@Select("SELECT COUNT(id) from tr_sign_record where account_id = #{accountId}")
Integer selectCountByAccountId(@Param("accountId")Long accountId);
/**
* 获取签到完成数量( PC 端 学习统计签到 完成数量)
* @param trainingProjectId
* @return
*/
@Select("SELECT COUNT(id) from tr_sign_record where training_project_id = #{trainingProjectId} and account_id = #{accountId}")
Integer selectCountByTrainingProjectId(@Param("trainingProjectId") Long trainingProjectId, @Param("accountId") Long accountId);
/**
* 查找培训项目
* @param trainingProjectId
* @return
*/
TrainingProjectVo getTainningProjectById(@Param("trainingProjectId") Long trainingProjectId);
/**
* 查找指定范围用户或者部门id
* @param trainingProjectId
* @return
*/
List<TpAuthorizationRangeVo> getAuthorizations(@Param("trainingProjectId") Long trainingProjectId);
/**
* 查找培训项目下所有签到时间段
* @param trainingProjectId
* @return
*/
List<TrSignTime> selectSignTimeList(@Param("trainingProjectId") Long trainingProjectId);
/**
* 获取某一时间段的签到记录
* @param signTimeId
* @param accountIds
* @return
*/
List<ExportSignRecordVO> exportSignRecord(@Param("signTimeId") Long signTimeId,@Param("accountIds") List<Long> accountIds);
}
package com.yizhi.application.mapper;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.yizhi.application.domain.TrSignRemind;
import org.apache.ibatis.annotations.Update;
/**
* <p>
* 签到提醒时间,一个sign_time对应一个sign_time Mapper 接口
* </p>
*
* @author fanchunhui123
* @since 2018-03-07
*/
public interface SignRemindMapper extends BaseMapper<TrSignRemind> {
@Update("update tr_sign_remind set remind_time = #{remindTime},update_by_id = #{updateById},update_by_name = #{updateByName},update_time = #{updateTime} where sign_time_id = #{signTimeId}")
public int updateBySignTimeId(TrSignRemind trSignRemind);
}
package com.yizhi.application.mapper;
import java.util.List;
import com.yizhi.application.domain.TrSign;
import com.yizhi.application.domain.TrSignTime;
import org.apache.ibatis.annotations.Param;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.yizhi.sign.application.vo.SignTimeVO;
/**
* <p>
* 签到时间段,一个 sign 对应多个 sign_time Mapper 接口
* </p>
*
* @author fanchunhui123
* @since 2018-03-07
*/
public interface SignTimeMapper extends BaseMapper<TrSignTime> {
int updateSignTimesStateBySignIdAndIds(@Param("signId")Long signId, @Param("times")List<SignTimeVO> times,
@Param("accountId")Long accountId, @Param("accountName")String accountName);
TrSign selectByTimeId(@Param("signTimeId") Long param);
}
package com.yizhi.application.mapper;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.yizhi.application.domain.StatisticsSign;
import com.yizhi.application.domain.StatisticsSignLearn;
import com.yizhi.application.domain.TrSign;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
import java.util.Map;
public interface StatisticsSignMapper extends BaseMapper<StatisticsSign> {
List<StatisticsSign> statisticsSignPage(@Param("projectId") Long projectId,
@Param("startDate") String startDate,
@Param("endDate") String endDate,
@Param("signCompanyId") Long signCompanyId,
@Param("signOrgIds") List<Long> signOrgIds,
@Param("signSiteId")Long signSiteId,
@Param("kwd") String kwd,
Page<StatisticsSign> page);
Integer statisticsSignCount(@Param("projectId") Long projectId,
@Param("startDate") String startDate,
@Param("endDate") String endDate,
@Param("signCompanyId") Long signCompanyId,
@Param("signOrgIds") List<Long> signOrgIds,
@Param("signSiteId")Long signSiteId);
List<StatisticsSign> statisticsSignView(
@Param("signId") Long signId,
@Param("signTimeId") Long signTimeId,
@Param("startDate") String statrDate,
@Param("endDate") String endDate,
@Param("orgNameOrCode") String orgNameOrCode,
@Param("accountName") String accountName,
Page<StatisticsSign> page);
Integer statisticsSignViewCount(
@Param("signId") Long signId,
@Param("signTimeId") Long signTimeId,
@Param("startDate") String statrDate,
@Param("endDate") String endDate,
@Param("orgNameOrCode") String orgNameOrCode,
@Param("accountName") String accountName);
List<StatisticsSign> chartGroup(@Param("projectId") Long trainnigProjectId,
@Param("startDate") String startDate,
@Param("endDate") String endDate,
@Param("signCompanyId") Long signCompanyId,
@Param("signOrgIds") List<Long> signOrgIds,
@Param("signSiteId")Long signSiteId);
Date selectMaxDate();
Date selectRecordMinTime();
List<TrSign> getAllResearchs(@Param("startDate") String startDate, @Param("endDate") String endDate);
void deleteRecordeByDate(@Param("currentDate") String currentDate);
/**
* 批量插入
* @param researchId
* @param currentDate
* @return
*/
int insertAccountLearn(@Param("researchId")Long researchId, @Param("currentDate")String currentDate);
/**
* 获取添加的签到信息
* @param researchId
* @param currentDate
* @return
*/
List<StatisticsSignLearn> selectAccountLearn(@Param("researchId")Long researchId, @Param("currentDate")String currentDate);
Integer selectEmptyCourseLearnCount(@Param("researchId")Long researchId);
void deleteEmptyAccountLearn();
Integer selectEmptyCourseAccountLearnCount(@Param("researchId")Long researchId, @Param("researchId") Long accountId);
List<Long> getAllRelationId(@Param("trainingProjectId")Long param);
/**
* 查找学员有没有学了该调研
* @param signId
* @return
*/
@MapKey("accountId")
Map<Long, Long> selectAccountLearnByResearchId(@Param("signId") Long signId);
/**
* 按部门纬度统计数据量会很大,影响效率.对其进行拆分,按部门统计从此表中查询
*/
void insertStatisticsResearchToGroupFind();
void deleteStatisticsResearchToGroupFind();
/**
* 调研信息直接从statistics_research_metadata表中查询效率很慢,对其进行拆分.按调研和用户统计的查询条件从此获取
*/
void insertStatisticsResearchToAccountGroupFind();
void deleteStatisticsResearchToAccountGroupFind();
/**
* 删除应参加人数统计表
*/
void deleteStatisticsAccountCanCount();
/**
* 添加应参加人数统计表
*/
void insertStatisticsAccountCanCount();
/**
* 报表服务获取签到记录
* @param signTimeId
* @param startDate
* @param endDate
* @return
*/
List<StatisticsSignLearn> getRecords(@Param("signTimeId") Long signTimeId,@Param("startDate") String startDate,@Param("endDate") String endDate);
}
package com.yizhi.application.service;
import com.baomidou.mybatisplus.service.IService;
import com.yizhi.application.domain.TrSignAccount;
public interface SignAccountService extends IService<TrSignAccount>{
}
package com.yizhi.application.service;
import com.yizhi.application.domain.TrSignRecord;
import com.yizhi.sign.application.vo.ExportSignRecordVO;
import com.baomidou.mybatisplus.service.IService;
import java.util.List;
/**
* <p>
* 签到记录表 服务类
* </p>
*
* @author fanchunhui123
* @since 2018-03-07
*/
public interface SignRecordService extends IService<TrSignRecord> {
/**
* 我的签到总数量
*
* @param accountId 学员ID
* @return
*/
Integer selectCountByAccountId(Long accountId);
/**
* 获取签到完成数量( PC 端 学习统计签到 完成数量)
*
* @param trainingProjectId 培训项目ID
* @return
*/
Integer selectCountByTrainingProjectId(Long trainingProjectId, Long accountId);
/**
* 签到记录导出
*
* @param accountId
* @param isAdmin
* @param siteId
* @param trainingProjectId
* @return
*/
List<ExportSignRecordVO> exportSignRecord(Long accountId, boolean isAdmin, Long siteId, Long trainingProjectId);
boolean insertSignRecordList(List<TrSignRecord> signRecordList);
}
package com.yizhi.application.service;
import com.baomidou.mybatisplus.service.IService;
import com.yizhi.application.domain.TrSignRemind;
/**
* <p>
* 签到提醒时间,一个sign_time对应一个sign_time 服务类
* </p>
*
* @author fanchunhui123
* @since 2018-03-07
*/
public interface SignRemindService extends IService<TrSignRemind> {
}
package com.yizhi.application.service;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import com.yizhi.application.domain.TrSign;
import com.yizhi.sign.application.vo.*;
import com.yizhi.sign.application.vo.domain.SignRecordVO;
import java.util.List;
/**
* <p>
* 签到主体表,入口在培训项目 服务类
* </p>
*
* @author fanchunhui123
* @since 2018-03-07
*/
public interface SignService extends IService<TrSign> {
boolean insertSignAndSignTimeAndSignRemind(SignVO signVO);
boolean updateSignAndSignTimeAndSignRemind(SignVO signVO);
/**
*查询当前项目id对应的所有的签到时间列表
* @Function: SignService.java
* @Description:
*
* @param:
* @return:
* @throws:
*
* @author: xingliang
* @date: 2018年3月8日 上午11:08:13
*
* 2018年3月8日 xingliang
*/
List<SignQrcodeVO> querySignTime(Long trainingProjectId);
/**
* 学员签到
* @Function: SignService.java
* @Description:
*
* @param:
* @return:
* @throws:
*
* @author: xingliang
* @date: 2018年3月8日 下午2:35:27
*
* 2018年3月8日 xingliang
*/
String sign(Long accountId, String trainingProjectId, String signTimeId,Integer type);
/**
* 根据学员id信息,获取学员签到列表
* @Function: SignService.java
* @Description:
*
* @param:
* @return:
* @throws:
*
* @author: xingliang
* @date: 2018年3月9日 下午3:35:12
*
* 2018年3月9日 xingliang
*/
List<SignRecordVO> signRecordList(Long accountId);
/**
* 获取签到信息
* @param trainingProjectId 培训项目ID
* @return 签到对象
*/
SignVO querySign(Long trainingProjectId);
/**
* 获取我的签到
* @param accountId 学员ID
* @param month 月份为空查询所有
* @param pageIndex 页码
* @param pageSize 页数
* @return
*/
Page<TrSignRecordVo> selectSignRecordListByAccountIdAndMonth(Long accountId, String year, String month, int pageNo, int pageSize);
boolean deleteSignByProjectId(SignIdVO signIdVO);
TrSign selectByTimeId(Long signTimeId);
Integer getSignTimeCount(SignVO signVO);
/********************************************************** PC 端 ******************************************************/
/**
* 获取签到总数量( PC 端 培训项目中培训统计的签到总数)
* @param trainingProjectId
* @return
*/
Integer getPcSignTimeCount(Long trainingProjectId);
ApiSignTimeVO getSignTimeDeatil(Long accountId, String code, Long trainingProjectId);
}
package com.yizhi.application.service;
import com.baomidou.mybatisplus.service.IService;
import com.yizhi.application.domain.TrSignTime;
/**
* <p>
* 签到时间段,一个 sign 对应多个 sign_time 服务类
* </p>
*
* @author fanchunhui123
* @since 2018-03-07
*/
public interface SignTimeService extends IService<TrSignTime> {
}
package com.yizhi.application.service;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import com.yizhi.application.domain.StatisticsSign;
import com.yizhi.application.domain.StatisticsSignLearn;
import java.util.List;
public interface StatisticsSignService extends IService<StatisticsSign> {
Page<com.yizhi.sign.application.vo.domain.StatisticsSign> statisticsSignPage(Long projectId, String kwd, String startDate, String endDate, Long signCompanyId, List<Long> signOrgIds, Long signSiteId, Integer pageNo, Integer pageSize);
Page<StatisticsSign> statisticsSignView(Long id, Long trainningProjectId, String startDate, String endDate, String orgNameOrCode, String accountName, Integer pageNo, Integer pageSize);
List<StatisticsSign> chartGroup(Long trainningProjectId, String startDate, String endDate, Long signCompanyId, List<Long> signOrgIds, Long signSiteId);
List<StatisticsSignLearn> insertAccountLearn(Long researchId, String currentDate);
Integer statisticsSignPageCount(Long projectId, String startDate, String endDate, Long signCompanyId, List<Long> signOrgIds, Long signSiteId);
List<StatisticsSign> statisticsSignList(Long projectId, String startDate, String endDate, Long signCompanyId, List<Long> signOrgIds, Long signSiteId, Integer pageNo, Integer pageSize);
Integer statisticsSignViewCount(Long id, Long trainningProjectId, String startDate, String endDate, String orgNameOrCode, String accountName);
List<StatisticsSign> statisticsSignViewList(Long id, Long trainningProjectId, String startDate, String endDate, String orgNameOrCode, String accountName, Integer pageNo, Integer pageSize);
}
package com.yizhi.application.service.impl;
import com.yizhi.application.service.SignAccountService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.yizhi.application.domain.TrSignAccount;
import com.yizhi.application.mapper.SignAccountMapper;
@Service
public class SignAccountServiceImpl extends ServiceImpl<SignAccountMapper, TrSignAccount> implements SignAccountService {
}
package com.yizhi.application.service.impl;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.yizhi.system.application.constant.AuthzConstant;
import com.yizhi.application.domain.TrSignRecord;
import com.yizhi.application.domain.TrSignTime;
import com.yizhi.application.mapper.SignRecordMapper;
import com.yizhi.application.mapper.SignTimeMapper;
import com.yizhi.application.orm.id.IdGenerator;
import com.yizhi.application.service.SignRecordService;
import com.yizhi.system.application.system.remote.ReportClient;
import com.yizhi.system.application.vo.HQAccountInManageParam;
import com.yizhi.system.application.vo.ReportAccountRespInManageVO;
import com.yizhi.system.application.vo.ReportAccountRespVO;
import com.yizhi.system.application.vo.ReportRangeAccountReqVO;
import com.yizhi.util.application.date.DateUtil;
import com.yizhi.training.application.vo.domain.TpAuthorizationRangeVo;
import com.yizhi.training.application.vo.domain.TrainingProjectVo;
import com.yizhi.sign.application.vo.ExportSignRecordVO;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.stream.Collectors;
/**
* <p>
* 签到记录表 服务实现类
* </p>
*
* @author fanchunhui123
* @since 2018-03-07
*/
@Service
public class SignRecordServiceImpl extends ServiceImpl<SignRecordMapper, TrSignRecord> implements SignRecordService {
@Autowired
SignRecordMapper signRecordMapper;
@Autowired
ReportClient reportClient;
@Autowired
private IdGenerator idGenerator;
@Autowired
private SignTimeMapper signTimeMapper;
/**
* 我的签到总数量
*
* @param accountId 学员ID
* @return
*/
@Override
public Integer selectCountByAccountId(Long accountId) {
return signRecordMapper.selectCountByAccountId(accountId);
}
/**
* 获取签到完成数量( PC 端 学习统计签到 完成数量)
*
* @param trainingProjectId 培训项目ID
* @return
*/
@Override
public Integer selectCountByTrainingProjectId(Long trainingProjectId, Long accountId) {
return signRecordMapper.selectCountByTrainingProjectId(trainingProjectId, accountId);
}
@Override
public List<ExportSignRecordVO> exportSignRecord(Long accountId, boolean isAdmin, Long siteId, Long trainingProjectId) {
List<Long> accountIds = new ArrayList<>();
Map<Long, ReportAccountRespVO> accountMap = new HashMap<>();
TrainingProjectVo trainingProject = signRecordMapper.getTainningProjectById(trainingProjectId);
List<Long> relationAccountIds = new ArrayList<>();
List<Long> relationOrgIds = new ArrayList<>();
//如果是指定范围找出指定范围的部门或者用户id
if (trainingProject.getVisibleRange() == 0) {
List<TpAuthorizationRangeVo> tpAuthorizationRanges = signRecordMapper.getAuthorizations(trainingProjectId);
if (CollectionUtils.isNotEmpty(tpAuthorizationRanges)) {
for (TpAuthorizationRangeVo tpAuthorizationRange : tpAuthorizationRanges) {
//1是指定部门
if (tpAuthorizationRange.getType() == 1) {
relationOrgIds.add(tpAuthorizationRange.getRelationId());
} else if (tpAuthorizationRange.getType() == 2) {
//2是指定用户
relationAccountIds.add(tpAuthorizationRange.getRelationId());
}
}
} else {
return null;
}
}
if (null == trainingProject) {
return null;
}
boolean isUseAccountIds = false;
if (isAdmin) {
//管理员
ReportRangeAccountReqVO reqVO = new ReportRangeAccountReqVO();
//如果是指定范围放入指定的部门或者用户id
if (trainingProject.getVisibleRange() == 0) {
isUseAccountIds = true;
if (CollectionUtils.isNotEmpty(relationAccountIds)) {
reqVO.setAccountIds(relationAccountIds);
}
if (CollectionUtils.isNotEmpty(relationOrgIds)) {
reqVO.setOrgIds(relationOrgIds);
}
}
reqVO.setSiteId(siteId);
List<ReportAccountRespVO> accounts = reportClient.getRangeAccounts(reqVO);
//将用户id拿出并将用户信息放入map中
if (CollectionUtils.isNotEmpty(accounts)) {
for (ReportAccountRespVO accountRespVO : accounts) {
accountIds.add(accountRespVO.getUserId());
accountMap.put(accountRespVO.getUserId(), accountRespVO);
}
} else {
return null;
}
} else {
isUseAccountIds = true;
List<Long> relationIds = null;
//一般管理员
if (trainingProject.getVisibleRange() == 0) {
ReportRangeAccountReqVO reqVO = new ReportRangeAccountReqVO();
if (CollectionUtils.isNotEmpty(relationAccountIds)) {
reqVO.setAccountIds(relationAccountIds);
}
if (CollectionUtils.isNotEmpty(relationOrgIds)) {
reqVO.setOrgIds(relationOrgIds);
}
reqVO.setSiteId(siteId);
List<ReportAccountRespVO> accounts = reportClient.getRangeAccounts(reqVO);
if (CollectionUtils.isNotEmpty(accounts)) {
relationIds = accounts.stream().map(ReportAccountRespVO::getUserId).collect(Collectors.toList());
} else {
return null;
}
}
//查找出管辖区下所有的用户
HQAccountInManageParam reqVO = new HQAccountInManageParam();
reqVO.setAccountId(accountId);
reqVO.setSiteId(siteId);
reqVO.setModuleType(AuthzConstant.moduleType.trainingProject);
ReportAccountRespInManageVO respInManageVO = reportClient.getRangeAccountsInManage(reqVO);
//遍历管辖区用户,如果是指定范围还要与指定用户取次
if (null != respInManageVO) {
if (!respInManageVO.getIsAdmin()){
for (ReportAccountRespVO respVO : respInManageVO.getList()) {
if (relationIds != null) {
if (relationIds.contains(respVO.getUserId())) {
accountIds.add(respVO.getUserId());
accountMap.put(respVO.getUserId(), respVO);
} else {
continue;
}
} else {
accountIds.add(respVO.getUserId());
accountMap.put(respVO.getUserId(), respVO);
}
}
}else {
isUseAccountIds = false;
ReportRangeAccountReqVO reqVO1 = new ReportRangeAccountReqVO();
//如果是指定范围放入指定的部门或者用户id
if (trainingProject.getVisibleRange() == 0) {
isUseAccountIds = true;
if (CollectionUtils.isNotEmpty(relationAccountIds)) {
reqVO1.setAccountIds(relationAccountIds);
}
if (CollectionUtils.isNotEmpty(relationOrgIds)) {
reqVO1.setOrgIds(relationOrgIds);
}
}
reqVO1.setSiteId(siteId);
List<ReportAccountRespVO> accounts = reportClient.getRangeAccounts(reqVO1);
//将用户id拿出并将用户信息放入map中
if (CollectionUtils.isNotEmpty(accounts)) {
for (ReportAccountRespVO accountRespVO : accounts) {
accountIds.add(accountRespVO.getUserId());
accountMap.put(accountRespVO.getUserId(), accountRespVO);
}
} else {
return null;
}
}
} else {
return null;
}
}
//如果所有次用户不为空则进行查找考试数据
if (CollectionUtils.isNotEmpty(accountIds)) {
List<TrSignTime> trSignTimeList = signRecordMapper.selectSignTimeList(trainingProjectId);
//最后的返回集
List<ExportSignRecordVO> resultList = new ArrayList<>();
if (CollectionUtils.isNotEmpty(trSignTimeList)) {
//把每个签到时间段没有记录的用户集合
List<ExportSignRecordVO> noRecordList = new ArrayList<>();
for (TrSignTime trSignTime : trSignTimeList) {
List<Long> noRecordAccountIds = new ArrayList<>();
noRecordAccountIds.addAll(accountIds);
List<ExportSignRecordVO> list = null;
//管理员全平台可见不需要加入用记筛选
if (!isUseAccountIds) {
list = signRecordMapper.exportSignRecord(trSignTime.getId(), null);
} else {
list = signRecordMapper.exportSignRecord(trSignTime.getId(), accountIds);
}
if (CollectionUtils.isNotEmpty(list)) {
for (ExportSignRecordVO recordVO : list) {
Long accountId1 = recordVO.getAccountId();
//组装用户信息
ReportAccountRespVO account = accountMap.get(accountId1);
recordVO.setTainingProjectName(trainingProject.getName());
recordVO.setStartTime(trSignTime.getStartTime());
recordVO.setEndTime(trSignTime.getEndTime());
if (null!=account){
recordVO.setAccountName(account.getUserName());
recordVO.setAccountFullName(account.getUserFullName());
recordVO.setAccountState(account.getStatus());
recordVO.setOrgName(account.getOrgName());
}
//如果有记录将id移除,便于之后插入没有数据的用户信息
if (noRecordAccountIds.contains(accountId1)) {
noRecordAccountIds.remove(accountId1);
}
}
}
if (CollectionUtils.isNotEmpty(list)) {
resultList.addAll(list);
}
//如果有没有记录的用户组装加入结果中
if (CollectionUtils.isNotEmpty(noRecordAccountIds)) {
for (Long id : noRecordAccountIds) {
ReportAccountRespVO accountRespVO = accountMap.get(id);
ExportSignRecordVO noRecordVO = new ExportSignRecordVO();
noRecordVO.setAccountId(id);
noRecordVO.setAccountName(accountRespVO.getUserName());
noRecordVO.setAccountFullName(accountRespVO.getUserFullName());
noRecordVO.setAccountState(accountRespVO.getStatus());
noRecordVO.setOrgName(accountRespVO.getOrgName());
noRecordVO.setTainingProjectName(trainingProject.getName());
noRecordVO.setStartTime(trSignTime.getStartTime());
noRecordVO.setEndTime(trSignTime.getEndTime());
noRecordVO.setSignState(0);
list.add(noRecordVO);
noRecordList.add(noRecordVO);
}
}
}
if (CollectionUtils.isNotEmpty(noRecordList)) {
resultList.addAll(noRecordList);
}
return resultList;
} else {
return null;
}
} else {
return null;
}
}
@Override
public boolean insertSignRecordList(List<TrSignRecord> signRecordList) {
if (CollectionUtils.isNotEmpty(signRecordList)) {
for(TrSignRecord signRecord:signRecordList) {
TrSignTime signTime = signTimeMapper.selectById(signRecord.getSignId());
TrSignRecord trSignRecord = new TrSignRecord();
trSignRecord.setAccountId(signRecord.getAccountId());
trSignRecord.setSignId(signRecord.getSignId());
trSignRecord.setType(0);
EntityWrapper<TrSignRecord> entityWrapper = new EntityWrapper<>(trSignRecord);
trSignRecord = this.selectOne(entityWrapper);
if (null!=trSignRecord) {
//有签到记录更新入库
if (signRecord.getSignTime().before(signTime.getEndTime())&&signRecord.getSignTime().after(signTime.getStartTime())) {
signRecord.setSignStatus(0);
}else {
signRecord.setSignStatus(1);
}
signRecord.setId(trSignRecord.getId());
}else {
//没签到记录新增入库
if (signRecord.getSignTime().before(signTime.getEndTime())&&signRecord.getSignTime().after(signTime.getStartTime())) {
signRecord.setSignStatus(0);
}else {
signRecord.setSignStatus(1);
}
signRecord.setId(idGenerator.generate());
signRecord.setTrainingProjectId(signTime.getTrainingProjectId());
signRecord.setCreateTime(DateUtil.now());
}
signTime.setUpdateTime(new Date());
signTimeMapper.updateById(signTime);
}
}
return this.insertOrUpdateBatch(signRecordList);
}
}
package com.yizhi.application.service.impl;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.yizhi.application.domain.TrSignRemind;
import com.yizhi.application.mapper.SignRemindMapper;
import com.yizhi.application.service.SignRemindService;
import org.springframework.stereotype.Service;
/**
* <p>
* 签到提醒时间,一个sign_time对应一个sign_time 服务实现类
* </p>
*
* @author fanchunhui123
* @since 2018-03-07
*/
@Service
public class SignRemindServiceImpl extends ServiceImpl<SignRemindMapper, TrSignRemind> implements SignRemindService {
}
package com.yizhi.application.service.impl;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.yizhi.point.application.vo.PointParamVO;
import com.yizhi.sign.application.constant.SignRespCode;
import com.yizhi.application.domain.TrSign;
import com.yizhi.application.domain.TrSignRemind;
import com.yizhi.application.domain.TrSignTime;
import com.yizhi.point.application.feign.PointRedisFeignClients;
import com.yizhi.application.mapper.SignMapper;
import com.yizhi.application.mapper.SignRecordMapper;
import com.yizhi.application.mapper.SignRemindMapper;
import com.yizhi.application.mapper.SignTimeMapper;
import com.yizhi.application.orm.id.IdGenerator;
import com.yizhi.application.service.SignService;
import com.yizhi.system.application.system.remote.AccountClient;
import com.yizhi.core.application.task.AbstractTaskHandler;
import com.yizhi.core.application.task.TaskExecutor;
import com.yizhi.system.application.vo.AccountVO;
import com.yizhi.application.util.SignEvenSendMessage;
import com.yizhi.util.application.date.DateUtil;
import com.yizhi.application.domain.TrSignRecord;
import com.yizhi.sign.application.vo.*;
import com.yizhi.sign.application.vo.domain.SignRecordVO;
import com.yizhi.training.application.feign.TrainingProjectClient;
import com.yizhi.training.application.vo.EvenType;
import com.yizhi.training.application.vo.domain.TrainingProjectVo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.regex.Pattern;
/**
* <p>
* 签到主体表,入口在培训项目 服务实现类
* </p>
*
* @author fanchunhui123
* @since 2018-03-07
*/
@Service
public class SignServiceImpl extends ServiceImpl<SignMapper, TrSign> implements SignService {
@Autowired
IdGenerator idGenerator;
@Autowired
SignMapper signMapper;
@Autowired
SignTimeMapper signTimeMapper;
@Autowired
SignRemindMapper signRemindMapper;
@Autowired
private SignRecordMapper signRecordMapper;
@Autowired
private TaskExecutor taskExecutor;
@Autowired
private SignEvenSendMessage signEvenSendMessage;
@Autowired
private TrainingProjectClient trainingProjectClient;
@Autowired
private PointRedisFeignClients pointRedisFeignClients;
@Autowired
private AmqpTemplate amqpTemplate;
@Autowired
private AccountClient accountClient;
private Logger logger = LoggerFactory.getLogger(SignServiceImpl.class);
@Transactional
public boolean insertSignAndSignTimeAndSignRemind(SignVO signVO) {
int signCount = 0;
int signTimeCount = 0;
int signRemindcount = 0;
Long companyId = signVO.getCompanyId();
Long siteId = signVO.getSiteId();
Long accountId = signVO.getAccountId();
String accountName = signVO.getAccountName();
if(null != signVO){
Date createTime = new Date();
//添加签到数据
TrSign trSign = new TrSign();
BeanUtils.copyProperties(signVO,trSign);
trSign.setCompanyId(companyId);
trSign.setSiteId(siteId);
trSign.setCreateById(accountId);
trSign.setCreateByName(accountName);
trSign.setCreateTime(createTime);
trSign.setUpdateById(accountId);
trSign.setUpdateByName(accountName);
trSign.setUpdateTime(createTime);
signCount = signMapper.insert(trSign);
//添加签到时间段数据
List<SignTimeVO> signTimeVOS = signVO.getTrSignTimeVOs();
if(signTimeVOS != null && signTimeVOS.size() > 0 && signCount > 0){
TrSignTime trSignTime = null;
TrSignRemind trSignRemind = null;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
for (SignTimeVO signTimeVO : signTimeVOS) {
try {
trSignTime = new TrSignTime();
trSignTime.setId(idGenerator.generate());
trSignTime.setCreateById(accountId);
trSignTime.setCreateByName(accountName);
trSignTime.setCreateTime(createTime);
trSignTime.setUpdateById(accountId);
trSignTime.setUpdateByName(accountName);
trSignTime.setUpdateTime(createTime);
trSignTime.setTrainingProjectId(trSign.getTrainingProjectId());
trSignTime.setSignId(trSign.getId());
trSignTime.setDeleted(0);
//拼接签到开始时间
String sTime = signTimeVO.getStartTime();
String sHour = signTimeVO.getStartHour();
String sMinute = signTimeVO.getStartMinute();
trSignTime.setStartTime(sdf.parse(sTime + " " + sHour + ":" + sMinute + ":00"));
//拼接签到结束时间
sTime = signTimeVO.getEndTime();
sHour = signTimeVO.getEndHour();
sMinute = signTimeVO.getEndMinute();
trSignTime.setEndTime(sdf.parse(sTime + " " + sHour + ":" + sMinute + ":00"));
trSignTime.setEnablePosition(signVO.getEnablePosition()!=null?signVO.getEnablePosition():0);
trSignTime.setAddress(signTimeVO.getAddress());
trSignTime.setRange(signTimeVO.getRange());
trSignTime.setPoint(signTimeVO.getPoint());
trSignTime.setLatitude(signTimeVO.getLatitude());
trSignTime.setLongitude(signTimeVO.getLongitude());
if (trSignTime.getEnablePosition()==1) {
trSignTime.setCode(getStringRandom(5));
}
signTimeCount = signTimeMapper.insert(trSignTime);
//添加消息提示
if (signTimeCount > 0) {
Date date = trSignTime.getStartTime();
Integer remindTime = signVO.getRemindTime();
Date beforeDate = null;
if (null != remindTime && remindTime > 0) {
if(null == trSignRemind) {
trSignRemind = new TrSignRemind();
trSignRemind.setCreateById(accountId);
trSignRemind.setCreateByName(accountName);
trSignRemind.setCreateTime(createTime);
trSignRemind.setUpdateById(accountId);
trSignRemind.setUpdateByName(accountName);
trSignRemind.setUpdateTime(createTime);
}
trSignRemind.setSignTimeId(trSignTime.getId());
trSignRemind.setId(idGenerator.generate());
long time = remindTime * 60 * 1000;
beforeDate = new Date(date.getTime() - time);
String befacon = sdf.format(beforeDate);
trSignRemind.setRemindTime(sdf.parse(befacon));
signRemindcount = signRemindMapper.insert(trSignRemind);
}
}
}catch (Exception e) {
e.printStackTrace();
}
}
}
}
if(signCount > 0 && signTimeCount > 0) {
return true;
}
return false;
}
@Transactional
@Override
public boolean updateSignAndSignTimeAndSignRemind(SignVO signVO) {
int signCount = 0;
int signTimeCount = 0;
int signRemindcount = 0;
Long companyId = signVO.getCompanyId();
Long siteId = signVO.getSiteId();
Long accountId = signVO.getAccountId();
String accountName = signVO.getAccountName();
if(null != signVO){
Date updateTime = new Date();
TrSign trSign = new TrSign();
BeanUtils.copyProperties(signVO, trSign);
trSign.setUpdateById(accountId);
trSign.setUpdateByName(accountName);
trSign.setUpdateTime(updateTime);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
signCount = signMapper.updateById(trSign);
if(signCount > 0) {
List<SignTimeVO> signTimeVOS = new ArrayList<SignTimeVO>();
TrSignTime trSignTime = null;
boolean isInsert = false;
signTimeVOS = signVO.getTrSignTimeVOs();
if (null != signTimeVOS) {
for (SignTimeVO signTimeVO : signTimeVOS) {
trSignTime = new TrSignTime();
//判断是新增还是修改
Long id = signTimeVO.getId();
if(id == null){
isInsert = true;
trSignTime.setId(idGenerator.generate());
signTimeVO.setId(trSignTime.getId());
trSignTime.setCreateById(accountId);
trSignTime.setCreateByName(accountName);
trSignTime.setCreateTime(updateTime);
trSignTime.setSignId(trSign.getId());
trSignTime.setDeleted(0);
if (signVO.getEnablePosition() == 1) {
trSignTime.setCode(getStringRandom(5));
}
} else {
TrSignTime tem = signTimeMapper.selectById(id);
if (tem ==null){
logger.error("查询签到的id无效!!!");
}
isInsert = false;
trSignTime.setId(id);
if (signVO.getEnablePosition() == 1) {
if (tem.getEnablePosition() == 0) {
trSignTime.setCode(getStringRandom(5));
}
}
}
trSignTime.setTrainingProjectId(trSign.getTrainingProjectId());
trSignTime.setUpdateById(accountId);
trSignTime.setUpdateByName(accountName);
trSignTime.setUpdateTime(updateTime);
//拼接签到开始时间
String sTime = signTimeVO.getStartTime();
String sHour = signTimeVO.getStartHour();
String sMinute = signTimeVO.getStartMinute();
trSignTime.setStartTime(sdf.parse(sTime + " " + sHour + ":" + sMinute + ":00"));
//拼接签到结束时间
sTime = signTimeVO.getEndTime();
sHour = signTimeVO.getEndHour();
sMinute = signTimeVO.getEndMinute();
trSignTime.setEndTime(sdf.parse(sTime + " " + sHour + ":" + sMinute + ":00"));
trSignTime.setEnablePosition(signVO.getEnablePosition()!=null?signVO.getEnablePosition():0);
trSignTime.setAddress(signTimeVO.getAddress());
trSignTime.setRange(signTimeVO.getRange());
trSignTime.setPoint(signTimeVO.getPoint());
trSignTime.setLatitude(signTimeVO.getLatitude());
trSignTime.setLongitude(signTimeVO.getLongitude());
if(isInsert){
signTimeCount = signTimeMapper.insert(trSignTime);
} else {
signTimeCount = signTimeMapper.updateById(trSignTime);
}
if (signTimeCount > 0) {
TrSignRemind trSignRemind = new TrSignRemind();
trSignRemind.setSignTimeId(trSignTime.getId());
Date date1 = trSignTime.getStartTime();
Integer remindTime = signVO.getRemindTime();
Date beforeDate = null;
if (null != remindTime && remindTime > 0) {
long time1 = remindTime * 60 * 1000;
beforeDate = new Date(date1.getTime() - time1);
String befacon = sdf.format(beforeDate);
trSignRemind.setRemindTime(sdf.parse(befacon));
}else {
trSignRemind.setRemindTime(new Date());
}
trSignRemind.setUpdateById(accountId);
trSignRemind.setUpdateByName(accountName);
trSignRemind.setUpdateTime(updateTime);
if (isInsert) {
trSignRemind.setId(idGenerator.generate());
trSignRemind.setCreateById(accountId);
trSignRemind.setCreateByName(accountName);
trSignRemind.setCreateTime(updateTime);
signRemindcount = signRemindMapper.insert(trSignRemind);
} else {
signRemindcount = signRemindMapper.updateBySignTimeId(trSignRemind);
}
}
}
//修改删除签到状态
signTimeMapper.updateSignTimesStateBySignIdAndIds(signVO.getId(), signTimeVOS, accountId, accountName);
} else {
//修改删除签到状态
signTimeMapper.updateSignTimesStateBySignIdAndIds(signVO.getId(), null, accountId, accountName);
}
} else {
//删除之前签到信息,添加签到信息
signMapper.deleteSignByProjectId(signVO.getTrainingProjectId());
TrSignTime trSignTime = new TrSignTime();
trSignTime.setTrainingProjectId(signVO.getTrainingProjectId());
signTimeMapper.delete(new EntityWrapper<>(trSignTime));
boolean isOk = insertSignAndSignTimeAndSignRemind(signVO);
if(isOk){
signCount = 1;
signTimeCount = 1;
signRemindcount = 1;
}
}
}catch (Exception e){
e.printStackTrace();
}
}
if(signCount > 0 && signTimeCount > 0 && signRemindcount > 0){
return true;
}else{
return false;
}
}
@Override
public Integer getSignTimeCount(SignVO signVO){
Integer count = 0;
if(signVO != null ) {
TrSignTime signTime = new TrSignTime();
signTime.setSignId(signVO.getId());
EntityWrapper wrapper = new EntityWrapper(signTime);
List<TrSignTime> list = signTimeMapper.selectList(wrapper);
if (!CollectionUtils.isEmpty(list)) {
for (TrSignTime trSignTime : list) {
if (trSignTime.getStartTime() != null && trSignTime.getEndTime() != null) {
count++;
}
}
}
}
return count;
}
/************************************************************* PC 端 开始 *********************************************************/
/**
* 获取签到总数量( PC 端 培训项目中培训统计的签到总数)
*
* @param trainingProjectId
* @return
*/
@Override
public Integer getPcSignTimeCount(Long trainingProjectId){
Integer count = 0;
if(trainingProjectId != null ) {
TrSignTime signTime = new TrSignTime();
System.out.println("trainingProjectId为:"+trainingProjectId);
signTime.setTrainingProjectId(trainingProjectId);
signTime.setDeleted(0);
EntityWrapper wrapper = new EntityWrapper(signTime);
List<TrSignTime> list = signTimeMapper.selectList(wrapper);
if (!CollectionUtils.isEmpty(list)) {
for (TrSignTime trSignTime : list) {
if (trSignTime.getStartTime() != null && trSignTime.getEndTime() != null) {
count++;
}
}
}
}
return count;
}
/************************************************************* PC 端 结束 *********************************************************/
@Override
public List<SignQrcodeVO> querySignTime(Long trainingProjectId) {
//此处使用TrSign模拟 trainingProject 项目表目前不存在
//查询签到表,获取签到时间id列表
TrSignTime trSignTime = new TrSignTime();
trSignTime.setTrainingProjectId(trainingProjectId);
trSignTime.setDeleted(Integer.valueOf(0));
List<TrSignTime> trSignTimeList = signTimeMapper.selectList(new EntityWrapper <TrSignTime> (trSignTime));
List<SignQrcodeVO> signTimeIds = null;
if(null != trSignTimeList && trSignTimeList.size()>0) {
signTimeIds = new ArrayList<SignQrcodeVO> ();
SignQrcodeVO vo = null;
Iterator<TrSignTime> iterator = trSignTimeList.iterator();
while(iterator.hasNext()) {
TrSignTime tmp = (TrSignTime) iterator.next();
vo = new SignQrcodeVO();
vo.setId(tmp.getId());
vo.setStartTime(tmp.getStartTime());
vo.setEndTime(tmp.getEndTime());
vo.setEnablePosition(tmp.getEnablePosition());
vo.setAddress(tmp.getAddress());
vo.setRange(tmp.getRange());
vo.setCode(tmp.getCode());
vo.setPoint(tmp.getPoint());
signTimeIds.add(vo);
}
}
return signTimeIds;
}
/**
* @see SignService#queryQRCode(String)
* @Function: SignServiceImpl.java
* @Description:
*
* @param:
* @return:
* @throws:
*
* @author: xingliang
* @date: 2018年3月8日 上午11:08:21
*
* 2018年3月8日 xingliang
*/
/*public String querySignTime(String trainingProjectId) {
//此处使用TrSign模拟 trainingProject 项目表目前不存在
TrSign trSign = new TrSign();
trSign.setTrainingProjectId(Long.valueOf(trainingProjectId));
trSign = signMapper.selectOne(trSign);
//查询签到表,获取签到时间id列表
TrSignTime trSignTime = new TrSignTime();
trSignTime.setTrainingProjectId(Long.valueOf(trainingProjectId));
trSignTime.setDeleted(Integer.valueOf(0));
List<TrSignTime> trSignTimeList = signTimeMapper.selectList(new EntityWrapper <TrSignTime> (trSignTime));
List<Long> signTimeIds = null;
if(null != trSignTimeList && trSignTimeList.size()>0) {
signTimeIds = new ArrayList<Long> ();
Iterator<TrSignTime> iterator = trSignTimeList.iterator();
while(iterator.hasNext()) {
TrSignTime tmp = (TrSignTime) iterator.next();
signTimeIds.add(tmp.getId());
}
}
return JSON.toJSONString(signTimeIds);
}*/
/**
* @see SignService#sign(String, Integer, String)
* @Function: SignServiceImpl.java
* @Description:
*
* @param:
* @return:
* @throws:
*
* @author: xingliang
* @date: 2018年3月8日 下午2:37:09
*
* 2018年3月8日 xingliang
*/
public String sign(Long accountId, String trainingProjectId, String signTimeId,Integer type) {
boolean flag = false;
// 判断项目是否可以签到
// 此处使用TrSign模拟 trainingProject 项目表目前不存在
TrSign trSign = new TrSign();
Long lTrainingProjectId = Long.valueOf(trainingProjectId);
trSign.setTrainingProjectId(lTrainingProjectId);
trSign.setState(0);
trSign = signMapper.selectOne(trSign);
String result = "";
//判断项目是否允许签到
if(null == trSign) {
return result = SignRespCode.TRAINING_PROJECT_NULL_MSG;
}
// 判断项目是否可以补签 1是可以补签
if(SignRespCode.SIGN_ENABLE_RETROACTIVE_TRUE == trSign.getEnableRetroactive()) {
flag = true;
}
//判断签到时间是否在符合签到规则
result = checkSign(accountId, trainingProjectId, signTimeId, flag, trSign,type);
//签到成功发消息
if (!result.contains("您已签到成功")&&(result.contains("补签成功")||result.contains("签到成功"))) {
if (accountId != null) {
TrainingProjectVo one = trainingProjectClient.getOne(lTrainingProjectId);
try {
if (trSign != null) {
TrSign finalTrSign = trSign;
if (finalTrSign != null) {
taskExecutor.asynExecute(new AbstractTaskHandler() {
@Override
public void handle() {
signEvenSendMessage.evenSendMessage(one, finalTrSign, accountId, EvenType.SIGN_SUCCESS);
}
});
} else {
logger.info("查询主体签到为空!!");
}
}
} catch (Exception e) {
e.printStackTrace();
}
TrSignTime signTime = signTimeMapper.selectById(signTimeId);
Integer point = signTime.getPoint();
try {
AccountVO accountVO = accountClient.findById(accountId);
PointParamVO pointParamVO = new PointParamVO();
pointParamVO.setEventName("pointProjectSign"); //事件名称
pointParamVO.setActivityType("项目签到成功"); //事件类型
pointParamVO.setActivitySource("项目签到"); //学习活动来源
pointParamVO.setActivityName(one.getName()); //学习活动名称
pointParamVO.setReleaseCondition("指定积分发放"); //发放条件
pointParamVO.setReleaseRules("项目签到成功发放"); //发放规则
pointParamVO.setCreatePointTime(new Date()); //积分创建时间
pointParamVO.setSourceId(Long.valueOf(signTimeId)); //积分来源ID,(业务ID主键)
pointParamVO.setOperatingPoint(point); //积分数量, 正数 加积分, 负数减积分
pointParamVO.setAccountId(accountId); //学员ID
pointParamVO.setAccountName(accountVO.getName()); //学员名称
pointParamVO.setCompanyId(accountVO.getCompanyId()); //企业ID
pointParamVO.setSiteId(one.getSiteId()); //站点ID
pointParamVO.setOrgId(accountVO.getOrgId()); //组织ID
String sitePointId = null;
if (null != point && 0 != point) {
sitePointId = pointRedisFeignClients.addPointRedis(pointParamVO); //调用积分接口添加积分
}
if (null != sitePointId) {
amqpTemplate.convertAndSend("projectSign", sitePointId); //发送积分获取消息
}
} catch (Exception e) {
logger.error("项目签到积分发放失败:", e);
}
} else {
logger.info("accountID为空!!!!");
}
}
return result;
}
/**
* 判断签到规则
* @Function: SignServiceImpl.java
* @Description:
*
* @param:
* @return:
* @throws:
*
* @author: xingliang
* @date: 2018年3月8日 下午2:49:08
*
* 2018年3月8日 xingliang
*/
@Transactional
public String checkSign(Long accountId, String trainingProjectId, String signTimeId, boolean flag, TrSign trSign, Integer type) {
// 判断签到时间是否在规定的签到时间以内
TrSignTime trSignTime = new TrSignTime();
trSignTime.setId(Long.valueOf(signTimeId));
trSignTime.setTrainingProjectId(Long.valueOf(trainingProjectId));
trSignTime.setDeleted(Integer.valueOf(0));
trSignTime = signTimeMapper.selectOne(trSignTime);
if (null==type) {
type=0;
}
//签到时间能获取到
if(null != trSignTime) {
//判断是否签到
TrSignRecord trSignRecord = new TrSignRecord();
trSignRecord.setSignId(trSignTime.getId());
trSignRecord.setAccountId(accountId);
trSignRecord.setType(type);
trSignRecord = signRecordMapper.selectOne(trSignRecord);
if(trSignRecord != null){
return "您已签到成功";
}
// 判断签到是否在规定的时间以内
Date date = DateUtil.now();
Date startTime = trSignTime.getStartTime();
if(null == startTime){
startTime = date;
}
Date endTime = trSignTime.getEndTime();
if(null == endTime){
endTime = date;
}
// 当前时间在规定的签到时间以内
if(date.before(endTime) && date.after(startTime)) {
// 签到表里插入记录
boolean b = insertSignRecord(accountId, trSignTime, date, SignRespCode.SIGN_RECORD_STATUS_DEFAULT,type);
if (b) {
return "签到成功";
}else {
return "签到失败";
}
}
// 当前时间晚于最终签到时间,并且项目允许补签
if(date.after(endTime) && flag) {
// 签到表里插入记录
boolean b = insertSignRecord(accountId, trSignTime, date, SignRespCode.SIGN_RECORD_STATUS_RETROACTIVE,type);
if (b) {
trSignTime.setUpdateTime(new Date());
signTimeMapper.updateById(trSignTime);
return "补签成功";
}else {
return "补签失败";
}
}
// 当前时间在最终签到时间之后,并且项目不允许补签
if(date.after(endTime) && !flag) {
return "签到失败,签到时间已过";
}
// 当前时间早于开始签到时间,不允许签到
if(date.before(startTime)) {
return "签到时间未开始";
}
} else {
return "不存在此签到";
}
return "不存在此签到";
}
private boolean insertSignRecord(Long accountId, TrSignTime trSignTime, Date date, int signStatus, int type) {
// 签到表里插入记录
TrSignRecord trSignRecord = new TrSignRecord();
trSignRecord.setId(idGenerator.generate());
trSignRecord.setSignId(trSignTime.getId());
trSignRecord.setSignTime(date);
trSignRecord.setTrainingProjectId(trSignTime.getTrainingProjectId());
trSignRecord.setSignStatus(signStatus);
trSignRecord.setAccountId(accountId);
trSignRecord.setType(type);
trSignRecord.setCreateTime(date);
trSignRecord.setAddress(trSignTime.getAddress());
Integer i = signRecordMapper.insert(trSignRecord);
if (i>0) {
return true;
}else {
return false;
}
}
/**
* 根据学员id信息,获取学员签到列表
* @see SignService#signRecordList(Long)
* @Function: SignServiceImpl.java
* @Description:
*
* @param:
* @return:
* @throws:
*
* @author: xingliang
* @date: 2018年3月9日 下午3:35:52
*
* 2018年3月9日 xingliang
*/
public List<SignRecordVO> signRecordList(Long accountId) {
// TODO 查询签到列表
return null;
}
/**
* 获取签到信息
* @param trainingProjectId 培训项目ID
* @return 签到对象
*/
public SignVO querySign(Long trainingProjectId) {
//根据培训项目ID,查询项目
TrSign trSign = new TrSign();
trSign.setTrainingProjectId(trainingProjectId);
trSign.setState(0);
trSign = signMapper.selectOne(trSign);
if(trSign == null){
return null;
}
SignVO signVO = new SignVO();
BeanUtils.copyProperties(trSign, signVO);
//获取签到时间
TrSignTime findSignTime = new TrSignTime();
findSignTime.setTrainingProjectId(trainingProjectId);
findSignTime.setSignId(signVO.getId());
findSignTime.setDeleted(0);
List<TrSignTime> trSignTime = signTimeMapper.selectList(new EntityWrapper<TrSignTime>(findSignTime));
SignTimeVO signTimeVO = null;
List<SignTimeVO> signTimeVOs = null;
if(trSignTime != null){
signTimeVOs = new ArrayList<SignTimeVO>();
Date date = null;
String dateArr[] = null;
String timeArr[] = null;
for(TrSignTime item : trSignTime){
signTimeVO = new SignTimeVO();
signTimeVO.setId(item.getId());
//拆分签到开始时间
date = item.getStartTime();
String sDate = DateUtil.toMinute(date);
dateArr = sDate.split(" ");
signTimeVO.setStartTime(dateArr[0]);
timeArr = dateArr[1].split(":");
signTimeVO.setStartHour(timeArr[0]);
signTimeVO.setStartMinute(timeArr[1]);
//拆分签到结束时间
date = item.getEndTime();
sDate = DateUtil.toMinute(date);
dateArr = sDate.split(" ");
signTimeVO.setEndTime(dateArr[0]);
timeArr = dateArr[1].split(":");
signTimeVO.setEndHour(timeArr[0]);
signTimeVO.setEndMinute(timeArr[1]);
signTimeVO.setAddress(item.getAddress());
signTimeVO.setRange(item.getRange());
signTimeVO.setPoint(item.getPoint());
signTimeVO.setLatitude(item.getLatitude());
signTimeVO.setLongitude(item.getLongitude());
signTimeVOs.add(signTimeVO);
}
}
signVO.setTrSignTimeVOs(signTimeVOs);
return signVO;
}
/**
* 获取我的签到
* @param accountId 学员ID
* @param month 月份为空查询所有
* @param pageNo 页码
* @param pageSize 页数
* @return
*/
public Page<TrSignRecordVo> selectSignRecordListByAccountIdAndMonth(Long accountId, String year, String month, int pageNo, int pageSize) {
Page<TrSignRecordVo> page = new Page<TrSignRecordVo>(pageNo, pageSize);
List<TrSignRecordVo> trSignRecordVos = signRecordMapper.selectSignRecordListByAccountIdAndMonth(page, accountId, year, month);
page.setRecords(trSignRecordVos);
return page;
}
@Override
public boolean deleteSignByProjectId(SignIdVO signIdVO) {
int count = signMapper.deleteSignByProjectId(signIdVO.getId());
if (count > 0) {
return true;
} else {
return false;
}
}
public TrSign selectByTimeId(Long signTimeId){
TrSign sign = signTimeMapper.selectByTimeId(signTimeId);
return sign;
}
@Override
public ApiSignTimeVO getSignTimeDeatil(Long accountId, String code, Long trainingProjectId) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
ApiSignTimeVO vo = null;
TrSignTime signTime = new TrSignTime();
if (trainingProjectId!=null) {
signTime.setTrainingProjectId(trainingProjectId);
}
signTime.setCode(code);
signTime.setDeleted(0);
TrSignTime one = signTimeMapper.selectOne(signTime);
if (one!=null) {
Date endTime = one.getEndTime();
vo = new ApiSignTimeVO();
Long tpId = one.getTrainingProjectId();
TrainingProjectVo tProject = trainingProjectClient.getOne(tpId);
if (tProject!=null) {
vo.setTrainingProjectId(tProject.getId());
vo.setName(tProject.getName());
}
vo.setId(one.getId());
vo.setAddress(one.getAddress());
vo.setEndTime(format.format(endTime));
vo.setStartTime(format.format(one.getStartTime()));
vo.setPoint(one.getPoint());
vo.setRange(one.getRange());
vo.setLatitude(one.getLatitude());
vo.setLongitude(one.getLongitude());
vo.setSiteId(tProject.getSiteId());
TrSignRecord record = new TrSignRecord();
record.setSignId(one.getId());
record.setAccountId(accountId);
TrSignRecord tRecord = signRecordMapper.selectOne(record);
if (tRecord!=null) {
vo.setState(1);
vo.setSignDate(format.format(tRecord.getSignTime()));
}else {
vo.setState(0);
}
}
return vo;
}
public static String getStringRandom(int length) {
String val = "";
Random random = new Random();
//参数length,表示生成几位随机数
for(int i = 0; i < length; i++) {
String charOrNum = random.nextInt(2) % 2 == 0 ? "char" : "num";
//输出字母还是数字
if("char".equalsIgnoreCase(charOrNum)){
//输出是大写字母还是小写字母
int temp = random.nextInt(2) % 2 == 0 ? 65 : 97;
val += (char)(random.nextInt(26) + temp);
}else if("num".equalsIgnoreCase(charOrNum)) {
val += String.valueOf(random.nextInt(10));
}
}
String regex = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)[a-zA-Z\\d]{5,}$";
boolean matches = Pattern.matches(regex, val);
if (!matches||val.contains("l")||val.contains("l")||val.contains("I")||val.contains("O")||val.contains("0")) {
val = getStringRandom(5);
}
return val;
}
public static void main(String[] args) {
System.out.println(getStringRandom(5));
}
}
package com.yizhi.application.service.impl;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.yizhi.application.domain.TrSignTime;
import com.yizhi.application.mapper.SignTimeMapper;
import com.yizhi.application.service.SignTimeService;
import org.springframework.stereotype.Service;
/**
* <p>
* 签到时间段,一个 sign 对应多个 sign_time 服务实现类
* </p>
*
* @author fanchunhui123
* @since 2018-03-07
*/
@Service
public class SignTimeServiceImpl extends ServiceImpl<SignTimeMapper, TrSignTime> implements SignTimeService {
}
package com.yizhi.application.service.impl;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.yizhi.application.domain.StatisticsSign;
import com.yizhi.application.domain.StatisticsSignLearn;
import com.yizhi.application.mapper.StatisticsSignMapper;
import com.yizhi.application.service.StatisticsSignService;
import com.google.common.collect.Lists;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
@Service
public class StitisticsSignServiceImpl extends ServiceImpl<StatisticsSignMapper, StatisticsSign> implements StatisticsSignService {
@Autowired
private StatisticsSignMapper statisticsSignMapper;
private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
@Override
public Page<com.yizhi.sign.application.vo.domain.StatisticsSign> statisticsSignPage(Long projectId, String kwd, String startDate, String endDate, Long signCompanyId, List<Long> signOrgIds, Long signSiteId, Integer pageNo, Integer pageSize) {
Page<StatisticsSign> page = new Page<>(pageNo, pageSize);
Page<com.yizhi.sign.application.vo.domain.StatisticsSign> page1 = new Page<>(pageNo, pageSize);
List<StatisticsSign> list = statisticsSignMapper.statisticsSignPage(projectId, startDate, endDate, signCompanyId, signOrgIds, signSiteId, kwd, page);
List<com.yizhi.sign.application.vo.domain.StatisticsSign> result = Lists.newArrayListWithCapacity(pageSize);
Integer NotSigncount = 0;
for (StatisticsSign statisticsSign : list) {
NotSigncount = statisticsSign.getCanStateCount() - statisticsSign.getJoinStateCount();
statisticsSign.setNotSignCount(NotSigncount);
com.yizhi.sign.application.vo.domain.StatisticsSign statisticsSign1 = new com.yizhi.sign.application.vo.domain.StatisticsSign();
BeanUtils.copyProperties(statisticsSign,statisticsSign1);
result.add(statisticsSign1);
}
if (!CollectionUtils.isEmpty(result)){
BeanUtils.copyProperties(page,page1);
page1.setRecords(result);
}
return page1;
}
@Override
public Page<StatisticsSign> statisticsSignView(Long signId, Long signTimeId, String startDate, String endDate, String orgNameOrCode, String accountName, Integer pageNo, Integer pageSize) {
if (accountName == null || accountName.equals("")) {
accountName = null;
}
if (orgNameOrCode == null || orgNameOrCode.equals("")) {
orgNameOrCode = null;
}
Page<StatisticsSign> page = new Page<StatisticsSign>(pageNo, pageSize);
List<StatisticsSign> list = statisticsSignMapper.statisticsSignView(signId, signTimeId, startDate, endDate, orgNameOrCode, accountName, page);
if (!CollectionUtils.isEmpty(list)) {
page.setRecords(list);
}
return page;
}
@Override
public List<StatisticsSign> chartGroup(Long trainningProjectId, String startDate, String endDate, Long signCompanyId, List<Long> signOrgIds, Long signSiteId) {
List<StatisticsSign> listAllRecord = new ArrayList<StatisticsSign>();
;
try {
List<StatisticsSign> list = statisticsSignMapper.chartGroup(trainningProjectId, startDate, endDate, signCompanyId, signOrgIds, signSiteId);
Date startDate1;
Date endDate1;
int num = 0;
String oldDate;
startDate1 = simpleDateFormat.parse(startDate);
endDate1 = simpleDateFormat.parse(endDate);
num = (int) ((endDate1.getTime() - startDate1.getTime()) / (1000 * 3600 * 24));
Date updateDate = startDate1;
String updateDateValue = simpleDateFormat.format(updateDate);
Boolean isTrue = false;
StatisticsSign rsccv;
int j = 0;
for (int i = 0; i <= num; i++) {
if (list != null && list.size() > 0) {
if (j < list.size()) {
rsccv = list.get(j);
if (null == rsccv.getSignTime()) {
continue;
}
if (simpleDateFormat.format(rsccv.getSignTime()).equals(updateDateValue)) {
j = j + 1;
listAllRecord.add(rsccv);
isTrue = true;
} else {
isTrue = false;
}
}
}
if (!isTrue) {
rsccv = new StatisticsSign();
rsccv.setSignTime(updateDate);
rsccv.setJoinStateCount(0);
rsccv.setCanStateCount(0);
listAllRecord.add(rsccv);
}
Calendar c = Calendar.getInstance();
c.setTime(updateDate);
c.add(Calendar.DAY_OF_MONTH, 1); // 利用Calendar 实现 Date日期+1天
updateDate = c.getTime();
updateDateValue = simpleDateFormat.format(updateDate);
isTrue = false;
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return listAllRecord;
}
@Override
public List<StatisticsSignLearn> insertAccountLearn(Long researchId, String currentDate) {
int count = statisticsSignMapper.insertAccountLearn(researchId, currentDate);
if (count == 0) {
return null;
}
return statisticsSignMapper.selectAccountLearn(researchId, currentDate);
}
@Override
public Integer statisticsSignPageCount(Long projectId, String startDate, String endDate, Long signCompanyId, List<Long> signOrgIds, Long signSiteId) {
return statisticsSignMapper.statisticsSignCount(projectId, startDate, endDate, signCompanyId, signOrgIds, signSiteId);
}
@Override
public List<StatisticsSign> statisticsSignList(Long projectId, String startDate, String endDate, Long signCompanyId, List<Long> signOrgIds, Long signSiteId, Integer pageNo, Integer pageSize) {
Page<StatisticsSign> page = new Page<StatisticsSign>(pageNo, pageSize);
List<StatisticsSign> list = statisticsSignMapper.statisticsSignPage(projectId, startDate, endDate, signCompanyId, signOrgIds, signSiteId, null, page);
return list;
}
@Override
public Integer statisticsSignViewCount(Long id, Long trainningProjectId, String startDate, String endDate, String orgNameOrCode, String accountName) {
if (accountName == null || accountName.equals("")) {
accountName = null;
}
if (orgNameOrCode == null || orgNameOrCode.equals("")) {
orgNameOrCode = null;
}
return statisticsSignMapper.statisticsSignViewCount(id, trainningProjectId, startDate, endDate, orgNameOrCode, accountName);
}
@Override
public List<StatisticsSign> statisticsSignViewList(Long id, Long trainningProjectId, String startDate, String endDate, String orgNameOrCode, String accountName, Integer pageNo, Integer pageSize) {
if (accountName == null || accountName.equals("")) {
accountName = null;
}
if (orgNameOrCode == null || orgNameOrCode.equals("")) {
orgNameOrCode = null;
}
Page<StatisticsSign> page = new Page<StatisticsSign>(pageNo, pageSize);
List<StatisticsSign> list = statisticsSignMapper.statisticsSignView(id, trainningProjectId, startDate, endDate, orgNameOrCode, accountName, page);
return list;
}
}
package com.yizhi.application.util;
import com.yizhi.core.application.context.RequestContext;
import com.yizhi.application.domain.TrSign;
import com.yizhi.core.application.publish.CloudEventPublisher;
import com.yizhi.message.application.enums.RelationType;
import com.yizhi.training.application.vo.EvenType;
import com.yizhi.training.application.vo.domain.TrainingProjectVo;
import com.yizhi.training.application.vo.manage.MessageRemindVo;
import com.yizhi.training.application.vo.manage.TaskVo;
import org.apache.commons.lang3.time.DateUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class SignEvenSendMessage {
@Autowired
private CloudEventPublisher cloudEventPublisher;
private Logger logger = LoggerFactory.getLogger(SignEvenSendMessage.class);
/**
* 触发事件,根据可见范围发消息
*
* @param trainingProject 业务参数对象
* @param accountId
*/
public void evenSendMessage(TrainingProjectVo trainingProject, TrSign finalTrSign, Long accountId, EvenType evenType) {
if (finalTrSign.getCreateTime() == null) {
logger.info("缺失必需参数!!");
return;
}
TaskVo taskVo = new TaskVo();
if (trainingProject != null) {
taskVo.setTaskName(trainingProject.getName());
taskVo.setTaskEndTime(finalTrSign.getCreateTime());
} else {
logger.info("查询出的培训为空!!!!");
return;
}
MessageRemindVo vo = new MessageRemindVo();
vo.setTaskVo(taskVo);
vo.setVisibleRange(trainingProject.getVisibleRange());
vo.setMessageId(evenType.getKey());
vo.setMessageType(3);
vo.setRelationId(finalTrSign.getId());
vo.setRelationType(RelationType.QD.getKey());
vo.setSendType(1);
//定时任务默认五分钟执行一次 这里默认暂时不延迟时间
vo.setSendTime(DateUtils.addMinutes(new Date(), 0));
if (accountId != null) {
vo.setAccountId(accountId);
}
RequestContext requestContext = new RequestContext();
requestContext.setCompanyId(trainingProject.getCompanyId());
requestContext.setSiteId(trainingProject.getSiteId());
requestContext.setAccountId(trainingProject.getCreateById());
requestContext.setAccountName(trainingProject.getCreateByName());
vo.setRequestContext(requestContext);
try {
//临时取消触发功能
// cloudEventPublisher.publish(Constans.MESSAGE_QUEUE, new EventWrapper<MessageRemindVo>(null, vo));
// logger.info("发送消息成功===========");
} catch (Exception e) {
e.printStackTrace();
logger.error("发送消息失败=====================", e);
}
}
}
server.port=39001
spring.application.name=sign
ACTIVE=${spring.profiles.active}
spring.profiles.active=sit
# nacos
spring.cloud.nacos.config.shared-dataids=common-${spring.profiles.active}.properties
spring.cloud.nacos.config.namespace=${spring.profiles.active}
spring.cloud.nacos.config.prefix=${spring.application.name}
spring.cloud.nacos.config.file-extension=properties
spring.cloud.nacos.config.server-addr=192.168.1.13:3333,192.168.1.24:4444,192.168.1.38:5555
ribbon.ReadTimeout=360000
ribbon.ConnectTimeout=360000
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径 -->
<property name="LOG_HOME" value="${LOG_PATH}"/>
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
<pattern>%yellow(%date{yyyy-MM-dd HH:mm:ss}) %blue([%thread]) %-5level %green(%logger{70}) - %cyan(%msg%n)</pattern>
<charset>UTF-8</charset>
</encoder>
<param name="Encoding" value="UTF-8"/>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名 -->
<FileNamePattern>${LOG_HOME}/${LOG_FILE}-%d{yyyy-MM-dd}.log</FileNamePattern>
<!--日志文件保留天数 -->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<param name="Encoding" value="UTF-8"/>
<!--日志文件最大的大小 -->
<triggeringPolicy
class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>200MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!-- 日志输出级别 -->
<root level="INFO">
<appender-ref ref="FILE"/>
<!-- 生产环境将请stdout,testfile去掉 -->
<appender-ref ref="STDOUT"/>
</root>
<logger name="com.yizhi.application.mapper" level="debug" additivity="false">
<appender-ref ref="STDOUT"/>
</logger>
</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.yizhi.application.mapper.SignRecordMapper">
<select id="selectSignRecordListByAccountIdAndMonth" resultType="com.yizhi.sign.application.vo.TrSignRecordVo">
SELECT DATE_FORMAT(sign_time,'%m') AS month,DATE_FORMAT(sign_time,'%Y-%m-%d %H:%i') AS signDate,training_project_id,'' AS trainingProjectName
FROM tr_sign_record
WHERE account_id = #{accountId}
<if test="year != null and year != ''">
AND DATE_FORMAT(sign_time,'%Y') = #{year}
</if>
<if test="month != null and month != ''">
AND DATE_FORMAT(sign_time,'%m') = #{month}
</if>
ORDER BY sign_time DESC, training_project_id
</select>
<select id="getTainningProjectById" resultType="com.yizhi.training.application.vo.domain.TrainingProjectVo">
SELECT
*
FROM
training_project
WHERE
id = #{trainingProjectId}
</select>
<select id="getAuthorizations" resultType="com.yizhi.training.application.vo.domain.TpAuthorizationRangeVo">
SELECT
*
FROM
tp_authorization_range
WHERE
biz_id = #{trainingProjectId}
and
deleted = 0
</select>
<select id="selectSignTimeList" resultType="com.yizhi.application.domain.TrSignTime">
SELECT
*
FROM
tr_sign_time
WHERE
training_project_id = #{trainingProjectId}
AND deleted = 0
</select>
<select id="exportSignRecord" resultType="com.yizhi.sign.application.vo.ExportSignRecordVO">
SELECT
account_id as accountId,sign_time as signTime,
CASE sign_status
WHEN 0 THEN
1
WHEN 1 THEN
2
END as signState
FROM
tr_sign_record
WHERE
sign_id = #{signTimeId}
<if test="accountIds != null and accountIds.size()>0">
AND account_id IN
<foreach collection="accountIds" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
</select>
</mapper>
<?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.yizhi.application.mapper.SignTimeMapper">
<update id="updateSignTimesStateBySignIdAndIds" parameterType="java.util.List">
update tr_sign_time
set deleted = 1,update_time=now(),update_by_id =#{accountId} , update_by_name=#{accountName}
where sign_id=#{signId}
<if test="times!=null and times.size()>0">
AND id not in
<foreach collection="times" index="index" item="item" separator="," open="(" close=")">
#{item.id}
</foreach>
</if>
</update>
<select id="selectByTimeId" resultType="com.yizhi.application.domain.TrSign">
select b.start_time as signStartDate ,b.end_time as signEndDate,project.name as trainningProjectName,
project.id trainingProjectId
FROM tr_sign as a INNER join tr_sign_time as b on b.sign_id = a.id
inner join `training_project` as project on a.training_project_id = project.id
where b.id = #{signTimeId} and b.deleted = 0
</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.yizhi.application.mapper.StatisticsSignMapper">
<select id="selectMaxDate" resultType="java.util.Date">
SELECT <![CDATA[ MAX(DATE_FORMAT(sign_time,'%Y-%m-%d')) ]]>
FROM statistics_sign_learn_metadata
</select>
<select id="selectRecordMinTime" resultType="java.util.Date">
select min(create_time) from tr_sign WHERE state != 1
</select>
<select id="getAllResearchs" resultType="com.yizhi.application.domain.TrSign">
SELECT a.id,a.name,b.create_time as createTime,
a.site_id as siteId,a.org_id as orgId,a.company_id as companyId,
project.visible_range as visibleRange,project.id as trainingProjectId,project.name as trainningProjectName,
project.create_time as projectCreateTime,b.start_time as signStartDate ,b.end_time as signEndDate,b.id as signTimeId,b.address,b.range
FROM tr_sign_time b
LEFT JOIN tr_sign a on b.sign_id = a.id
LEFT JOIN training_project as project on b.training_project_id = project.id
WHERE
((DATE_FORMAT(b.start_time, '%Y-%m-%d')&lt;=DATE_FORMAT(#{endDate}, '%Y-%m-%d') AND
DATE_FORMAT(b.end_time, '%Y-%m-%d')>=DATE_FORMAT(#{startDate}, '%Y-%m-%d') )
or (DATE_FORMAT(b.update_time, '%Y-%m-%d')&lt;=DATE_FORMAT(#{endDate}, '%Y-%m-%d') AND
DATE_FORMAT(b.update_time, '%Y-%m-%d')>=DATE_FORMAT(#{startDate}, '%Y-%m-%d') )
) AND a.state != 1
AND a.id IS NOT NULL
AND project.id IS NOT NULL
AND b.deleted != 1
GROUP BY b.id
</select>
<select id="getAllRelationId" resultType="java.lang.Long">
select relation_id from cloud_trainning_project.tp_authorization_range where biz_id=#{trainingProjectId}
</select>
<delete id="deleteRecordeByDate">
DELETE statistics_sign_metadata WHERE <![CDATA[ date_format(sign_time,'%Y-%m-%d')=#{currentDate} ]]>
</delete>
<select id="selectAccountLearnByResearchId" resultType="java.util.Map">
SELECT account_id AS accountId
FROM statistics_sign_metadata
WHERE sign_id=#{signId}
</select>
<!-- 批量插入 -->
<insert id="insertAccountLearn">
INSERT statistics_sign_learn_metadata(sign_id,sign_time_id,
account_id,sign_time,can_state,join_state,trainning_project_id,record_create_time,start_time,end_time)
SELECT b.id,c.id,a.account_id,a.sign_time,1,1,b.training_project_id,now(),c.start_time,c.end_time
FROM tr_sign_record a
LEFT JOIN tr_sign_time c ON a.sign_id=c.id
left JOIN tr_sign b on b.id = c.sign_id
WHERE b.id=#{researchId} AND DATE_FORMAT(a.sign_time,'%Y-%m-%d')=DATE_FORMAT(#{currentDate},'%Y-%m-%d')
GROUP BY a.account_id,DATE_FORMAT(a.sign_time,'%Y-%m-%d'),a.sign_id
</insert>
<select id="selectAccountLearn" resultType="com.yizhi.application.domain.StatisticsSignLearn">
SELECT account_id AS accountId,id
FROM statistics_sign_learn_metadata
WHERE sign_id=#{researchId} AND DATE_FORMAT(sign_time,'%Y-%m-%d')=DATE_FORMAT(#{currentDate},'%Y-%m-%d')
</select>
<select id="selectEmptyCourseLearnCount" resultType="java.lang.Integer">
SELECT COUNT(sign_id)
FROM statistics_sign_metadata
WHERE sign_id=#{researchId} LIMIT 0,1
</select>
<!-- 调研信息直接从statistics_research_metadata表中查询效率很慢,对其进行拆分.按调研统计的查询条件从此表获取 -->
<insert id="insertStatisticsResearchToGroupFind">
INSERT INTO statistics_sign_metadata_sign_group_find(sign_id,sign_name,sign_create_time,company_id,site_id,org_id,create_time)
SELECT sign_id,sign_name,sign_create_time,sign_company_id,sign_site_id,sign_org_id,now()
FROM statistics_sign_metadata
GROUP BY sign_id,sign_org_id,sign_site_id,sign_company_id
</insert>
<delete id="deleteStatisticsResearchToGroupFind">
DELETE FROM statistics_sign_metadata_sign_group_find;
</delete>
<delete id="deleteStatisticsResearchToAccountGroupFind">
DELETE FROM statistics_sign_metadata_account_group_find;
</delete>
<!-- 学员信息直接从statistics_research_metadata表中查询效率很慢,对其进行拆分.按用户统计的查询条件从此表获取 -->
<insert id="insertStatisticsResearchToAccountGroupFind">
INSERT INTO statistics_sign_metadata_account_group_find(org_id,site_id,company_id,account_id,account_work_num,account_name,account_fullname,org_name,org_parent_names,
account_state,account_org_id,account_site_id,account_company_id)
SELECT a.sign_org_id,a.sign_site_id,a.sign_company_id,a.account_id,a.account_work_num,a.account_name,a.account_fullname,a.org_name,a.org_parent_names,
a.account_state,a.account_org_id,a.account_site_id,a.account_company_id
FROM statistics_sign_metadata a
GROUP BY a.account_id,a.sign_org_id,a.sign_site_id,a.sign_company_id
</insert>
<delete id="deleteEmptyAccountLearn">
DELETE a
FROM statistics_sign_metadata a,statistics_sign_metadata b
WHERE b.sign_time IS NOT NULL AND a.sign_time IS NULL AND b.account_id IS NOT NULL AND a.account_id = b.account_id
AND a.sign_id=b.sign_id
</delete>
<select id="selectEmptyCourseAccountLearnCount" resultType="java.lang.Integer">
SELECT COUNT(id)
FROM statistics_sign_metadata
WHERE sign_id=#{researchId} AND account_id=#{accountId} LIMIT 0,1
</select>
<select id="statisticsSignPage" resultType="com.yizhi.application.domain.StatisticsSign">
select b.sign_time_id as signId,b.sign_start_time AS signStartTime,b.sign_end_time AS signEndTime,
a.sign_name AS signName,b.trainning_project_name AS trainningProjectName, b.sign_id as id,
b.can_count AS canStateCount,
COUNT(DISTINCT c.account_id) AS joinStateCount
FROM statistics_sign_metadata_sign_group_find as a
INNER JOIN statistics_sign_can_metadata b ON a.sign_id=b.sign_id
LEFT JOIN statistics_sign_learn_metadata c ON b.sign_time_id=c.sign_time_id
<!--微信端签到现在没验证培训项目可见范围所有用,加了个可见范围查询验证,后期优化要去掉-->
-- and c.account_id in (select account_id from statistics_sign_metadata where sign_id = b.sign_id)
<if test="startDate !=null"> and <![CDATA[ DATE_FORMAT(c.start_time,'%Y-%m-%d')<=DATE_FORMAT(#{endDate,jdbcType=VARCHAR},'%Y-%m-%d') ]]> </if>
<if test="endDate !=null"> and <![CDATA[ DATE_FORMAT(c.end_time,'%Y-%m-%d')>=DATE_FORMAT(#{startDate,jdbcType=VARCHAR},'%Y-%m-%d') ]]> </if>
where a.company_id=#{signCompanyId} and a.site_id = #{signSiteId} and b.status = 0 AND b.sign_time_id IS NOT NULL
<if test="startDate !=null"> and <![CDATA[ DATE_FORMAT(b.sign_start_time,'%Y-%m-%d')<=DATE_FORMAT(#{endDate,jdbcType=VARCHAR},'%Y-%m-%d') ]]> </if>
<if test="endDate !=null"> and <![CDATA[ DATE_FORMAT(b.sign_end_time,'%Y-%m-%d')>=DATE_FORMAT(#{startDate,jdbcType=VARCHAR},'%Y-%m-%d') ]]> </if>
<if test="kwd !=null"> and (b.trainning_project_name LIKE concat('%',#{kwd},'%'))</if>
<if test="signOrgIds != null">and a.org_id in
(<foreach collection="signOrgIds" separator="," item="orgId">#{orgId}</foreach>)
</if>
<if test="projectId != null"> and b.trainning_project_id=#{projectId} </if>
GROUP BY b.sign_time_id,a.company_id,a.org_id,a.site_id
ORDER BY b.project_create_time DESC ,b.sign_start_time ASC
</select>
<select id="statisticsSignCount" resultType="java.lang.Integer">
select count(signId) from (
select c.sign_time_id as signId
FROM statistics_sign_metadata_sign_group_find as a
LEFT JOIN statistics_sign_can_metadata c ON a.sign_id=c.sign_id
where a.company_id=#{signCompanyId} and a.site_id = #{signSiteId} and c.status = 0
<if test="startDate !=null"> and <![CDATA[ DATE_FORMAT(c.sign_start_time,'%Y-%m-%d')<=DATE_FORMAT(#{endDate,jdbcType=VARCHAR},'%Y-%m-%d') ]]> </if>
<if test="endDate !=null"> and <![CDATA[ DATE_FORMAT(c.sign_end_time,'%Y-%m-%d')>=DATE_FORMAT(#{startDate,jdbcType=VARCHAR},'%Y-%m-%d') ]]> </if>
<if test="signOrgIds != null">and a.org_id in
(<foreach collection="signOrgIds" separator="," item="orgId">#{orgId}</foreach>)
</if>
<if test="projectId != null"> and c.trainning_project_id=#{projectId} </if>
GROUP BY c.sign_time_id,a.company_id,a.org_id,a.site_id
)r
</select>
<select id="statisticsSignView" resultType="com.yizhi.application.domain.StatisticsSign">
SELECT IFNULL(b.join_state,0) AS joinState,
a.trainning_project_id as trainningProjectId,
a.sign_id as signId,a.sign_name as signName,b.start_time as signStartTime,
b.end_time as signEndTime, a.sign_company_id as signCompanyId,a.sign_org_id as signOrgId,a.project_create_time as projectCreateTime,
a.sign_site_id as signSiteId,a.sign_create_time as signCreateTime,a.account_id as accountId,
a.account_work_num as accountWorkNum,a.account_name as accountName,a.account_fullname as accountFullname,
a.account_state as accountState,a.account_company_id as accountCompanyId,a.account_org_id as accountOrgId,
a.account_site_id as accountSiteId,b.sign_time as signTime, a.org_name as orgName, a.org_parent_names as orgParentNames
FROM statistics_sign_metadata a
LEFT JOIN (select * from statistics_sign_learn_metadata where sign_time_id = #{signTimeId})b
on a.account_id = b.account_id
<if test="startDate !=null"> and <![CDATA[ DATE_FORMAT(b.sign_time,'%Y-%m-%d')<=DATE_FORMAT(#{endDate,jdbcType=VARCHAR},'%Y-%m-%d') ]]> </if>
<if test="endDate !=null"> and <![CDATA[ DATE_FORMAT(b.sign_time,'%Y-%m-%d')>=DATE_FORMAT(#{startDate,jdbcType=VARCHAR},'%Y-%m-%d') ]]> </if>
where a.sign_id = #{signId}
<if test="orgNameOrCode != null" > and a.org_name LIKE concat('%',#{orgNameOrCode},'%')</if>
<if test="accountName !=null"> and (a.account_name like concat('%',#{accountName},'%')
or a.account_fullname like concat('%',#{accountName},'%'))</if>
GROUP BY a.account_id
ORDER BY b.sign_time DESC
</select>
<select id="statisticsSignViewCount" resultType="java.lang.Integer">
select count(*) from(
SELECT
a.sign_id
FROM statistics_sign_metadata a
LEFT JOIN statistics_sign_learn_metadata as b on b.sign_id=a.sign_id and a.account_id = b.account_id and b.sign_time_id = #{signTimeId}
<if test="startDate !=null"> and <![CDATA[ DATE_FORMAT(b.sign_time,'%Y-%m-%d')<=DATE_FORMAT(#{endDate,jdbcType=VARCHAR},'%Y-%m-%d') ]]> </if>
<if test="endDate !=null"> and <![CDATA[ DATE_FORMAT(b.sign_time,'%Y-%m-%d')>=DATE_FORMAT(#{startDate,jdbcType=VARCHAR},'%Y-%m-%d') ]]> </if>
where a.sign_id = #{signId}
<if test="orgNameOrCode != null" > and a.org_name LIKE concat('%',#{orgNameOrCode},'%')</if>
<if test="accountName !=null"> and (a.account_name like concat('%',#{accountName},'%')
or a.account_fullname like concat('%',#{accountName},'%'))</if>
GROUP BY a.account_id
ORDER BY b.sign_time DESC
)t
</select>
<select id="chartGroup" resultType="com.yizhi.application.domain.StatisticsSign">
SELECT COUNT(DISTINCT a.account_id) AS canStateCount,
COUNT(DISTINCT b.account_id) AS joinStateCount, <![CDATA[ DATE_FORMAT(b.sign_time,'%Y-%m-%d')]]> as signTime
FROM tr_sign_time as c LEFT JOIN statistics_sign_learn_metadata as b on c.id=b.sign_time_id
left join statistics_sign_metadata as a on a.sign_id = c.sign_id
<if test="startDate !=null"> and <![CDATA[ DATE_FORMAT(b.start_time,'%Y-%m-%d')<=DATE_FORMAT(#{endDate,jdbcType=VARCHAR},'%Y-%m-%d') ]]> </if>
<if test="endDate !=null"> and <![CDATA[ DATE_FORMAT(b.end_time,'%Y-%m-%d')>=DATE_FORMAT(#{startDate,jdbcType=VARCHAR},'%Y-%m-%d') ]]> </if>
where a.sign_company_id=#{signCompanyId} and a.sign_site_id = #{signSiteId}
<if test="startDate !=null"> and <![CDATA[ DATE_FORMAT(a.sign_start_time,'%Y-%m-%d')<=DATE_FORMAT(#{endDate,jdbcType=VARCHAR},'%Y-%m-%d') ]]> </if>
<if test="endDate !=null"> and <![CDATA[ DATE_FORMAT(a.sign_end_time,'%Y-%m-%d')>=DATE_FORMAT(#{startDate,jdbcType=VARCHAR},'%Y-%m-%d') ]]> </if>
<if test="signOrgIds != null">and a.sign_org_id in
(<foreach collection="signOrgIds" separator="," item="orgId">#{orgId}</foreach>)
</if>
<if test="projectId !=null"> and a.trainning_project_id=#{projectId} </if>
GROUP BY signTime
</select>
<select id="getRecords" resultType="com.yizhi.application.domain.StatisticsSignLearn">
SELECT c.sign_id as signId,a.sign_id as signTimeId,a.account_id,a.sign_time,c.training_project_id as trainningProjectId,c.start_time as signStartTime,c.end_time as signEndTime
FROM tr_sign_record a
LEFT JOIN tr_sign_time c ON a.sign_id=c.id
WHERE a.sign_id= #{signTimeId}
and ((<![CDATA[ DATE_FORMAT(a.create_time,'%Y-%m-%d')<=DATE_FORMAT(#{endDate,jdbcType=VARCHAR},'%Y-%m-%d') ]]>
and <![CDATA[ DATE_FORMAT(a.create_time,'%Y-%m-%d')>=DATE_FORMAT(#{startDate,jdbcType=VARCHAR},'%Y-%m-%d') ]]>)
or (<![CDATA[ DATE_FORMAT(a.sign_time,'%Y-%m-%d')<=DATE_FORMAT(#{endDate,jdbcType=VARCHAR},'%Y-%m-%d') ]]>
and <![CDATA[ DATE_FORMAT(a.sign_time,'%Y-%m-%d')>=DATE_FORMAT(#{startDate,jdbcType=VARCHAR},'%Y-%m-%d') ]]>)
)
GROUP BY a.sign_id,a.account_id,DATE_FORMAT(a.sign_time,'%Y-%m-%d')
</select>
<!-- 删除应参加人数统计表 -->
<delete id="deleteStatisticsAccountCanCount">
DELETE FROM statistics_sign_can_metadata;
</delete>
<!-- 添加应参加人数统计表 -->
<!--<insert id="insertStatisticsAccountCanCount">-->
<!--INSERT INTO statistics_sign_can_metadata(sign_company_id,sign_site_id,sign_org_id,sign_time_id,sign_start_time,sign_end_time,trainning_project_name,project_create_time,sign_id,status,can_count)-->
<!--SELECT sign_company_id,sign_site_id,sign_org_id,sign_time_id,sign_start_time,sign_end_time,trainning_project_name,project_create_time,sign_id,status,COUNT(account_id)-->
<!--FROM statistics_sign_metadata b -->
<!--GROUP BY sign_company_id,sign_site_id,sign_org_id,sign_time_id,sign_start_time,sign_end_time,trainning_project_name,status,sign_id-->
<!--</insert>-->
<!-- 添加应参加人数统计表 -->
<insert id="insertStatisticsAccountCanCount">
INSERT INTO statistics_sign_can_metadata ( sign_company_id, sign_site_id, sign_org_id, sign_time_id, sign_start_time, sign_end_time, trainning_project_name, project_create_time, sign_id, STATUS, can_count )
SELECT
b.sign_company_id,b.sign_site_id,b.sign_org_id,a.id,a.start_time,a.end_time,b.trainning_project_name,a.create_time,a.sign_id,a.deleted,b.count
FROM
tr_sign_time a
LEFT JOIN (
SELECT sign_id,sign_company_id,sign_site_id,sign_org_id,trainning_project_name,COUNT( account_id ) AS count
FROM
statistics_sign_metadata
GROUP BY
sign_company_id,sign_site_id,sign_org_id,sign_time_id,sign_start_time,sign_end_time,trainning_project_name,STATUS,sign_id
) b ON a.sign_id = b.sign_id
</insert>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.yizhi</groupId>
<artifactId>wmy-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath/>
</parent>
<groupId>com.yizhi</groupId>
<artifactId>sign-project</artifactId>
<version>1.0-SNAPSHOT</version>
<modules>
<module>cloud-sign-api</module>
<module>cloud-sign</module>
</modules>
<packaging>pom</packaging>
<repositories>
<repository>
<id>wmy4.0</id>
<url>http://mvn.km365.pw/nexus/content/groups/wmy4.0-group/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<updatePolicy>always</updatePolicy>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</project>
\ 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