Commit 5fe2e4a6 by liangkaiping

copy

parent 31ba0ad1
# cloud-calendar
日历 打卡
\ No newline at end of file
<?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>cloud-calendar</artifactId>
<groupId>com.yizhi</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.yizhi</groupId>
<artifactId>calendar-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-core</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.yizhi</groupId>
<artifactId>cloud-orm</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.calendar.application.feign;
import com.yizhi.calendar.application.vo.CalendarParam;
import com.yizhi.calendar.application.vo.CalendarVO;
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;
@FeignClient(name = "calendar", contextId = "CalendarClientxz")
public interface CalendarClient {
/**
* 日历签到打卡规则回显
* @return
*/
@GetMapping("/manage/calendar/calendarPointSet/getCalendar")
public CalendarVO getCalendar();
/**
* 日历签到打卡规则入库
* @param calendarParam
* @return
*/
@PostMapping("/manage/calendar/calendarPointSet/insert")
public Boolean insertCalendarPointSet(@RequestBody CalendarParam calendarParam);
}
package com.yizhi.calendar.application.feign;
import org.springframework.cloud.openfeign.FeignClient;
@FeignClient(name = "calendar", contextId = "CalendarRecordClient")
public interface CalendarRecordClient {
}
package com.yizhi.calendar.application.feign;
import com.baomidou.mybatisplus.plugins.Page;
import com.yizhi.calendar.application.vo.CalendarChartVO;
import com.yizhi.calendar.application.vo.CalendarStatisticVO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
import java.util.Map;
@FeignClient(name = "calendar", contextId = "CalendarStatisticClient")
public interface CalendarStatisticClient {
/**
* 打卡报表折线图
*
* @param startDate
* @param endDate
* @return
*/
@GetMapping("/statistic/calendar/chart")
public List<CalendarChartVO> signChart(@RequestParam(name = "startDate", required = true) String startDate,
@RequestParam(name = "endDate", required = true) String endDate);
@GetMapping("/statistic/calendar/list")
public Page<CalendarStatisticVO> list(@RequestParam(name = "startDate", required = true) String startDate,
@RequestParam(name = "endDate", required = true) String endDate,
@RequestParam(name = "kwd", required = false) String kwd,
@RequestParam(name = "pageSize", required = false, defaultValue = "10") Integer pageSize,
@RequestParam(name = "pageNo", required = false, defaultValue = "1") Integer pageNo);
@GetMapping("/statistic/calendar/list/export")
public Map<String, Object> listExport(@RequestParam(name = "startDate", required = true) String startDate,
@RequestParam(name = "endDate", required = true) String endDate,
@RequestParam(name = "kwd", required = false) String kwd);
@GetMapping("/statistic/calendar/account/export")
public Map<String, Object> accountExport(@RequestParam(name = "startDate", required = true) String startDate,
@RequestParam(name = "endDate", required = true) String endDate,
@RequestParam(name = "userId", required = true) Long userId);
@GetMapping("/statistic/calendar/detail/export")
public Map<String, Object> detailExport(@RequestParam(name = "startDate", required = true) String startDate,
@RequestParam(name = "endDate", required = true) String endDate,
@RequestParam(name = "kwd", required = false) String kwd);
}
package com.yizhi.calendar.application.feign;
import com.baomidou.mybatisplus.plugins.Page;
import com.yizhi.calendar.application.vo.CalendarRecordVO;
import com.yizhi.calendar.application.vo.CalendarSignViewVO;
import com.yizhi.calendar.application.vo.HeadVO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
import java.util.Map;
@FeignClient(name = "calendar", contextId = "StudentCalendarClient")
public interface StudentCalendarClient {
/**
* 打卡签到入口
* @param accountId
* @param siteId
* @return
*/
@GetMapping("/api/calendar/sign")
public Map<String, Object> sign(@RequestParam("accountId") Long accountId,@RequestParam("siteId") Long siteId);
/**
* 用户每日打卡详情
* @param accountId
* @param siteId
* @return
*/
@GetMapping("/api/calendar/isSign")
public CalendarSignViewVO isSign(@RequestParam("accountId") Long accountId,@RequestParam("siteId") Long siteId);
/**
* 签到打卡头部数据
* @param accountId
* @param siteId
* @return
*/
@GetMapping("/api/calendar/headData")
public HeadVO getHeadData(@RequestParam("accountId") Long accountId,@RequestParam("siteId") Long siteId);
/**
* 签到明细
* @param accountId
* @param siteId
* @param type
* @param pageNo
* @param pageSize
* @return
*/
@GetMapping("/api/calendar/signDetail")
public Page<CalendarRecordVO> getSignDetail(@RequestParam("accountId") Long accountId, @RequestParam("siteId") Long siteId, @RequestParam("type") Integer type, @RequestParam("pageNo") Integer pageNo, @RequestParam("pageSize") Integer pageSize);
/**
* 签到日历
* @param accountId
* @param siteId
* @param month
* @return
*/
@GetMapping("/api/calendar/signByMonth")
public List<CalendarRecordVO> getSignByMonth(@RequestParam("accountId") Long accountId, @RequestParam("siteId") Long siteId, @RequestParam("month") String month);
/**
* 周期内用户打卡次数
* @param accountId
* @param siteIds
* @param startDate
* @param endDate
* @return
*/
@GetMapping("/api/calendar/signNum")
public Map<Long, Long> signNum(@RequestParam("siteIds") List<Long> siteIds,@RequestParam("startDate") String startDate,@RequestParam("endDate") String endDate);
@GetMapping("/api/calendar/getSignState")
public Integer getSignState(@RequestParam("accountId") Long accountId,@RequestParam("siteId") Long siteId);
}
package com.yizhi.calendar.application.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ApiModel(value = "CalendarAccountStaticticVO",description = "用户打卡记录信息")
@Data
public class CalendarAccountStaticticVO {
@ApiModelProperty(value = "签到日期")
private String signDate;
@ApiModelProperty(value = "签到时间")
private String signTime;
@ApiModelProperty(value = "积分")
private Integer point;
}
package com.yizhi.calendar.application.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ApiModel(value = "CalendarChartVO" ,description = "签到折线图")
@Data
public class CalendarChartVO {
@ApiModelProperty(value = "折线图时间轴")
private String dateStr;
@ApiModelProperty(value = "签到次数")
private Integer signNum;
}
package com.yizhi.calendar.application.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ApiModel(value = "CalendarDetailStatisticVO",description = "签到明细信息")
@Data
public class CalendarDetailStatisticVO{
@ApiModelProperty(value = "用户名")
private String name;
@ApiModelProperty(value = "姓名")
private String fullName;
@ApiModelProperty(value = "部门名称")
private String orgName;
@ApiModelProperty(value = "所在组织架构")
private String orgNames;
@ApiModelProperty(value = "工号")
private String workNum;
@ApiModelProperty(value = "职位")
private String position;
@ApiModelProperty(value = "用户id")
private Long accountId;
@ApiModelProperty(value = "发放积分")
private Integer point;
@ApiModelProperty(value = "签到日期")
private String signDate;
@ApiModelProperty(value = "打卡时间")
private String signTime;
}
package com.yizhi.calendar.application.vo;
import java.util.List;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 日历打卡设置请求类
*
* @author hecong
* @date 2019-10-11
*/
@ApiModel("日历打卡设置请求类")
@Data
public class CalendarParam {
@ApiModelProperty("首次签到积分")
private Integer firstPoint;
@ApiModelProperty("积分设置类型")
private Integer setType;
@ApiModelProperty("周期")
private Long cycle;
@ApiModelProperty("周期")
private List<CalendarPointSetParam> calendarPointSets;
@ApiModelProperty("是否开启")
private Integer state;
}
package com.yizhi.calendar.application.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 日历打卡积分规则请求类
*
* @author hecong
* @date 2019-10-11
*/
@ApiModel(" 日历打卡积分规则请求类")
@Data
public class CalendarPointSetParam {
@ApiModelProperty("积分对应最小连续天数")
private Integer minDate;
@ApiModelProperty("积分")
private Integer point;
}
package com.yizhi.calendar.application.vo;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.FieldFill;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* <p>
* 日历打卡积分发放设置表
* </p>
*
* @author fulan123
* @since 2019-10-10
*/
@Data
@ApiModel(value = "CalendarPointSet", description = "日历打卡积分规则设置表")
public class CalendarPointSetVO {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键")
private Long id;
@ApiModelProperty(value = "日历id")
private Long calendarId;
@ApiModelProperty(value = "积分设置类型(1连续递增,2自定义)")
private Integer setType;
@ApiModelProperty(value = "状态 0 删除 1 有效 默认有效")
private Integer state;
@ApiModelProperty(value = "积分对应连续最小天数")
private Integer minDate;
@ApiModelProperty(value = "积分")
private Integer point;
@ApiModelProperty(value = "创建时间")
private Date createTime;
@ApiModelProperty(value = "创建人ID")
private Long createById;
@ApiModelProperty(value = "创建人名字")
private String createByName;
@ApiModelProperty(value = "修改时间")
private Date updateTime;
@ApiModelProperty(value = "修改人ID")
private Long updateById;
@ApiModelProperty(value = "修改人名字")
private String updateByName;
}
package com.yizhi.calendar.application.vo;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* <p>
* 日签海报表
* </p>
*
* @author fulan123
* @since 2019-10-10
*/
@Data
@ApiModel(value = "CalendarPoster", description = "日签海报表")
@TableName("calendar_poster")
public class CalendarPosterVO {
private static final long serialVersionUID = 1L;
private Long id;
@ApiModelProperty(value = "下载地址")
private String url;
@ApiModelProperty(value = "鸡汤文")
private String content;
@ApiModelProperty(value = "base64编码")
private String base64Code;
}
package com.yizhi.calendar.application.vo;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.FieldFill;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* <p>
* 日历打卡记录表
* </p>
*
* @author fulan123
* @since 2019-10-10
*/
@Data
@ApiModel(value = "CalendarRecord", description = "日历打卡记录表")
public class CalendarRecordVO {
private static final long serialVersionUID = 1L;
private Long id;
@ApiModelProperty(value = "用户id")
private Long accountId;
@ApiModelProperty(value = "首次打卡0,否1 默认首次打卡")
private Integer firstSign;
@ApiModelProperty(value = "发放积分")
private Integer point;
@ApiModelProperty(value = "签到日期")
private String signDate;
@ApiModelProperty(value = "打卡时间")
private String signTime;
@ApiModelProperty(value = "海报id")
private Long posterId;
@ApiModelProperty(value = "创建时间")
private Date createTime;
@ApiModelProperty(value = "企业ID")
private Long companyId;
@ApiModelProperty(value = "站点ID")
private Long siteId;
@ApiModelProperty(value = "部门ID")
private Long orgId;
}
package com.yizhi.calendar.application.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "日历打卡积分规则列表类", description = "日历打卡积分规则列表类")
public class CalendarRuleListVO {
@ApiModelProperty("连续签到最小天数")
private Integer minDate;
@ApiModelProperty("连续签到最大天数")
private Integer maxDate;
@ApiModelProperty("获取对应积分值")
private Integer point;
}
package com.yizhi.calendar.application.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ApiModel("日历打卡签到入口类")
@Data
public class CalendarSignViewVO {
@ApiModelProperty("是否签到")
private Integer isSign;
@ApiModelProperty("签到积分")
private Integer point;
@ApiModelProperty("已连续签到天数")
private Long day;
@ApiModelProperty("周期结束的最后一天")
private Integer isCycle;
@ApiModelProperty("背景图")
private String imgUrl;
@ApiModelProperty("已连续签到天数")
private Long sumDays;
@ApiModelProperty("鸡汤文")
private String content;
@ApiModelProperty("用户名")
private String name;
@ApiModelProperty("头像")
private String headPortrait;
@ApiModelProperty("海报id")
private Long posterId;
}
package com.yizhi.calendar.application.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ApiModel(value = "CalendarStatisticVO",description = "签到打卡统计数据")
@Data
public class CalendarStatisticVO {
@ApiModelProperty(value = "用户id")
private Long accountId;
@ApiModelProperty(value = "用户名")
private String name;
@ApiModelProperty(value = "姓名")
private String fullName;
@ApiModelProperty(value = "部门名称")
private String orgName;
@ApiModelProperty(value = "部门所在组织架构")
private String orgNames;
@ApiModelProperty(value = "工号")
private String workNum;
@ApiModelProperty(value = "职位")
private String position;
@ApiModelProperty(value = "打卡次数")
private Integer count;
@ApiModelProperty(value = "获得积分")
private Integer point;
}
package com.yizhi.calendar.application.vo;
import java.util.Date;
import java.util.List;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class CalendarVO {
@ApiModelProperty(value = "主键")
private Long id;
@ApiModelProperty(value = "首次打卡积分")
private Integer firstPoint;
@ApiModelProperty(value = "积分设置类型(1连续递增,2自定义)")
private Integer setType;
@ApiModelProperty(value = "状态 0未启用 1启用 默认启用")
private Integer state;
@ApiModelProperty(value = "周期持续天数 默认不限制")
private Long cycle;
@ApiModelProperty(value = "企业ID")
private Long companyId;
@ApiModelProperty(value = "站点ID")
private Long siteId;
@ApiModelProperty(value = "部门ID")
private Long orgId;
@ApiModelProperty(value = "创建时间")
private Date createTime;
@ApiModelProperty(value = "创建人ID")
private Long createById;
@ApiModelProperty(value = "创建人名字")
private String createByName;
@ApiModelProperty(value = "修改时间")
private Date updateTime;
@ApiModelProperty(value = "修改人ID")
private Long updateById;
@ApiModelProperty(value = "修改人名字")
private String updateByName;
@ApiModelProperty(value = "积分规则")
private List<CalendarPointSetVO> sets;
}
package com.yizhi.calendar.application.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ApiModel("日历打卡学员端头部数据")
@Data
public class HeadVO {
@ApiModelProperty("连续签到天数")
private Long consecutiveDays;
@ApiModelProperty("累计签到天数")
private Long sumDays;
@ApiModelProperty("奖励积分")
private Integer point;
}
package com.yizhi.calendar.application.vo;
import lombok.Data;
@Data
public class SignNumVO {
private Long accountId;
private Long signNum;
}
<?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>cloud-calendar</artifactId>
<groupId>com.yizhi</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.yizhi</groupId>
<artifactId>calendar</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.yizhi</groupId>
<artifactId>calendar-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-util</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-system-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>
\ No newline at end of file
package com.yizhi.calendar.application;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@EnableTransactionManagement
@SpringBootApplication
@EnableFeignClients(basePackages = {"com.yizhi"})
@ComponentScan(basePackages = {"com.yizhi"})
public class CalendarApplication {
public static void main(String[] args) {
SpringApplication.run(CalendarApplication.class, args);
}
}
package com.yizhi.calendar.application.controller;
import com.yizhi.application.orm.id.IdGenerator;
import com.yizhi.calendar.application.vo.CalendarPointSetVO;
import com.yizhi.calendar.application.domain.Calendar;
import com.yizhi.calendar.application.domain.CalendarPointSet;
import com.yizhi.core.application.context.ContextHolder;
import com.yizhi.core.application.context.RequestContext;
import org.springframework.beans.BeanUtils;
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.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.yizhi.calendar.application.service.ICalendarPointSetService;
import com.yizhi.calendar.application.service.ICalendarService;
import com.yizhi.calendar.application.vo.CalendarParam;
import com.yizhi.calendar.application.vo.CalendarPointSetParam;
import com.yizhi.calendar.application.vo.CalendarVO;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.commons.collections.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
/**
* <p>
* 日历打卡积分发放设置表 前端控制器
* </p>
*
* @author fulan123
* @since 2019-10-10
*/
@RestController
@RequestMapping("/manage/calendar")
public class CalendarController {
@Autowired
private ICalendarService calendarService;
@Autowired
private ICalendarPointSetService calendarPointSetService;
@Autowired
private IdGenerator idGenerator;
private static final Logger LOG = LoggerFactory.getLogger(CalendarController.class);
/**
* 日历签到打卡规则回显
* @return
*/
@GetMapping("/calendarPointSet/getCalendar")
public CalendarVO getCalendar() {
CalendarVO vo = new CalendarVO();
RequestContext res = ContextHolder.get();
Long siteId = res.getSiteId();
Calendar set = new Calendar();
set.setSiteId(siteId);
EntityWrapper<Calendar> wrapper = new EntityWrapper<Calendar>(set);
Calendar calendar = calendarService.selectOne(wrapper);
if (null!=calendar) {
CalendarPointSet pointSet = new CalendarPointSet();
pointSet.setCalendarId(calendar.getId());
pointSet.setSetType(calendar.getSetType());
pointSet.setState(1);
EntityWrapper<CalendarPointSet> entityWrapper = new EntityWrapper(pointSet);
entityWrapper.orderBy("minDate", true);
List<CalendarPointSet> list = calendarPointSetService.selectList(entityWrapper);
List<CalendarPointSetVO> calendarPointSetVOS = new ArrayList<CalendarPointSetVO>();
for (CalendarPointSet calendarPointSet : list) {
CalendarPointSetVO calendarPointSetVO = new CalendarPointSetVO();
BeanUtils.copyProperties(calendarPointSet,calendarPointSetVO);
calendarPointSetVOS.add(calendarPointSetVO);
}
vo.setSets(calendarPointSetVOS);
vo.setId(calendar.getId());
vo.setFirstPoint(calendar.getFirstPoint());
vo.setSetType(calendar.getSetType());
vo.setCycle(calendar.getCycle());
vo.setState(calendar.getState());
}else {
CalendarPointSet pointSet = new CalendarPointSet();
pointSet.setSetType(1);
pointSet.setPoint(1);
List<CalendarPointSetVO> list = new ArrayList<CalendarPointSetVO>();
CalendarPointSetVO pointSetVO = new CalendarPointSetVO();
BeanUtils.copyProperties(pointSet,pointSetVO);
list.add(pointSetVO);
vo.setFirstPoint(1);
vo.setSetType(1);
vo.setCycle(7l);
vo.setSets(list);
vo.setState(0);
}
return vo;
}
@PostMapping(value = "/calendarPointSet/insert")
public Boolean insertCalendarPointSet(@RequestBody CalendarParam calendarParam){
LOG.info("入参:"+calendarParam.toString());
String result = "";
RequestContext res = ContextHolder.get();
Long siteId = res.getSiteId();
Long accountId = res.getAccountId();
String accountName = res.getAccountName();
Long companyId = res.getCompanyId();
Long orgId = res.getOrgId();
Calendar set = new Calendar();
set.setSiteId(siteId);
EntityWrapper<Calendar> wrapper = new EntityWrapper<Calendar>(set);
Calendar calendar = calendarService.selectOne(wrapper);
//第一次设置日历打卡规则
if (null==calendar) {
calendar = new Calendar();
Long id = idGenerator.generate();
calendar.setId(id);
calendar.setSetType(calendarParam.getSetType());
calendar.setFirstPoint(calendarParam.getFirstPoint());
calendar.setCycle(calendarParam.getCycle());
calendar.setState(calendarParam.getState());
calendar.setCompanyId(companyId);
calendar.setSiteId(siteId);
calendar.setOrgId(orgId);
calendar.setCreateById(accountId);
calendar.setCreateByName(accountName);
calendar.setCreateTime(new Date());
calendarService.insert(calendar);
for(CalendarPointSetParam pointSet:calendarParam.getCalendarPointSets()) {
CalendarPointSet calendarPointSet = new CalendarPointSet();
calendarPointSet.setId(idGenerator.generate());
calendarPointSet.setCalendarId(id);
calendarPointSet.setSetType(calendarParam.getSetType());
if (calendarParam.getSetType()==1) {
calendarPointSet.setPoint(pointSet.getPoint());
}else {
if (pointSet.getMinDate()>calendarParam.getCycle()) {
return false;
}else {
calendarPointSet.setMinDate(pointSet.getMinDate());
calendarPointSet.setPoint(pointSet.getPoint());
}
}
calendarPointSet.setCreateById(accountId);
calendarPointSet.setCreateByName(accountName);
calendarPointSet.setCreateTime(new Date());
boolean b = calendarPointSetService.insert(calendarPointSet);
}
return true;
}else {
//修改日历打卡规则
calendar.setSetType(calendarParam.getSetType());
calendar.setFirstPoint(calendarParam.getFirstPoint());
calendar.setCycle(calendarParam.getCycle());
calendar.setState(calendarParam.getState());
calendar.setUpdateById(accountId);
calendar.setUpdateByName(accountName);
calendar.setUpdateTime(new Date());
List<CalendarPointSet> list = new ArrayList<CalendarPointSet>();
for(CalendarPointSetParam pointSet:calendarParam.getCalendarPointSets()) {
CalendarPointSet calendarPointSet = new CalendarPointSet();
calendarPointSet.setCalendarId(calendar.getId());
calendarPointSet.setId(idGenerator.generate());
calendarPointSet.setSetType(calendarParam.getSetType());
if (calendarParam.getSetType()==1) {
calendarPointSet.setPoint(pointSet.getPoint());
}else {
if (calendarParam.getCycle()<=pointSet.getMinDate()) {
return false;
}else {
calendarPointSet.setMinDate(pointSet.getMinDate());
calendarPointSet.setPoint(pointSet.getPoint());
}
}
calendarPointSet.setCreateById(accountId);
calendarPointSet.setCreateByName(accountName);
calendarPointSet.setCreateTime(new Date());
list.add(calendarPointSet);
}
CalendarPointSet calendarPointSet = new CalendarPointSet();
calendarPointSet.setCalendarId(calendar.getId());
EntityWrapper<CalendarPointSet> entityWrapper = new EntityWrapper<CalendarPointSet>(calendarPointSet);
//删除之前的积分规则
calendarPointSetService.delete(entityWrapper);
//新的积分规则入库
calendarService.updateById(calendar);
if (!CollectionUtils.isEmpty(list)) {
boolean b = calendarPointSetService.insertBatch(list);
}
return true;
}
}
}
package com.yizhi.calendar.application.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 日历打卡记录表 前端控制器
* </p>
*
* @author fulan123
* @since 2019-10-10
*/
@RestController
@RequestMapping("/calendarRecord")
public class CalendarRecordController {
}
package com.yizhi.calendar.application.controller;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.yizhi.calendar.application.task.CalendarAccountExportAsync;
import com.yizhi.calendar.application.task.CalendarDetailExportAsync;
import com.yizhi.calendar.application.task.CalendarListExportAsync;
import com.yizhi.core.application.context.ContextHolder;
import com.yizhi.core.application.context.RequestContext;
import com.yizhi.system.application.system.remote.AccountClient;
import com.yizhi.system.application.vo.AccountVO;
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 com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.plugins.pagination.PageHelper;
import com.yizhi.calendar.application.service.ICalendarRecordService;
import com.yizhi.calendar.application.vo.CalendarChartVO;
import com.yizhi.calendar.application.vo.CalendarStatisticVO;
@RestController
@RequestMapping("/statistic/calendar")
public class CalendarStatisticController {
@Autowired
private ICalendarRecordService calendarRecordService;
@Autowired
private CalendarListExportAsync calendarListExportAsync;
@Autowired
private CalendarAccountExportAsync calendarAccountExportAsync;
@Autowired
private CalendarDetailExportAsync calendarDetailExportAsync;
@Autowired
private AccountClient accountClient;
@GetMapping("/chart")
public List<CalendarChartVO> signChart(@RequestParam(name = "startDate", required = true) String startDate,
@RequestParam(name = "endDate", required = true) String endDate) {
RequestContext res = ContextHolder.get();
Long companyId = res.getCompanyId();
Long siteId = res.getSiteId();
List<CalendarChartVO> list = calendarRecordService.signChart(startDate, endDate, companyId, siteId);
return list;
}
@GetMapping("/list")
public Page<CalendarStatisticVO> list(@RequestParam(name = "startDate", required = true) String startDate,
@RequestParam(name = "endDate", required = true) String endDate,
@RequestParam(name = "kwd", required = false) String kwd,
@RequestParam(name = "pageSize", required = false, defaultValue = "10") Integer pageSize,
@RequestParam(name = "pageNo", required = false, defaultValue = "1") Integer pageNo) {
RequestContext res = ContextHolder.get();
Page<CalendarStatisticVO> page = new Page<CalendarStatisticVO>();
Long companyId = res.getCompanyId();
Long siteId = res.getSiteId();
if(pageSize != null && pageNo != null){
PageHelper.startPage(pageNo,pageSize);
}
List<CalendarStatisticVO> list = calendarRecordService.list(startDate, endDate, kwd, companyId, siteId);
if(pageSize != null && pageNo != null){
page.setTotal(PageHelper.getTotal());
page.setSize(pageSize);
page.setCurrent(pageNo);
PageHelper.remove();
}
page.setRecords(list);
return page;
}
@GetMapping("/list/export")
public Map<String, Object> listExport(@RequestParam(name = "startDate", required = true) String startDate,
@RequestParam(name = "endDate", required = true) String endDate,
@RequestParam(name = "kwd", required = false) String kwd){
RequestContext requestContext = ContextHolder.get();
Date submitTime = new Date();
Long taskId = submitTime.getTime();
String serialNo = "USER-EXPORT-" + taskId;
String taskName = "打卡统计-" + taskId;
String result = "任务编号:" + serialNo + "。任务名称:" + taskName;
Map<String, Object> map = new HashMap<String, Object>();
map.put("accountId", requestContext.getAccountId());
map.put("siteId", requestContext.getSiteId());
map.put("companyId", requestContext.getCompanyId());
map.put("serialNo", serialNo);
map.put("taskId", taskId);
map.put("submitTime", submitTime);
map.put("taskName", taskName);
map.put("kwd", kwd);
map.put("startDate", startDate);
map.put("endDate", endDate);
map.put("result", result);
calendarListExportAsync.execute(map, true);
return map;
}
@GetMapping("/account/export")
public Map<String, Object> accountExport(@RequestParam(name = "startDate", required = true) String startDate,
@RequestParam(name = "endDate", required = true) String endDate,@RequestParam(name = "userId", required = true) Long userId){
RequestContext requestContext = ContextHolder.get();
Date submitTime = new Date();
Long taskId = submitTime.getTime();
AccountVO accountVO = accountClient.findById(userId);
String serialNo = "USER-EXPORT-" + taskId;
String taskName = accountVO.getName()+"打卡记录-" + taskId;
String result = "任务编号:" + serialNo + "。任务名称:" + taskName;
Map<String, Object> map = new HashMap<String, Object>();
map.put("accountId", requestContext.getAccountId());
map.put("siteId", requestContext.getSiteId());
map.put("companyId", requestContext.getCompanyId());
map.put("serialNo", serialNo);
map.put("taskId", taskId);
map.put("submitTime", submitTime);
map.put("taskName", taskName);
map.put("startDate", startDate);
map.put("endDate", endDate);
map.put("userId", userId);
map.put("accountName", accountVO.getName());
map.put("result", result);
calendarAccountExportAsync.execute(map, true);
return map;
}
@GetMapping("/detail/export")
public Map<String, Object> detailExport(@RequestParam(name = "startDate", required = true) String startDate,
@RequestParam(name = "endDate", required = true) String endDate,
@RequestParam(name = "kwd", required = false) String kwd){
RequestContext requestContext = ContextHolder.get();
Date submitTime = new Date();
Long taskId = submitTime.getTime();
String serialNo = "USER-EXPORT-" + taskId;
String taskName = "打卡记录-" + taskId;
String result = "任务编号:" + serialNo + "。任务名称:" + taskName;
Map<String, Object> map = new HashMap<String, Object>();
map.put("accountId", requestContext.getAccountId());
map.put("siteId", requestContext.getSiteId());
map.put("companyId", requestContext.getCompanyId());
map.put("serialNo", serialNo);
map.put("taskId", taskId);
map.put("submitTime", submitTime);
map.put("taskName", taskName);
map.put("kwd", kwd);
map.put("startDate", startDate);
map.put("endDate", endDate);
map.put("result", result);
calendarDetailExportAsync.execute(map, true);
return map;
}
}
package com.yizhi.calendar.application.controller;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.yizhi.calendar.application.domain.Calendar;
import com.yizhi.calendar.application.domain.CalendarPointSet;
import com.yizhi.calendar.application.domain.CalendarRecord;
import com.yizhi.calendar.application.service.ICalendarPointSetService;
import com.yizhi.calendar.application.service.ICalendarService;
import com.yizhi.system.application.system.remote.ReportClient;
import com.yizhi.util.application.date.DateUtil;
import org.apache.commons.collections.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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 com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.yizhi.calendar.application.service.ICalendarRecordService;
import com.yizhi.calendar.application.vo.CalendarSignViewVO;
import com.yizhi.calendar.application.vo.HeadVO;
/**
* <p>
* 学员日历打卡
* </p>
*
* @author fulan123
* @since 2019-10-10
*/
@RestController
@RequestMapping("/api/calendar")
public class StuentCalendarController {
private static final Logger LOG = LoggerFactory.getLogger(StuentCalendarController.class);
@Autowired
private ICalendarService calendarService;
@Autowired
private ICalendarPointSetService calendarPointSetService;
@Autowired
private ICalendarRecordService calendarRecordService;
@Autowired
private ReportClient reportClient;
/**
* 打卡签到入口
* @param accountId
* @param siteId
* @return
*/
@GetMapping("/sign")
public Map<String, Object> sign(@RequestParam("accountId") Long accountId,@RequestParam("siteId") Long siteId) {
Map<String, Object> resultMap = new HashMap<String, Object>();
Calendar set = new Calendar();
set.setSiteId(siteId);
EntityWrapper<Calendar> wrapper = new EntityWrapper<Calendar>(set);
Calendar calendar = calendarService.selectOne(wrapper);
if (null!=calendar) {
CalendarPointSet pointSet = new CalendarPointSet();
pointSet.setCalendarId(calendar.getId());
pointSet.setSetType(calendar.getSetType());
EntityWrapper<CalendarPointSet> entityWrapper = new EntityWrapper<CalendarPointSet>(pointSet);
List<CalendarPointSet> list = calendarPointSetService.selectList(entityWrapper);
if (CollectionUtils.isNotEmpty(list)) {
Map<String, Object> map = calendarRecordService.sign(accountId,siteId,calendar,list);
LOG.info(map.get("result").toString());
return map;
}else {
resultMap.put("result", "签到失败");
LOG.info(siteId+"---该站点暂未开启日历打卡签到功能");
return resultMap;
}
}else {
resultMap.put("result", "签到失败");
LOG.info(siteId+"---该站点暂未设置打卡积分发放规则");
return resultMap;
}
}
/**
* 用户每日打卡详情
* @param accountId
* @param siteId
* @return
*/
@GetMapping("/isSign")
public CalendarSignViewVO isSign(@RequestParam("accountId") Long accountId,@RequestParam("siteId") Long siteId) {
CalendarSignViewVO vo = new CalendarSignViewVO();
Calendar set = new Calendar();
set.setSiteId(siteId);
EntityWrapper<Calendar> wrapper = new EntityWrapper<Calendar>(set);
Calendar calendar = calendarService.selectOne(wrapper);
if (null!=calendar) {
CalendarPointSet pointSet = new CalendarPointSet();
pointSet.setCalendarId(calendar.getId());
pointSet.setSetType(calendar.getSetType());
EntityWrapper<CalendarPointSet> entityWrapper = new EntityWrapper<CalendarPointSet>(pointSet);
List<CalendarPointSet> list = calendarPointSetService.selectList(entityWrapper);
if (CollectionUtils.isNotEmpty(list)) {
vo= calendarRecordService.isSign(accountId,siteId,calendar,list);
LOG.info("用户:"+accountId+"每日签到详情:"+vo);
return vo;
}else {
LOG.info(siteId+"---该站点暂未设置打卡积分发放规则");
return vo;
}
}else {
LOG.info(siteId+"---该站点暂未开启日历打卡签到功能");
return vo;
}
}
@GetMapping("/headData")
public HeadVO getHeadData(@RequestParam("accountId") Long accountId,@RequestParam("siteId") Long siteId) {
return calendarRecordService.getHeadData(accountId, siteId);
}
@GetMapping("/signDetail")
public Page<CalendarRecord> getSignDetail(@RequestParam("accountId") Long accountId, @RequestParam("siteId") Long siteId, @RequestParam("type") Integer type, @RequestParam("pageNo") Integer pageNo, @RequestParam("pageSize") Integer pageSize){
Page<CalendarRecord> page = calendarRecordService.getSignDetailByAccountId(accountId, siteId, type, pageNo, pageSize);
return page;
}
@GetMapping("/signByMonth")
public List<CalendarRecord> getSignByMonth(@RequestParam("accountId") Long accountId,@RequestParam("siteId") Long siteId,@RequestParam("month") String month){
List<CalendarRecord> list = calendarRecordService.getSignByMonth(month, accountId, siteId);
return list;
}
@GetMapping("/signNum")
public Map<Long, Long> signNum(@RequestParam("siteIds") List<Long> siteIds,
@RequestParam("startDate") String startDate, @RequestParam("endDate") String endDate){
return calendarRecordService.signNum(siteIds, startDate, endDate);
}
@GetMapping("/getSignState")
public Integer getSignState(@RequestParam("accountId") Long accountId,@RequestParam("siteId") Long siteId) {
Date date = new Date();
String dayString = DateUtil.toDay(date);
CalendarRecord record = new CalendarRecord();
record.setSignDate(dayString);
record.setAccountId(accountId);
record.setSiteId(siteId);
EntityWrapper<CalendarRecord> wrapper = new EntityWrapper<CalendarRecord>(record);
CalendarRecord one = calendarRecordService.selectOne(wrapper);
if (one!=null) {
return 1;
}else {
return 0;
}
}
}
package com.yizhi.calendar.application.domain;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.FieldFill;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* <p>
* 日历打卡积分发放设置表
* </p>
*
* @author fulan123
* @since 2019-10-10
*/
@Data
@ApiModel(value = "Calendar", description = "日历打卡积分设置表")
@TableName("calendar")
public class Calendar {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键")
private Long id;
@ApiModelProperty(value = "首次打卡积分")
@TableField("first_point")
private Integer firstPoint;
@ApiModelProperty(value = "积分设置类型(1连续递增,2自定义)")
@TableField("set_type")
private Integer setType;
@ApiModelProperty(value = "状态 0 删除 1 有效 默认有效")
private Integer state;
@ApiModelProperty(value = "周期持续天数 默认不限制")
private Long cycle;
@ApiModelProperty(value = "企业ID")
@TableField("company_id")
private Long companyId;
@ApiModelProperty(value = "站点ID")
@TableField("site_id")
private Long siteId;
@ApiModelProperty(value = "部门ID")
@TableField("org_id")
private Long orgId;
@ApiModelProperty(value = "创建时间")
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
@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 = "update_time", fill = FieldFill.INSERT)
private Date updateTime;
@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;
}
package com.yizhi.calendar.application.domain;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.FieldFill;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* <p>
* 日历打卡积分发放设置表
* </p>
*
* @author fulan123
* @since 2019-10-10
*/
@Data
@ApiModel(value = "CalendarPointSet", description = "日历打卡积分规则设置表")
@TableName("calendar_point_set")
public class CalendarPointSet {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键")
private Long id;
@ApiModelProperty(value = "日历id")
@TableField("calendar_id")
private Long calendarId;
@ApiModelProperty(value = "积分设置类型(1连续递增,2自定义)")
@TableField("set_type")
private Integer setType;
@ApiModelProperty(value = "状态 0 删除 1 有效 默认有效")
private Integer state;
@ApiModelProperty(value = "积分对应连续最小天数")
@TableField("min_date")
private Integer minDate;
@ApiModelProperty(value = "积分")
private Integer point;
@ApiModelProperty(value = "创建时间")
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
@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 = "update_time", fill = FieldFill.INSERT)
private Date updateTime;
@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;
}
package com.yizhi.calendar.application.domain;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* <p>
* 日签海报表
* </p>
*
* @author fulan123
* @since 2019-10-10
*/
@Data
@ApiModel(value = "CalendarPoster", description = "日签海报表")
@TableName("calendar_poster")
public class CalendarPoster {
private static final long serialVersionUID = 1L;
private Long id;
@ApiModelProperty(value = "下载地址")
@TableField("url")
private String url;
@ApiModelProperty(value = "鸡汤文")
@TableField("content")
private String content;
@ApiModelProperty(value = "base64编码")
@TableField("base64_code")
private String base64Code;
}
package com.yizhi.calendar.application.domain;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.FieldFill;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* <p>
* 日历打卡记录表
* </p>
*
* @author fulan123
* @since 2019-10-10
*/
@Data
@ApiModel(value = "CalendarRecord", description = "日历打卡记录表")
@TableName("calendar_record")
public class CalendarRecord {
private static final long serialVersionUID = 1L;
private Long id;
@ApiModelProperty(value = "用户id")
@TableField("account_id")
private Long accountId;
@ApiModelProperty(value = "首次打卡0,否1 默认首次打卡")
@TableField("first_sign")
private Integer firstSign;
@ApiModelProperty(value = "发放积分")
private Integer point;
@ApiModelProperty(value = "签到日期")
@TableField("sign_date")
private String signDate;
@ApiModelProperty(value = "打卡时间")
@TableField("sign_time")
private String signTime;
@ApiModelProperty(value = "海报id")
@TableField("poster_id")
private Long posterId;
@ApiModelProperty(value = "创建时间")
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
@ApiModelProperty(value = "企业ID")
@TableField("company_id")
private Long companyId;
@ApiModelProperty(value = "站点ID")
@TableField("site_id")
private Long siteId;
@ApiModelProperty(value = "部门ID")
@TableField("org_id")
private Long orgId;
}
package com.yizhi.calendar.application.mapper;
import com.yizhi.calendar.application.domain.Calendar;
import com.baomidou.mybatisplus.mapper.BaseMapper;
/**
* <p>
* 日历打卡积分发放设置表 Mapper 接口
* </p>
*
* @author fulan123
* @since 2019-10-10
*/
public interface CalendarMapper extends BaseMapper<Calendar> {
}
package com.yizhi.calendar.application.mapper;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.yizhi.calendar.application.domain.CalendarPointSet;
/**
* <p>
* 日历打卡积分规则设置表 Mapper 接口
* </p>
*
* @author fulan123
* @since 2019-10-10
*/
public interface CalendarPointSetMapper extends BaseMapper<CalendarPointSet>{
}
package com.yizhi.calendar.application.mapper;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.yizhi.calendar.application.domain.CalendarPoster;
public interface CalendarPosterMapper extends BaseMapper<CalendarPoster> {
}
package com.yizhi.calendar.application.mapper;
import com.yizhi.calendar.application.domain.CalendarRecord;
import com.yizhi.calendar.application.vo.CalendarChartVO;
import com.yizhi.calendar.application.vo.CalendarDetailStatisticVO;
import com.yizhi.calendar.application.vo.CalendarStatisticVO;
import com.yizhi.calendar.application.vo.HeadVO;
import com.yizhi.calendar.application.vo.SignNumVO;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.baomidou.mybatisplus.mapper.BaseMapper;
/**
* <p>
* 日历打卡记录表 Mapper 接口
* </p>
*
* @author fulan123
* @since 2019-10-10
*/
public interface CalendarRecordMapper extends BaseMapper<CalendarRecord> {
/**
* 获取用户最近一次签到记录
*
* @param accountId
* @return
*/
List<CalendarRecord> getLastSignByaccountId(@Param("accountId") Long accountId, @Param("siteId") Long siteId);
/**
* 获取用户最后一次首次签到记录
*
* @param accountId
* @return
*/
List<CalendarRecord> getLastFirstSignByaccountId(@Param("accountId") Long accountId, @Param("siteId") Long siteId);
/**
* 获取最大连续签到天数
*
* @param calendarId
* @param minDate
* @return
*/
Integer getMaxDate(@Param("calendarId") Long calendarId, @Param("minDate") Integer minDate);
/**
* 获取累计天数和总积分
*
* @param accountId
* @param siteId
* @return
*/
HeadVO getSumDayAndPoint(@Param("accountId") Long accountId, @Param("siteId") Long siteId);
/**
* 学员端签到明细
*
* @param accountId
* @param siteId
* @param type
* @return
*/
List<CalendarRecord> getSignDetailByAccountId(@Param("accountId") Long accountId, @Param("siteId") Long siteId,
@Param("type") Integer type);
/**
* 日历详情
*
* @param date
* @return
*/
List<CalendarRecord> getSignByMonth(@Param("month") String month, @Param("accountId") Long accountId,
@Param("siteId") Long siteId);
/**
* 折线图
*
* @param startDate
* @param endDate
* @param companyId
* @param siteId
* @return
*/
List<CalendarChartVO> signChart(@Param("startDate") String startDate, @Param("endDate") String endDate,
@Param("companyId") Long companyId, @Param("siteId") Long siteId);
List<CalendarStatisticVO> list(@Param("startDate") String startDate, @Param("endDate") String endDate,
@Param("companyId") Long companyId, @Param("siteId") Long siteId,
@Param("accountIds") List<Long> accountIds);
List<CalendarRecord> accountList(@Param("startDate") String startDate, @Param("endDate") String endDate,
@Param("companyId") Long companyId, @Param("siteId") Long siteId, @Param("accountId") Long accountId);
List<CalendarDetailStatisticVO> detailList(@Param("startDate") String startDate, @Param("endDate") String endDate,
@Param("companyId") Long companyId, @Param("siteId") Long siteId,
@Param("accountIds") List<Long> accountIds);
List<SignNumVO> signNum(@Param("siteIds") List<Long> siteIds,
@Param("startDate") String startDate, @Param("endDate") String endDate);
}
<?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.calendar.application.mapper.CalendarRecordMapper">
<select id="getLastSignByaccountId"
resultType="com.yizhi.calendar.application.domain.CalendarRecord">
SELECT
*
FROM
calendar_record cr
WHERE
cr.account_id =#{accountId}
and cr.site_id=#{siteId} ORDER BY create_time desc LIMIT 1
</select>
<select id="getLastFirstSignByaccountId"
resultType="com.yizhi.calendar.application.domain.CalendarRecord">
SELECT
*
FROM
calendar_record cr
WHERE
cr.account_id =#{accountId}
and cr.site_id=#{siteId} and cr.first_sign=1 ORDER BY create_time desc LIMIT 1
</select>
<select id="getMaxDate" resultType="java.lang.Integer">
SELECT MIN(a.min_date)
FROM
calendar_point_set a
where a.calendar_id = #{calendarId}
and a.min_Date
> #{minDate}
</select>
<select id="getSumDayAndPoint"
resultType="com.yizhi.calendar.application.vo.HeadVO">
SELECT
IFNULL(SUM( c.point ),0) point,
COUNT( c.account_id )
sumDays
FROM
calendar_record c
WHERE
c.account_id = #{accountId}
AND
c.site_id =
#{siteId}
</select>
<select id="getSignDetailByAccountId"
resultType="com.yizhi.calendar.application.domain.CalendarRecord">
SELECT
*
FROM
calendar_record c
WHERE
c.account_id = #{accountId}
and
c.site_id = #{siteId}
<if test='type != 5'>
<choose>
<when test="type == 1">
and YEARWEEK( DATE_FORMAT( create_time, '%Y-%m-%d'
), 1 )= YEARWEEK(
now(), 1 )
</when>
<when test="type == 2">
and YEARWEEK( DATE_FORMAT( create_time, '%Y-%m-%d'
), 1 )= YEARWEEK(
now(), 1 )-1
</when>
<when test="type == 3">
and
date_format(create_time,'%Y-%m')=date_format(now(),'%Y-%m')
</when>
<otherwise>
and DATE_FORMAT(create_time,'%Y-%m') =
DATE_FORMAT(DATE_SUB(curdate(),
INTERVAL 1 MONTH),'%Y-%m')
</otherwise>
</choose>
</if>
ORDER BY c.create_time DESC
</select>
<select id="getSignByMonth"
resultType="com.yizhi.calendar.application.domain.CalendarRecord">
SELECT
*
FROM
calendar_record c
WHERE
c.account_id =
#{accountId}
and c.site_id = #{siteId}
and
date_format(create_time,'%Y-%m')=#{month}
</select>
<select id="signChart"
resultType="com.yizhi.calendar.application.vo.CalendarChartVO">
SELECT
DATE_FORMAT(c.sign_date,'%Y%m%d') dateStr,
COUNT( id )
signNum
FROM
calendar_record c
WHERE
create_time BETWEEN str_to_date(
#{startDate},
'%Y-%m-%d %H' )
AND str_to_date(#{endDate}, '%Y-%m-%d
%H:%i:%s')
AND
company_id =
#{companyId}
AND site_id = #{siteId}
GROUP BY
dateStr
</select>
<select id="list"
resultType="com.yizhi.calendar.application.vo.CalendarStatisticVO">
SELECT
c.account_id accountId,
COUNT( id ) count,
SUM( c.point ) point
FROM
calendar_record c
WHERE
create_time BETWEEN str_to_date(
#{startDate},
'%Y-%m-%d %H' )
AND str_to_date(#{endDate}, '%Y-%m-%d
%H:%i:%s')
AND c.site_id = #{siteId}
AND c.company_id = #{companyId}
AND
c.account_id IN
(
<foreach collection="accountIds" separator="," item="item">#{item}
</foreach>
)
GROUP BY
c.account_id
ORDER BY
count DESC
</select>
<select id="accountList"
resultType="com.yizhi.calendar.application.domain.CalendarRecord">
SELECT
c.sign_date signDate,
c.sign_time signTime,
c.point
point
FROM
calendar_record c
WHERE
create_time BETWEEN str_to_date(
#{startDate},
'%Y-%m-%d %H' )
AND str_to_date(#{endDate}, '%Y-%m-%d
%H:%i:%s')
AND c.site_id = #{siteId}
AND c.company_id = #{companyId}
AND
c.account_id = #{accountId}
ORDER BY signDate DESC
</select>
<select id="detailList"
resultType="com.yizhi.calendar.application.vo.CalendarDetailStatisticVO">
SELECT
c.account_id accountId,
c.sign_date signDate,
c.sign_time
signTime,
c.point point,
c.create_time createTime
FROM
calendar_record c
WHERE
create_time BETWEEN str_to_date(
#{startDate},
'%Y-%m-%d %H' )
AND
str_to_date(#{endDate}, '%Y-%m-%d
%H:%i:%s')
AND c.site_id = #{siteId}
AND c.company_id = #{companyId}
AND
c.account_id IN
(
<foreach collection="accountIds" separator="," item="item">#{item}
</foreach>
)
ORDER BY createTime DESC
</select>
<resultMap type="com.yizhi.calendar.application.vo.SignNumVO" id="signMap">
<result property="accountId" column="accountId" />
<result property="signNum" column="signNum" />
</resultMap>
<select id="signNum" resultType="com.yizhi.calendar.application.vo.SignNumVO">
SELECT
count(id) signNum,account_id accountId
FROM
calendar_record c
WHERE
c.site_id IN (
<foreach collection="siteIds" separator="," item="item">#{item}
</foreach>
)
AND create_time BETWEEN #{startDate}
AND #{endDate}
group by accountId
</select>
</mapper>
package com.yizhi.calendar.application.service;
import com.baomidou.mybatisplus.service.IService;
import com.yizhi.calendar.application.domain.CalendarPointSet;
/**
* <p>
* 日历打卡积分规则设置表 服务类
* </p>
*
* @author fulan123
* @since 2019-10-10
*/
public interface ICalendarPointSetService extends IService<CalendarPointSet>{
}
package com.yizhi.calendar.application.service;
import com.baomidou.mybatisplus.service.IService;
import com.yizhi.calendar.application.domain.CalendarPoster;
public interface ICalendarPosterService extends IService<CalendarPoster> {
}
package com.yizhi.calendar.application.service;
import com.yizhi.calendar.application.domain.Calendar;
import com.yizhi.calendar.application.domain.CalendarPointSet;
import com.yizhi.calendar.application.domain.CalendarRecord;
import com.yizhi.calendar.application.vo.CalendarChartVO;
import com.yizhi.calendar.application.vo.CalendarDetailStatisticVO;
import com.yizhi.calendar.application.vo.CalendarSignViewVO;
import com.yizhi.calendar.application.vo.CalendarStatisticVO;
import com.yizhi.calendar.application.vo.HeadVO;
import java.util.List;
import java.util.Map;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
/**
* <p>
* 日历打卡记录表 服务类
* </p>
*
* @author fulan123
* @since 2019-10-10
*/
public interface ICalendarRecordService extends IService<CalendarRecord> {
public Map<String, Object> sign(Long accountId, Long siteId, Calendar calendar, List<CalendarPointSet> list);
public CalendarSignViewVO isSign(Long accountId, Long siteId, Calendar calendar, List<CalendarPointSet> list);
public HeadVO getHeadData(Long accountId, Long siteId);
public Page<CalendarRecord> getSignDetailByAccountId(Long accountId, Long siteId, Integer type, Integer pageNo,
Integer pageSize);
public List<CalendarRecord> getSignByMonth(String month, Long accountId, Long siteId);
public List<CalendarChartVO> signChart(String startDate, String endDate, Long companyId, Long siteId);
public List<CalendarStatisticVO> list(String startDate, String endDate, String kwd, Long companyId, Long siteId);
public List<CalendarRecord> accountList(String startDate, String endDate, Long accountId, Long companyId, Long siteId);
public List<CalendarDetailStatisticVO> detailList(String startDate, String endDate, Long companyId, Long siteId,String kwd);
public Map<Long, Long> signNum(List<Long> siteIds,String startDate,String endDate);
}
package com.yizhi.calendar.application.service;
import com.yizhi.calendar.application.domain.Calendar;
import com.baomidou.mybatisplus.service.IService;
/**
* <p>
* 日历打卡积分设置表 服务类
* </p>
*
* @author fulan123
* @since 2019-10-10
*/
public interface ICalendarService extends IService<Calendar> {
}
package com.yizhi.calendar.application.service.impl;
import com.yizhi.calendar.application.domain.CalendarPointSet;
import com.yizhi.calendar.application.service.ICalendarPointSetService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.yizhi.calendar.application.mapper.CalendarPointSetMapper;
@Service
public class CalendarPointSetServiceImpl extends ServiceImpl<CalendarPointSetMapper, CalendarPointSet> implements ICalendarPointSetService {
}
package com.yizhi.calendar.application.service.impl;
import com.yizhi.calendar.application.domain.CalendarPoster;
import com.yizhi.calendar.application.service.ICalendarPosterService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.yizhi.calendar.application.mapper.CalendarPosterMapper;
@Service
public class CalendarPosterServiceImpl extends ServiceImpl<CalendarPosterMapper, CalendarPoster> implements ICalendarPosterService {
}
package com.yizhi.calendar.application.service.impl;
import com.yizhi.calendar.application.domain.Calendar;
import com.yizhi.calendar.application.mapper.CalendarMapper;
import com.yizhi.calendar.application.service.ICalendarService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 日历打卡积分发放设置表 服务实现类
* </p>
*
* @author fulan123
* @since 2019-10-10
*/
@Service
public class CalendarServiceImpl extends ServiceImpl<CalendarMapper, Calendar> implements ICalendarService {
}
package com.yizhi.calendar.application.task;
import java.io.File;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
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 org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFFont;
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 com.yizhi.calendar.application.domain.CalendarRecord;
import com.yizhi.calendar.application.service.ICalendarRecordService;
@Component
public class CalendarAccountExportAsync extends AbstractDefaultTask<String, Map<String,Object>> {
private static final Logger logger = LoggerFactory.getLogger(CalendarAccountExportAsync.class);
@Autowired
private ICalendarRecordService calendarRecordService;
@Override
protected String execute(Map<String, Object> arg0) {
Long accountId=(Long) arg0.get("accountId");
Long siteId=(Long) arg0.get("siteId");
Long companyId=(Long) arg0.get("companyId");
Long taskId=(Long) arg0.get("taskId");
Date submitTime=(Date) arg0.get("submitTime");
String serialNo=(String) arg0.get("serialNo");
String taskName=(String) arg0.get("taskName");
String startDate = (String) arg0.get("startDate");
String endDate = (String) arg0.get("endDate");
Long userId = (Long) arg0.get("userId");
String accountName = (String) arg0.get("accountName");
/**
* 走异步任务
*/
TaskContext taskContext = new TaskContext(taskId, serialNo, taskName, accountId, submitTime, siteId, companyId);
working(taskContext);
String upLoadUrl=null;
String requestPath= FileConstant.SAVE_PATH;
File fileDir=new File(requestPath);
if(!fileDir.exists()) {
fileDir.mkdir();
}
List<CalendarRecord> list = calendarRecordService.accountList(startDate, endDate, userId, companyId, siteId);
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat ff = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
try {
//excel生成过程: excel-->sheet-->row-->cell
// 第一步,创建一个Excel文件
XSSFWorkbook wb = new XSSFWorkbook();
// 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet
XSSFSheet sheet = wb.createSheet("打卡记录");
sheet.setDefaultColumnWidth(26);
XSSFFont font = wb.createFont();
font.setFontName("新宋体");
font.setFontHeightInPoints((short) 16);
font.setBold(true);
XSSFCellStyle style = wb.createCellStyle();
style.setFont(font);
style.setAlignment(HorizontalAlignment.LEFT); // 创建一个居中格式
style.setVerticalAlignment(VerticalAlignment.CENTER);
// 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short
XSSFRow row = sheet.createRow((int) 0);
row.setHeightInPoints((float) 20.25);
// 合并单元格
CellRangeAddress cra=new CellRangeAddress(0,0,0,2); // 起始行, 终止行, 起始列, 终止列
sheet.addMergedRegion(cra);
XSSFCell cell = row.createCell((short) 0);
cell.setCellValue(accountName+"打卡记录表 统计日期:"+startDate+" 至 "+endDate);
cell.setCellStyle(style);
XSSFRow row1 = sheet.createRow((int) 1);
row1.setHeightInPoints((float) 18.75);
// 合并单元格
CellRangeAddress cra1=new CellRangeAddress(1,1,0,2); // 起始行, 终止行, 起始列, 终止列
sheet.addMergedRegion(cra1);
XSSFCell cell1 = row1.createCell((short) 0);
cell1.setCellValue("报表生成时间:"+ff.format(submitTime));
XSSFFont font1 = wb.createFont();
font1.setFontName("新宋体");
font1.setFontHeightInPoints((short) 14);
font1.setBold(false);
XSSFCellStyle style1 = wb.createCellStyle();
style1.setFont(font1);
style1.setAlignment(HorizontalAlignment.LEFT); // 创建一个居中格式
style1.setVerticalAlignment(VerticalAlignment.CENTER);
cell1.setCellStyle(style1);
XSSFRow row2 = sheet.createRow((int) 2);
XSSFFont font2 = wb.createFont();
XSSFCellStyle style2 = wb.createCellStyle();
font2.setFontName("新宋体");
font2.setFontHeightInPoints((short) 12);
font2.setBold(true);
style2.setFont(font2);
style2.setAlignment(HorizontalAlignment.CENTER); // 创建一个居中格式
style2.setVerticalAlignment(VerticalAlignment.CENTER);
row2.setRowStyle(style2);
row2.setHeightInPoints((float) 14.25);
row2.createCell((short) 0).setCellValue("打卡日期");
row2.getCell(0).setCellStyle(style2);
row2.createCell((short) 1).setCellValue("打卡时间");
row2.getCell(1).setCellStyle(style2);
row2.createCell((short) 2).setCellValue("获得积分");
row2.getCell(2).setCellStyle(style2);
CalendarRecord vo = new CalendarRecord();
for(int i=0;i<list.size();i++) {
XSSFFont font3 = wb.createFont();
XSSFCellStyle style3 = wb.createCellStyle();
font3.setBold(false);
font3.setFontName("宋体");
font3.setFontHeightInPoints((short) 11);
style3.setFont(font3);
style3.setAlignment(HorizontalAlignment.LEFT); // 创建一个居中格式
style3.setVerticalAlignment(VerticalAlignment.CENTER);
row = sheet.createRow(i + 3);
row.setRowStyle(style3);
row.setHeightInPoints((float) 13.5);
// 第四步,创建单元格,并设置值
vo=list.get(i);
if(vo!=null&&vo.getSignDate()!=null) {
row.createCell((short) 0).setCellValue(vo.getSignDate());
row.getCell(0).setCellStyle(style3);
}
if(vo!=null&&vo.getSignTime()!=null) {
row.createCell((short) 1).setCellValue(vo.getSignTime());
row.getCell(1).setCellStyle(style3);
}
if(vo!=null&&vo.getPoint()!=null) {
row.createCell((short) 2).setCellValue(vo.getPoint());
row.getCell(2).setCellStyle(style3);
}
}
// 第五步,写入实体数据 实际应用中这些数据从数据库得到,
StringBuffer fileNameSb = new StringBuffer().append(accountName+"打卡记录表").append(sf.format(submitTime)).append(".xlsx");
String fileName = fileNameSb.toString();
String path = new StringBuffer().append(requestPath).append(fileNameSb).toString();
FileOutputStream os=null;
File file=null;
try {
os= new FileOutputStream(path);
wb.write(os);
//阿里云返回url
upLoadUrl = OssUpload.upload(path, fileName);
file=new File(path);
success(taskContext,"成功", upLoadUrl);
} catch (Exception e1) {
logger.error("写入数据到Excel的过程中或者上传到阿里云中发生错误",e1);
fail(taskContext, "写入数据到Excel的过程中或者上传到阿里云中发生错误"+e1.getMessage());
}
finally {
if(os!=null) {
os.close();
}
if(wb!=null) {
wb.close();
}
if(file!=null) {
file.delete();
}
}
} catch (Exception e) {
logger.error(accountName+"打卡记录导出过程中发生错误,请查看日志",e);
fail(taskContext, accountName+"打卡记录导出过程中发生错误,请查看日志"+e.getMessage());
}
return upLoadUrl;
}
}
package com.yizhi.calendar.application.task;
import java.io.File;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
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 org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFFont;
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 com.yizhi.calendar.application.service.ICalendarRecordService;
import com.yizhi.calendar.application.vo.CalendarStatisticVO;
@Component
public class CalendarListExportAsync extends AbstractDefaultTask<String, Map<String,Object>> {
private static final Logger logger = LoggerFactory.getLogger(CalendarListExportAsync.class);
@Autowired
private ICalendarRecordService calendarRecordService;
@Override
protected String execute(Map<String, Object> arg0) {
Long accountId=(Long) arg0.get("accountId");
Long siteId=(Long) arg0.get("siteId");
Long companyId=(Long) arg0.get("companyId");
Long taskId=(Long) arg0.get("taskId");
Date submitTime=(Date) arg0.get("submitTime");
String serialNo=(String) arg0.get("serialNo");
String taskName=(String) arg0.get("taskName");
String kwd = (String) arg0.get("kwd");
String startDate = (String) arg0.get("startDate");
String endDate = (String) arg0.get("endDate");
/**
* 走异步任务
*/
TaskContext taskContext = new TaskContext(taskId, serialNo, taskName, accountId, submitTime, siteId, companyId);
working(taskContext);
String upLoadUrl=null;
String requestPath= FileConstant.SAVE_PATH;
// String requestPath = "/Users/dingxiaowei/aaa";
File fileDir=new File(requestPath);
if(!fileDir.exists()) {
fileDir.mkdir();
}
List<CalendarStatisticVO> list = calendarRecordService.list(startDate, endDate, kwd, companyId, siteId);
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat ff = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
try {
//excel生成过程: excel-->sheet-->row-->cell
// 第一步,创建一个Excel文件
XSSFWorkbook wb = new XSSFWorkbook();
// 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet
XSSFSheet sheet = wb.createSheet("打卡统计");
sheet.setDefaultColumnWidth(12);
XSSFFont font = wb.createFont();
font.setFontName("新宋体");
font.setFontHeightInPoints((short) 16);
font.setBold(true);
XSSFCellStyle style = wb.createCellStyle();
style.setFont(font);
style.setAlignment(HorizontalAlignment.LEFT); // 创建一个左对齐格式
style.setVerticalAlignment(VerticalAlignment.CENTER);
// 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short
XSSFRow row = sheet.createRow((int) 0);
row.setHeightInPoints((float) 20.25);
// 合并单元格
CellRangeAddress cra=new CellRangeAddress(0,0,0,6); // 起始行, 终止行, 起始列, 终止列
sheet.addMergedRegion(cra);
XSSFCell cell = row.createCell((short) 0);
cell.setCellValue("打卡统计表 统计日期:"+startDate+" 至 "+endDate);
cell.setCellStyle(style);
XSSFRow row1 = sheet.createRow((int) 1);
row1.setHeightInPoints((float) 18.75);
// 合并单元格
CellRangeAddress cra1=new CellRangeAddress(1,1,0,7); // 起始行, 终止行, 起始列, 终止列
sheet.addMergedRegion(cra1);
XSSFCell cell1 = row1.createCell((short) 0);
cell1.setCellValue("报表生成时间:"+ff.format(submitTime));
XSSFCellStyle style1 = wb.createCellStyle();
XSSFFont font1 = wb.createFont();
font1.setFontName("新宋体");
font1.setFontHeightInPoints((short) 14);
font1.setBold(false);
style1.setFont(font1);
style1.setAlignment(HorizontalAlignment.LEFT);
style1.setVerticalAlignment(VerticalAlignment.CENTER);
cell1.setCellStyle(style1);
XSSFRow row2 = sheet.createRow((int) 2);
XSSFCellStyle style2 = wb.createCellStyle();
XSSFFont font2 = wb.createFont();
font2.setFontName("新宋体");
font2.setFontHeightInPoints((short) 12);
font2.setBold(true);
style2.setFont(font2);
style2.setAlignment(HorizontalAlignment.CENTER);
style2.setVerticalAlignment(VerticalAlignment.CENTER);
row2.setHeightInPoints((float) 14.25);
row2.createCell((short) 0).setCellValue("用户名");
row2.getCell(0).setCellStyle(style2);
row2.createCell((short) 1).setCellValue("姓名");
row2.getCell(1).setCellStyle(style2);
row2.createCell((short) 2).setCellValue("所在部门");
row2.getCell(2).setCellStyle(style2);
row2.createCell((short) 3).setCellValue("工号");
row2.getCell(3).setCellStyle(style2);
row2.createCell((short) 4).setCellValue("职位");
row2.getCell(4).setCellStyle(style2);
row2.createCell((short) 5).setCellValue("打卡次数");
row2.getCell(5).setCellStyle(style2);
row2.createCell((short) 6).setCellValue("获得积分");
row2.getCell(6).setCellStyle(style2);
row2.createCell((short) 7).setCellValue("所在组织架构");
row2.getCell(7).setCellStyle(style2);
CalendarStatisticVO vo = new CalendarStatisticVO();
for(int i=0;i<list.size();i++) {
XSSFCellStyle style3 = wb.createCellStyle();
XSSFFont font3 = wb.createFont();
font3.setBold(false);
font3.setFontName("宋体");
font3.setFontHeightInPoints((short) 11);
style3.setFont(font3);
style3.setAlignment(HorizontalAlignment.LEFT); // 创建一个居中格式
style3.setVerticalAlignment(VerticalAlignment.CENTER);
row = sheet.createRow(i + 3);
row.setHeightInPoints((float) 13.5);
// 第四步,创建单元格,并设置值
vo=list.get(i);
if(vo!=null&&vo.getName()!=null) {
row.createCell((short) 0).setCellValue(vo.getName());
row.getCell(0).setCellStyle(style3);
}
if(vo!=null&&vo.getFullName()!=null) {
row.createCell((short) 1).setCellValue(vo.getFullName());
row.getCell(1).setCellStyle(style3);
}
if(vo!=null&&vo.getOrgName()!=null) {
row.createCell((short) 2).setCellValue(vo.getOrgName());
row.getCell(2).setCellStyle(style3);
}
if(vo!=null&&vo.getWorkNum()!=null) {
row.createCell((short) 3).setCellValue(vo.getWorkNum());
row.getCell(3).setCellStyle(style3);
}
if(vo!=null&&vo.getPosition()!=null) {
row.createCell((short) 4).setCellValue(vo.getPosition());
row.getCell(4).setCellStyle(style3);
}
if(vo!=null&&vo.getCount()!=null) {
row.createCell((short) 5).setCellValue(vo.getCount());
row.getCell(5).setCellStyle(style3);
}
if (vo!=null&&vo.getPoint()!=null) {
row.createCell((short) 6).setCellValue(vo.getPoint());
row.getCell(6).setCellStyle(style3);
}
if (StringUtils.isNotBlank(vo.getOrgNames())) {
row.createCell((short) 7).setCellValue(vo.getOrgNames());
}else {
row.createCell((short) 7).setCellValue("--");
}
}
// 第五步,写入实体数据 实际应用中这些数据从数据库得到,
StringBuffer fileNameSb = new StringBuffer().append("打卡统计表").append(sf.format(submitTime)).append(".xlsx");
String fileName = fileNameSb.toString();
String path = new StringBuffer().append(requestPath).append(fileNameSb).toString();
FileOutputStream os=null;
File file=null;
try {
os= new FileOutputStream(path);
wb.write(os);
//阿里云返回url
upLoadUrl = OssUpload.upload(path, fileName);
file=new File(path);
success(taskContext,"成功", upLoadUrl);
} catch (Exception e1) {
logger.error("写入数据到Excel的过程中或者上传到阿里云中发生错误",e1);
fail(taskContext, "写入数据到Excel的过程中或者上传到阿里云中发生错误"+e1.getMessage());
}
finally {
if(os!=null) {
os.close();
}
if(wb!=null) {
wb.close();
}
if(file!=null) {
file.delete();
}
}
} catch (Exception e) {
logger.error("打卡统计导出过程中发生错误,请查看日志",e);
fail(taskContext, "打卡统计导出过程中发生错误,请查看日志"+e.getMessage());
}
return upLoadUrl;
}
}
server.port=39001
spring.application.name=calendar
ACTIVE=${spring.profiles.active}
spring.profiles.active=dev
# 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.0.203:8848
spring.cloud.nacos.config.server-addr=192.168.1.22:3333,192.168.1.22:4444,192.168.1.22:5555
<?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>cloud-calendar</artifactId>
<version>1.0-SNAPSHOT</version>
<modules>
<module>calendar-api</module>
<module>calendar</module>
</modules>
<name>cloud-calendar</name>
<description>日历</description>
<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>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
</project>
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