Commit 8d31d352 by 张祺

修改数据填报,增加填报同期数据的方法,增加消息通知基础服务

parent 195d7af2
package com.keymobile.indicators.api.indicators;
package com.keymobile.indicators.api.hytobacco;
import com.keymobile.indicators.constant.Constants;
import com.keymobile.indicators.model.entity.ConfigInfo;
......
package com.keymobile.indicators.api.hytobacco;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.keymobile.indicators.constant.Constants;
import com.keymobile.indicators.model.entity.AuthModel;
......@@ -53,7 +52,7 @@ public class DataEnterCtrl {
@ApiOperation("获取需要在线填报的数据项(填报任务点击)")
@GetMapping("findToEdit")
public List<TaskIndValue> findToEdit(@RequestParam("taskId") String taskId) {
public List<TaskIndValue> findToEdit(@RequestParam("taskId") String taskId) throws Exception {
List<TaskIndValue> list = new ArrayList<>();
Task task = taskService.getById(taskId, true, false);
String userId = SystemUserUtil.getCurrentUserId();
......@@ -87,10 +86,15 @@ public class DataEnterCtrl {
for (TaskIndicator indicator : taskIndicators) {
indIds.add(indicator.getIndId());
}
List<TaskIndValue> defaultValues = taskService.findDefaultValues(task.getValueTime(), indIds);
list = genernateEditObjects(task, defaultValues, objs, groupObj.getObjType());
String valueTime = task.getValueTime();
String sameTermValutTime = DateUtils.getSameTermValueTime(valueTime);
List<TaskIndValue> defaultValues =
taskService.findDefaultValues(valueTime.replace("-", ""), indIds);
List<TaskIndValue> defaultLastValueValues =
taskService.findDefaultValues(sameTermValutTime.replace("-", ""), indIds);
list = genernateEditObjects(task, defaultValues, defaultLastValueValues, objs, groupObj.getObjType());
} else {
list = genernateEditObjects(task, oldValues, objs, groupObj.getObjType());
list = genernateEditObjects(task, oldValues, null, objs, groupObj.getObjType());
}
}
}
......@@ -123,7 +127,7 @@ public class DataEnterCtrl {
* @param objType
* @return
*/
private List<TaskIndValue> genernateEditObjects(Task task, List<TaskIndValue> oldValues,
private List<TaskIndValue> genernateEditObjects(Task task, List<TaskIndValue> oldValues, List<TaskIndValue> oldLastValues,
List<AuthModel> objs, Integer objType) {
List<TaskIndValue> list = new ArrayList<>();
List<TaskIndicator> taskIndicators = task.getIndicators();
......@@ -143,14 +147,28 @@ public class DataEnterCtrl {
value.setObjId(obj.getId());
value.setObjName(obj.getName());
value.setObjType(objType);
for (TaskIndValue old : oldValues) {
if (old.getIndId().equals(value.getIndId())
&& old.getObjType().equals(value.getObjType())
// && old.getObjType().equals(value.getObjType())
&& old.getObjId().equals(value.getObjId())) {
value.setIndValue(old.getIndValue());
//已经填好的值
value.setIndLastValue(old.getIndValue());
break;
}
}
//同期值
if(oldLastValues != null) {
for (TaskIndValue old : oldLastValues) {
if (old.getIndId().equals(value.getIndId())
// && old.getObjType().equals(value.getObjType())
&& old.getObjId().equals(value.getObjId())) {
value.setIndLastValue(old.getIndValue());
break;
}
}
}
list.add(value);
}
// }
......@@ -202,7 +220,7 @@ public class DataEnterCtrl {
Task task = taskService.getById(taskId, true, false);
if (template.getNeedSameTerm() != null && template.getNeedSameTerm()) {
hasSameTerm = true;
sameTermValutTime = getSameTermValueTime(task.getValueTime());
sameTermValutTime = DateUtils.getSameTermValueTime(task.getValueTime());
}
StringBuilder sb = new StringBuilder();
List<TaskIndValue> taskIndValues = new ArrayList<>();
......@@ -224,9 +242,10 @@ public class DataEnterCtrl {
taskId, task.getValueTime(), userId, now);
taskIndValues.add(value);
if (hasSameTerm) {
TaskIndValue value2 = this.doGenTaskIndValue(val2, obj, ind, template.getId(),
taskId, sameTermValutTime, userId, now);
taskIndValues.add(value2);
// TaskIndValue value2 = this.doGenTaskIndValue(val2, obj, ind, template.getId(),
// taskId, sameTermValutTime, userId, now);
// taskIndValues.add(value2);
value.setIndLastValue(val2);
start ++;
}
}
......@@ -249,10 +268,11 @@ public class DataEnterCtrl {
XSSFRow row2 = sheet.getRow(t + 1);
startRow++;
String val2 = ExcelUtil.getXSSFCellValue(row2.getCell(startColumn + j));
TaskIndValue value2 = this.doGenTaskIndValue(val2, obj, ind, template.getId(),
taskId, sameTermValutTime, userId, now);
// TaskIndValue value2 = this.doGenTaskIndValue(val2, obj, ind, template.getId(),
// taskId, sameTermValutTime, userId, now);
// taskIndValues.add(value2);
value.setIndLastValue(val2);
startRow--;
taskIndValues.add(value2);
}
}
startRow++;
......@@ -266,21 +286,7 @@ public class DataEnterCtrl {
return result;
}
/**
* 获取同期时间
* @param valueTime
* @return
* @throws Exception
*/
private String getSameTermValueTime(String valueTime) throws Exception {
String format = "yyyy-MM";
Date date = DateUtils.getDate(valueTime, format);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.YEAR, -1);
date = calendar.getTime();
return DateUtils.formatDate(date, format);
}
/**
* 生成指标值对象
......
package com.keymobile.indicators.api.hytobacco;
import com.keymobile.indicators.model.entity.NoticeInfo;
import com.keymobile.indicators.result.Result;
import com.keymobile.indicators.service.NoticeInfoService;
import com.keymobile.indicators.utils.SystemUserUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
@RestController
@RequestMapping("/notice")
@Api(value="消息通知管理", tags = {"消息通知管理接口"})
public class NoticeInfoCtrl {
@Autowired
private NoticeInfoService noticeInfoService;
@ApiOperation("根据条件搜索我的通知信息")
@GetMapping("find")
public Page<NoticeInfo> find(@ApiParam("关键字搜索(标题)") @RequestParam(value = "keyword", required = false) String keyword,
@ApiParam("页码,从1开始") @RequestParam("pageNo") int pageNo,
@ApiParam("每页条数") @RequestParam("pageSize") int pageSize) {
PageRequest request = PageRequest.of(pageNo, pageSize);
List<NoticeInfo> list = new ArrayList<>();
long total = noticeInfoService.findByPageCount(keyword, null, SystemUserUtil.getCurrentUserId());
if (total > 0) {
list = noticeInfoService.findByPage(keyword, null, SystemUserUtil.getCurrentUserId(), request.getOffset(), pageSize);
}
return new PageImpl<>(list, request, total);
}
@ApiOperation("我的未读消息总数")
@GetMapping("findUnReadCount")
public long findUnReadCount() {
return noticeInfoService.findByPageCount(null, false, SystemUserUtil.getCurrentUserId());
}
@ApiOperation("根据id获取消息内容")
@GetMapping("getById")
public NoticeInfo getById(@RequestParam("id") Integer id) {
return noticeInfoService.getById(id);
}
@ApiOperation("根据id批量删除消息")
@PostMapping("deleteByIds")
public Result deleteByIds(@RequestBody List<Integer> ids) {
if (CollectionUtils.isNotEmpty(ids)) {
noticeInfoService.deleteByIds(ids);
}
return Result.genOkResult();
}
@ApiOperation("根据id批量标记为已读")
@PostMapping("updateToRead")
public Result updateToRead(@RequestBody List<Integer> ids) {
if (CollectionUtils.isNotEmpty(ids)) {
noticeInfoService.updateToRead(ids);
}
return Result.genOkResult();
}
}
......@@ -35,8 +35,6 @@ import java.util.List;
@RequestMapping(value = "/task")
public class TaskCtrl {
@Autowired
private TaskService taskService;
......@@ -44,16 +42,23 @@ public class TaskCtrl {
@ApiOperation("(启动)根据规则生成相关填报任务")
@GetMapping("generateTaskByRule")
public Result generateTaskByRule(@ApiParam("规则id") @RequestParam("ruleIds") List<Integer> ruleIds,
@ApiParam("收数月份, 格式: 2020-03、2020-06、2020-09、2020-12") @RequestParam("valueTime")String valueTime) {
@ApiParam("收数月份, 格式: 2020-03、2020-06、2020-09、2020-12")
@RequestParam("valueTime")String valueTime,
@ApiParam("是否需要同期值")
@RequestParam(value = "needLast", required = false)Boolean needLast) {
Result result = null;
boolean need = true;
if (needLast != null) {
need = needLast.booleanValue();
}
if (CollectionUtils.isNotEmpty(ruleIds)) {
if (ruleIds.size() > 1) {
taskService.batchCreateTaskByRule(ruleIds, valueTime);
taskService.batchCreateTaskByRule(ruleIds, valueTime, need);
result = Result.genOkResult("开始批量启动任务");
LogManager.logInfo(Constants.LOG_CONTEXT_API, "{}启动了批量任务数据时间为:{}的任务, ids为{}",
SystemUserUtil.getCurrentUser(), valueTime,ruleIds);
} else {
result = taskService.createTaskByRule(ruleIds.get(0), valueTime);
result = taskService.createTaskByRule(ruleIds.get(0), valueTime, need);
LogManager.logInfo(Constants.LOG_CONTEXT_API, "{}启动了数据时间为:{}的任务id为{}",
SystemUserUtil.getCurrentUser(), valueTime,ruleIds);
}
......@@ -75,7 +80,7 @@ public class TaskCtrl {
@PostMapping("findMyTask")
public List<Task> findMyTask(@RequestBody QueryAllTaskParam param) {
param.setUserId(SystemUserUtil.getCurrentUserId());
LogManager.logInfo(Constants.LOG_CONTEXT_API, "{}查询了我任务:{}",
LogManager.logInfo(Constants.LOG_CONTEXT_API, "{}查询了我任务",
SystemUserUtil.getCurrentUser());
return taskService.findAllTask(param);
}
......
package com.keymobile.indicators.model.entity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Data
@ApiModel("通知消息对象")
public class NoticeInfo extends BaseModel {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@ApiModelProperty("通知标题")
private String title;
@ApiModelProperty("通知详细内容")
private String detail;
@ApiModelProperty("是否已读")
private Boolean isRead;
@ApiModelProperty("通知标题")
private String toUserId;
}
......@@ -118,6 +118,11 @@ public class Task extends BaseModel {
private Boolean needSum;
/**
* 是否需要同期值
*/
private Boolean needLast;
/**
* 任务状态:1、填报中 2、审批中 3、审核通过 4、驳回
*/
private Integer status;
......
......@@ -6,6 +6,7 @@ import lombok.Data;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;
/**
* 任务填报的数据项值
......@@ -56,6 +57,12 @@ public class TaskIndValue extends BaseModel {
private String indValue;
/**
* 指标值
*/
@ApiModelProperty("指标同期值")
private String indLastValue;
/**
* 数据时间,例如2020-06表示二季度
*/
@ApiModelProperty("数据时间")
......
package com.keymobile.indicators.model.mapper.indicators;
import com.keymobile.indicators.model.entity.NoticeInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.common.BaseMapper;
import java.util.List;
@Mapper
public interface NoticeInfoMapper extends BaseMapper<NoticeInfo> {
/**
* 根据id获取
* @param id
* @return
*/
NoticeInfo getById(Integer id);
/**
* 分页搜索
* @param keyword
* @param isRead
* @param userId
* @param start
* @param pageSizte
* @return
*/
List<NoticeInfo> findByPage(@Param("keyword") String keyword,@Param("isRead") Boolean isRead,
@Param("userId") String userId,
@Param("start") long start, @Param("pageSize") int pageSizte);
/**
* 搜索总数
* @param keyword
* @param isRead
* @param userId
* @return
*/
long findByPageCount(@Param("keyword") String keyword, @Param("isRead") Boolean isRead,
@Param("userId") String userId);
/**
* 标记为删除
* @param ids
*/
void deleteByIds(@Param("ids") List<Integer> ids);
/**
* 标记为已读
* @param ids
*/
void updateToRead(@Param("ids")List<Integer> ids);
}
package com.keymobile.indicators.service;
import com.keymobile.indicators.model.entity.NoticeInfo;
import java.util.List;
public interface NoticeInfoService {
/**
* 根据id获取
* @param id
* @return
*/
NoticeInfo getById(Integer id);
/**
* 分页搜索
* @param keyword
* @param isRead
* @param userId
* @param start
* @param pageSizte
* @return
*/
List<NoticeInfo> findByPage( String keyword, Boolean isRead,
String userId,
long start, int pageSizte);
/**
* 搜索总数
* @param keyword
* @param isRead
* @param userId
* @return
*/
long findByPageCount(String keyword,Boolean isRead,
String userId);
/**
* 标记为删除
* @param ids
*/
void deleteByIds(List<Integer> ids);
/**
* 标记为已读
* @param ids
*/
void updateToRead(List<Integer> ids);
}
......@@ -175,10 +175,11 @@ public interface TaskService {
* 批量启动任务
* @param ruleIds
* @param valueTime
* @param needLast
* @return
*/
void batchCreateTaskByRule(List<Integer> ruleIds,
@ApiParam("收数月份, 格式: 2020-03、2020-06、2020-09、2020-12")String valueTime);
@ApiParam("收数月份, 格式: 2020-03、2020-06、2020-09、2020-12")String valueTime, boolean needLast);
/**
* 单个生成任务
......@@ -187,6 +188,6 @@ public interface TaskService {
* @return
*/
Result createTaskByRule(Integer ruleId,
@ApiParam("收数月份, 格式: 2020-03、2020-06、2020-09、2020-12")String valueTime);
@ApiParam("收数月份, 格式: 2020-03、2020-06、2020-09、2020-12")String valueTime, boolean needLast);
}
......@@ -362,12 +362,18 @@ public class TaskServiceImpl implements TaskService {
* 通过填报值计算出包含公式的数据项值
* @param task
*/
private List<IndicatorsData> createCountIndValues(Task task) {
private List<IndicatorsData> createCountIndValues(Task task) {
List<TaskIndicator> inds = taskIndicatorMapper.getByTaskId(task.getId());
List<TaskIndValue> values = taskIndValueMapper.getByTaskId(task.getId());
String valueTime = task.getValueTime().replaceAll("-", "");
Integer vt = Integer.parseInt(valueTime);
String sameTermValutTime = DateUtils.getSameTermValueTime(task.getValueTime());
Integer lastVt = Integer.parseInt(sameTermValutTime.replaceAll("-", ""));
List<IndicatorsData> datas = new ArrayList<>();
boolean needLast = true;
if (task.getNeedLast() != null) {
needLast = task.getNeedLast();
}
for (TaskIndValue value : values) {
IndicatorsData data = new IndicatorsData();
data.setBatchNo(task.getId());
......@@ -381,6 +387,7 @@ public class TaskServiceImpl implements TaskService {
data.setUnit(value.getIndUnit());
data.setDim1Desc(value.getObjName());
datas.add(data);
generateIndData(task, vt, lastVt, value, needLast, datas);
}
TaskRuleGroupObj groupObj = taskRuleObjMapper.getById(task.getGroupId());
List<TaskIndicator> needSumInds = new ArrayList<>();
......@@ -428,17 +435,7 @@ public class TaskServiceImpl implements TaskService {
value.setTaskId(task.getId());
newValues.add(value);
IndicatorsData data = new IndicatorsData();
data.setBatchNo(task.getId());
data.setDataType("double");
data.setDim2(vt);
data.setDim1(value.getObjId());
data.setDim1Desc(value.getObjName());
data.setIndId(value.getIndId());
data.setIndDesc(value.getIndName());
data.setType("1");
data.setUnit(value.getIndUnit());
datas.add(data);
generateIndData(task, vt, lastVt, value, needLast, datas);
}
}
taskIndValueMapper.batchInsert(newValues);
......@@ -449,6 +446,49 @@ public class TaskServiceImpl implements TaskService {
return datas;
}
/**
* 生成基本指标值
* @param task
* @param valueTime
* @param lastValueTime
* @param value
* @param needLast
* @param datas
*/
private void generateIndData(Task task, Integer valueTime,
Integer lastValueTime,
TaskIndValue value,
boolean needLast,
List<IndicatorsData> datas) {
IndicatorsData data = new IndicatorsData();
data.setBatchNo(task.getId());
data.setDataType("double");
data.setDim2(valueTime);
data.setDim1(value.getObjId());
data.setIndId(value.getIndId());
data.setIndDesc(value.getIndName());
data.setType("1");
data.setValue(value.getIndValue());
data.setUnit(value.getIndUnit());
data.setDim1Desc(value.getObjName());
datas.add(data);
if (needLast) {
IndicatorsData last = new IndicatorsData();
last.setBatchNo(task.getId());
last.setDataType("double");
last.setDim2(lastValueTime);
last.setDim1(value.getObjId());
last.setIndId(value.getIndId());
last.setIndDesc(value.getIndName());
last.setType("1");
last.setValue(value.getIndLastValue());
last.setUnit(value.getIndUnit());
last.setDim1Desc(value.getObjName());
datas.add(last);
}
}
@Override
public List<AuditRecord> findAuditRecordByTaskId(String taskId) {
return taskAuditRecordMapper.getByTaskId(taskId);
......@@ -482,9 +522,9 @@ public class TaskServiceImpl implements TaskService {
@Override
@Async
public void batchCreateTaskByRule(List<Integer> ruleIds, String valueTime) {
public void batchCreateTaskByRule(List<Integer> ruleIds, String valueTime, boolean needLast) {
for (Integer ruleId : ruleIds) {
createTaskByRule(ruleId, valueTime);
createTaskByRule(ruleId, valueTime, needLast);
}
}
......@@ -522,7 +562,7 @@ public class TaskServiceImpl implements TaskService {
}
@Override
public Result createTaskByRule(Integer ruleId, String valueTime) {
public Result createTaskByRule(Integer ruleId, String valueTime, boolean needLast) {
Result result = null;
TaskRule rule = taskRuleService.getById(ruleId, true);
if (rule != null) {
......@@ -564,6 +604,7 @@ public class TaskServiceImpl implements TaskService {
task.setId(IdWorker.getStrId());
task.setValueTime(valueTime);
task.setCreateTime(now);
task.setNeedLast(needLast);
task.setToRoleNames(rule.getToRoleNames());
task.setCreator(user);
task.setUpdateTime(now);
......
package com.keymobile.indicators.service.impl;
import com.keymobile.indicators.model.entity.NoticeInfo;
import com.keymobile.indicators.model.mapper.indicators.NoticeInfoMapper;
import com.keymobile.indicators.service.NoticeInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class NoticeInfoServiceImpl implements NoticeInfoService {
@Autowired
private NoticeInfoMapper noticeInfoMapper;
@Override
public NoticeInfo getById(Integer id) {
return noticeInfoMapper.getById(id);
}
@Override
public List<NoticeInfo> findByPage(String keyword, Boolean isRead, String userId, long start, int pageSizte) {
return noticeInfoMapper.findByPage(keyword, isRead, userId, start, pageSizte);
}
@Override
public long findByPageCount(String keyword, Boolean isRead, String userId) {
return noticeInfoMapper.findByPageCount(keyword, isRead, userId);
}
@Override
public void deleteByIds(List<Integer> ids) {
noticeInfoMapper.deleteByIds(ids);
}
@Override
public void updateToRead(List<Integer> ids) {
noticeInfoMapper.updateToRead(ids);
}
}
......@@ -4,9 +4,10 @@ import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.time.DateFormatUtils;
@Slf4j
public class DateUtils {
private static final String PARSE_PATTERN_DD = "yyyy-MM-dd";
......@@ -46,4 +47,26 @@ public class DateUtils {
c.add(Calendar.DATE, dates);
return c.getTime();
}
/**
* 获取去年同期(YYYY-MM)
* @param valueTime
* @return
* @throws Exception
*/
public static String getSameTermValueTime(String valueTime) {
String str = "";
try {
String format = "yyyy-MM";
Date date = DateUtils.getDate(valueTime, format);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.YEAR, -1);
date = calendar.getTime();
str = DateUtils.formatDate(date, format);
} catch (Exception ex) {
log.error("转换同期值出错:"+valueTime, ex);
}
return str;
}
}
<?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.keymobile.indicators.model.mapper.indicators.NoticeInfoMapper">
<select id="getById" resultType="com.keymobile.indicators.model.entity.NoticeInfo" >
select *
from notice_info
where id = #{id}
</select>
<select id="findByPage" resultType="com.keymobile.indicators.model.entity.NoticeInfo">
select *
from notice_info
<include refid="findWhereSql"></include>
order by is_read asc, create_time desc
limit #{start}, #{pageSize}
</select>
<select id="findByPageCount" resultType="long">
select count(id)
from notice_info
<include refid="findWhereSql"></include>
</select>
<sql id="findWhereSql">
where state = 1
<if test="keyword != null and keyword != ''">
and title like concat('%', #{keyword}, '%')
</if>
<if test="userId != null and userId != ''">
and to_user = #{userId}
</if>
<if test="isRead != null">
and is_read = #{isRead}
</if>
</sql>
<update id="deleteByIds" parameterType="list">
update notice_info
set
state = 3
where id in (
<foreach collection="ids" item="item" separator=",">
#{item}
</foreach>
)
</update>
<update id="updateToRead" parameterType="list">
update notice_info
set
is_read = true
where id in (
<foreach collection="ids" item="item" separator=",">
#{item}
</foreach>
)
</update>
</mapper>
\ No newline at end of file
......@@ -67,11 +67,15 @@
order by ind_id asc
</select>
<select id="findDefaultValues" parameterType="object" resultType="com.keymobile.indicators.model.entity.dataenter.TaskIndValue" >
select *
from data_enter_task_ind_val
where value_time = #{valueTime} and state = 1
and status = 3
<select id="findDefaultValues" parameterType="object"
resultType="com.keymobile.indicators.model.entity.dataenter.TaskIndValue" >
select ind_id,
dim2 as value_time,
value as ind_value,
dim1 as obj_id,
dim1_desc as abj_name
from indi_data_def
where dim2 = #{valueTime}
<if test="ids != null and ids.size() > 0">
and ind_id in (
<foreach collection="ids" item="indId" separator=",">
......@@ -79,7 +83,7 @@
</foreach>
)
</if>
order by update_time desc
order by ind_id desc
</select>
<update id="updateTaskValueToPass" parameterType="java.lang.String">
......
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