Commit 744b734e authored by qinhu's avatar qinhu

1.优化样品检测统计

2.工作产值统计
parent 1097cf30
......@@ -10,6 +10,7 @@ import cn.wise.sc.cement.business.model.PageQuery;
import cn.wise.sc.cement.business.model.vo.NonStandardValueVo;
import cn.wise.sc.cement.business.model.vo.NormProductionVo;
import cn.wise.sc.cement.business.model.vo.ProductionVo;
import cn.wise.sc.cement.business.model.vo.WorkloadStatisticsVo;
import cn.wise.sc.cement.business.service.INormProductionService;
import cn.wise.sc.cement.business.util.PageUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
......@@ -23,8 +24,12 @@ import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
......@@ -94,7 +99,7 @@ public class NormProductionController {
@GetMapping("/statistics")
@ApiOperation("标准产值统计")
public BaseResponse<Page<NormProductionStatistics>> normProductionStatistics(String start, String end, String name,Integer groupId, PageQuery pageQuery) {
public BaseResponse<Page<NormProductionStatistics>> normProductionStatistics(String start, String end, String name, Integer groupId, PageQuery pageQuery) {
Long startTime = null;
Long endTime = null;
......@@ -136,7 +141,7 @@ public class NormProductionController {
@GetMapping("/total/production")
@ApiOperation("总产值统计")
public BaseResponse<Page<ProductionVo>> production(PageQuery pageQuery, String name, String start, String end,Integer groupId) {
public BaseResponse<Page<ProductionVo>> production(PageQuery pageQuery, String name, String start, String end, Integer groupId) {
Long startTime = null;
Long endTime = null;
......@@ -145,18 +150,18 @@ public class NormProductionController {
endTime = DateUtil.parseDate(end).getTime();
}
List<ProductionVo> rts = iNormProductionService.production(name, startTime, endTime,groupId);
if (!rts.isEmpty()){
List<ProductionVo> rts = iNormProductionService.production(name, startTime, endTime, groupId);
if (!rts.isEmpty()) {
Set<Integer> ids = new HashSet<>();
for (ProductionVo productionVo:rts) {
for (ProductionVo productionVo : rts) {
Integer groupId1 = productionVo.getGroupId();
ids.add(groupId1);
}
List<ProductionVo> newRts = new ArrayList<>();
for (Integer groupId1:ids){
ProductionVo finalNormProduction=new ProductionVo();
for (ProductionVo productionVo:rts){
if (productionVo.getGroupId().intValue()==groupId1){
for (Integer groupId1 : ids) {
ProductionVo finalNormProduction = new ProductionVo();
for (ProductionVo productionVo : rts) {
if (productionVo.getGroupId().intValue() == groupId1) {
finalNormProduction.setUserId(productionVo.getUserId());
finalNormProduction.setUserName(productionVo.getUserName());
finalNormProduction.setAccount(productionVo.getAccount());
......@@ -166,19 +171,19 @@ public class NormProductionController {
finalNormProduction.setGroupId(productionVo.getGroupId());
finalNormProduction.setGroupName(productionVo.getGroupName());
Double newFinalValue=productionVo.getProductionTotalValue()+finalNormProduction.getProductionTotalValue();
Double newFinalValue = productionVo.getProductionTotalValue() + finalNormProduction.getProductionTotalValue();
finalNormProduction.setProductionTotalValue(newFinalValue);
Double newNonProductionValue=productionVo.getNonProductionValue()+finalNormProduction.getNonProductionValue();
Double newNonProductionValue = productionVo.getNonProductionValue() + finalNormProduction.getNonProductionValue();
finalNormProduction.setNonProductionValue(newNonProductionValue);
Double newProductionValue=productionVo.getProductionValue()+finalNormProduction.getProductionValue();
Double newProductionValue = productionVo.getProductionValue() + finalNormProduction.getProductionValue();
finalNormProduction.setProductionValue(newProductionValue);
}
}
newRts.add(finalNormProduction);
}
rts=newRts;
rts = newRts;
}
return BaseResponse.okData(PageUtil.listConvertToPage(rts, pageQuery));
......@@ -187,7 +192,7 @@ public class NormProductionController {
@PostMapping("/export/statistics")
@ApiOperation("导出标准产值列表")
public void exportNormProductionStatistics(String start, String end, String name,Integer groupId, HttpServletResponse response) {
public void exportNormProductionStatistics(String start, String end, String name, Integer groupId, HttpServletResponse response) {
Long startTime = null;
Long endTime = null;
if (StrUtil.isNotBlank(start) && StrUtil.isNotBlank(end)) {
......@@ -212,7 +217,7 @@ public class NormProductionController {
@PostMapping("/export/total/production")
@ApiOperation("导出总产值")
public void exportProduction(String name, String start, String end,Integer groupId, HttpServletResponse response) {
public void exportProduction(String name, String start, String end, Integer groupId, HttpServletResponse response) {
Long startTime = null;
Long endTime = null;
if (StrUtil.isNotBlank(start) && StrUtil.isNotBlank(end)) {
......@@ -220,8 +225,23 @@ public class NormProductionController {
endTime = DateUtil.parseDate(end).getTime();
}
iNormProductionService.exportProduction(name, startTime, endTime,groupId, response);
iNormProductionService.exportProduction(name, startTime, endTime, groupId, response);
}
@GetMapping("/workload/statistics")
@ApiOperation("工作量统计")
public BaseResponse<List<WorkloadStatisticsVo>> workloadStatistics(String start, String end) {
Date startTime = null;
Date endTime = DateUtil.date();
if (StrUtil.isNotBlank(start) && StrUtil.isNotBlank(end)){
startTime = DateUtil.parseDate(start);
endTime = DateUtil.parseDate(end);
}
return BaseResponse.okData(iNormProductionService.workloadStatistics(startTime,endTime));
}
}
......@@ -4,6 +4,11 @@ import io.swagger.models.auth.In;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.apache.tomcat.jni.Local;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
/**
* @description:
......@@ -22,4 +27,5 @@ public class EntrustSample {
private Integer distributionId;
private Integer teamGroupId;
private Integer userId;
private LocalDateTime finishTime;
}
......@@ -34,4 +34,6 @@ public interface SampleDistributionMapper extends BaseMapper<SampleDistribution>
List<SampleCheckGroupVo> getSampleCheckGroupList(@Param("sampleId") Integer sampleId);
List<EntrustSample> getEntrustSample();
List<EntrustSample> getSampleDistribution(@Param("params") Map<String, Object> param);
}
......@@ -23,7 +23,21 @@
</if>
</where>
</sql>
<sql id="sampleDisWhere">
<where>
`status` > 5
<if test="params.start_time != null and params.start_time != ''">
and d.finish_time <![CDATA[>=]]> #{params.start_time}
</if>
<if test="params.end_time != null and params.end_time != ''">
and d.finish_time <![CDATA[<=]]> #{params.end_time}
</if>
<if test="params.user_id != null and params.user_id != ''">
and d.user_id = #{params.user_id}
</if>
</where>
</sql>
<select id="getPage" resultType="cn.wise.sc.cement.business.model.vo.SampleDistributionVo">
select t.*, p.id as projectId, p.name as projectName, p.code as projectCode,
e.id as entrustId, e.entrust_date as entrustDate, e.sample_num sampleNum,
......@@ -81,6 +95,16 @@
(SELECT user_id, id as distribution_id,sample_id FROM sample_distribution ) d on s.id = d.sample_id ) g
ON g.entrust_id = e.id
</select>
<select id="getSampleDistribution" resultType="cn.wise.sc.cement.business.entity.EntrustSample">
SELECT project_name,entrust_code,id,d.distribution_id,s.sample_name,d.user_id,s.sample_id,d.team_group_id,d.finish_time,`status` FROM entrust e
LEFT JOIN
(SELECT `name` as sample_name,entrust_id,id as sample_id FROM sample) as s
ON e.id = s.entrust_id
LEFT JOIN
(SELECT user_id, id as distribution_id,sample_id as dis_sample_id,team_group_id,finish_time FROM sample_distribution) as d
ON s.sample_id = d.dis_sample_id
<include refid="sampleDisWhere"/>
</select>
</mapper>
package cn.wise.sc.cement.business.model.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.Map;
/**
* @description: 工作量统计
* @author: qh
* @create: 2020-10-20 14:29
**/
@Data
@ApiModel("工作量统计(按月)")
public class WorkloadStatisticsVo implements Serializable {
private static final long serialVersionUID = 42L;
@ApiModelProperty("工作类型 0:标准工作量 1:非标工作量")
private Integer type;
private Map<String, Integer> map;
}
......@@ -6,10 +6,12 @@ import cn.wise.sc.cement.business.model.BaseResponse;
import cn.wise.sc.cement.business.model.PageQuery;
import cn.wise.sc.cement.business.model.vo.NormProductionVo;
import cn.wise.sc.cement.business.model.vo.ProductionVo;
import cn.wise.sc.cement.business.model.vo.WorkloadStatisticsVo;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import javax.servlet.http.HttpServletResponse;
import java.util.Date;
import java.util.List;
/**
......@@ -112,4 +114,12 @@ public interface INormProductionService extends IService<NormProduction> {
* @param response 响应体
*/
void exportProduction(String name, Long startTime, Long endTime,Integer groupId,HttpServletResponse response);
/**
* 统计工作量
* @param startTime 开始时间
* @param endTime 结束时间
* @return 统计对象
*/
List<WorkloadStatisticsVo> workloadStatistics(Date startTime, Date endTime);
}
......@@ -5,6 +5,7 @@ import cn.wise.sc.cement.business.entity.SampleDistribution;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
import java.util.Map;
/**
* <p>
......@@ -21,4 +22,10 @@ public interface ISampleDistributionService extends IService<SampleDistribution>
*/
List<EntrustSample> getEntrustSample();
/**
* 获取样品分析数据
* @param param 时间/用户
* @return EntrustSample
*/
List<EntrustSample> getSampleDistribution(Map<String, Object> param);
}
......@@ -11,22 +11,29 @@ import cn.wise.sc.cement.business.model.BaseResponse;
import cn.wise.sc.cement.business.model.PageQuery;
import cn.wise.sc.cement.business.model.vo.NormProductionVo;
import cn.wise.sc.cement.business.model.vo.ProductionVo;
import cn.wise.sc.cement.business.model.vo.WorkloadStatisticsVo;
import cn.wise.sc.cement.business.service.*;
import cn.wise.sc.cement.business.util.ExcelUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalField;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
......@@ -63,6 +70,8 @@ public class NormProductionServiceImpl extends ServiceImpl<NormProductionMapper,
ISysPostService iSysPostService;
final
INonStandardValueService iNonStandardValueService;
final
INonStandardApplyService iNonStandardApplyService;
public NormProductionServiceImpl(ISampleDistributionService iSampleDistributionService,
ISampleHandleService iSampleHandleService,
......@@ -70,7 +79,9 @@ public class NormProductionServiceImpl extends ServiceImpl<NormProductionMapper,
ISysGroupService iSysGroupService,
ISampleCheckTeamService iSampleCheckTeamService,
ITeamGroupService iTeamGroupService, IHandleService iHandleService,
ISysPostService iSysPostService, INonStandardValueService iNonStandardValueService) {
ISysPostService iSysPostService,
INonStandardValueService iNonStandardValueService,
INonStandardApplyService iNonStandardApplyService) {
this.iSampleDistributionService = iSampleDistributionService;
this.iSampleHandleService = iSampleHandleService;
this.iSysUserService = iSysUserService;
......@@ -80,6 +91,7 @@ public class NormProductionServiceImpl extends ServiceImpl<NormProductionMapper,
this.iHandleService = iHandleService;
this.iSysPostService = iSysPostService;
this.iNonStandardValueService = iNonStandardValueService;
this.iNonStandardApplyService = iNonStandardApplyService;
}
@Override
......@@ -302,7 +314,7 @@ public class NormProductionServiceImpl extends ServiceImpl<NormProductionMapper,
}
//过滤部门id
if (groupId != null){
if (groupId != null) {
List<NormProductionStatistics> collect = rts.stream().filter(arg -> arg.getGroupId().equals(groupId)).collect(Collectors.toList());
return BaseResponse.okData(collect);
}
......@@ -329,10 +341,12 @@ public class NormProductionServiceImpl extends ServiceImpl<NormProductionMapper,
QueryWrapper<SampleDistribution> qwDis = new QueryWrapper<>();
QueryWrapper<SampleHandle> qwHan = new QueryWrapper<>();
QueryWrapper<SampleCheckTeam> qwCT = new QueryWrapper<>();
Map<String, Object> params = new HashMap<>(2);
if (userId != null && userId > 0) {
qwDis.eq("user_id", userId);
qwHan.eq("user_id", userId);
qwCT.eq("user_id", userId);
params.put("user_id", userId);
}
if (start != null && end != null) {
DateTime startTime = DateUtil.date(start);
......@@ -340,9 +354,11 @@ public class NormProductionServiceImpl extends ServiceImpl<NormProductionMapper,
qwDis.between("finish_time", startTime, endTime);
qwHan.between("finish_time", startTime, endTime);
qwCT.between("finish_time", startTime, endTime);
params.put("start_time", DateUtil.format(startTime, "yyyy-MM-dd"));
params.put("end_time", DateUtil.format(endTime, "yyyy-MM-dd"));
}
//计算分析任务单产值
List<NormProduction.NormProductionDetail> sampleDistributionDetail = calculateSampleDistribution(qwDis);
List<NormProduction.NormProductionDetail> sampleDistributionDetail = calculateSampleDistributionOptimize(params);
//计算处理任务单产值
List<NormProduction.NormProductionDetail> sampleHandleDetail = calculateSampleHandle(qwHan);
......@@ -373,7 +389,7 @@ public class NormProductionServiceImpl extends ServiceImpl<NormProductionMapper,
}
@Override
public List<ProductionVo> production(String name, Long start, Long end,Integer groupId) {
public List<ProductionVo> production(String name, Long start, Long end, Integer groupId) {
Date startDate = null;
......@@ -386,7 +402,7 @@ public class NormProductionServiceImpl extends ServiceImpl<NormProductionMapper,
}
//非标准产值
List<NonStandardValue> nonStandardValues = iNonStandardValueService.nonValue(startDate, endDate ,groupId).getData();
List<NonStandardValue> nonStandardValues = iNonStandardValueService.nonValue(startDate, endDate, groupId).getData();
//标准产值
List<NormProductionStatistics> productionStatistics = this.normProductionStatistics(start, end, name, groupId).getData();
//以userId找关系
......@@ -463,7 +479,7 @@ public class NormProductionServiceImpl extends ServiceImpl<NormProductionMapper,
@Override
public void exportNormProductionStatistics(Long start, Long end, String name,Integer groupId, HttpServletResponse response) {
public void exportNormProductionStatistics(Long start, Long end, String name, Integer groupId, HttpServletResponse response) {
BaseResponse<List<NormProductionStatistics>> listBaseResponse = normProductionStatistics(start, end, name, groupId);
if (listBaseResponse.getCode() == 200) {
List<NormProductionStatistics> data = listBaseResponse.getData();
......@@ -541,8 +557,8 @@ public class NormProductionServiceImpl extends ServiceImpl<NormProductionMapper,
}
@Override
public void exportProduction(String name, Long startTime, Long endTime,Integer groupId, HttpServletResponse response) {
List<ProductionVo> data = production(name, startTime, endTime,groupId);
public void exportProduction(String name, Long startTime, Long endTime, Integer groupId, HttpServletResponse response) {
List<ProductionVo> data = production(name, startTime, endTime, groupId);
if (CollectionUtil.isNotEmpty(data)) {
String[] headers = new String[10];
headers[0] = "序号";
......@@ -575,6 +591,102 @@ public class NormProductionServiceImpl extends ServiceImpl<NormProductionMapper,
}
}
@Override
public List<WorkloadStatisticsVo> workloadStatistics(Date startTime, Date endTime) {
long start = getDefaultStart(startTime == null ? 0 : startTime.getTime());
long end = getDefaultEnd(endTime.getTime());
Map<String, Integer> map1 = initMonthMoneyMap(start, end);
Map<String, Integer> map2 = initMonthMoneyMap(start, end);
QueryWrapper<SampleDistribution> qw = new QueryWrapper<>();
if (startTime != null) {
qw.ge("finish_time", DateUtil.format(DateUtil.date(start),"yyyy-MM-dd"));
}
qw.le("finish_time", DateUtil.format(DateUtil.date(end),"yyyy-MM-dd"));
qw.eq("status", 2);
List<SampleDistribution> sampleDistributions = iSampleDistributionService.list(qw);
QueryWrapper<NonStandardApply> qwA = new QueryWrapper<>();
if (startTime != null) {
qwA.ge("start_time", DateUtil.format(DateUtil.date(start),"yyyy-MM-dd"));
}
qwA.le("start_time", DateUtil.format(DateUtil.date(end),"yyyy-MM-dd"));
qwA.eq("status", 2);
List<NonStandardApply> nonStandardApplies = iNonStandardApplyService.list(qwA);
for (SampleDistribution sampleDistribution : sampleDistributions) {
addCount(sampleDistribution.getFinishTime(), map1);
}
for (NonStandardApply nonStandardApply : nonStandardApplies) {
addCount(nonStandardApply.getStartTime(), map2);
}
WorkloadStatisticsVo workloadStatisticsVo = new WorkloadStatisticsVo();
workloadStatisticsVo.setType(0);
workloadStatisticsVo.setMap(map1);
WorkloadStatisticsVo workloadStatisticsVo2 = new WorkloadStatisticsVo();
workloadStatisticsVo.setType(1);
workloadStatisticsVo2.setMap(map2);
List<WorkloadStatisticsVo> rts = new ArrayList<>(2);
rts.add(workloadStatisticsVo);
rts.add(workloadStatisticsVo2);
return rts;
}
private void addCount(LocalDateTime date, Map<String, Integer> map) {
Date nextDate = DateUtil.endOfMonth(asDate(date));
map.put(nextDate.getMonth() + 1 + "", map.get(nextDate.getMonth() + 1 + "") + 1);
}
private void addCount(LocalDate date, Map<String, Integer> map) {
Date nextDate = DateUtil.endOfMonth(asDate(date));
map.put(nextDate.getMonth() + 1 + "", map.get(nextDate.getMonth() + 1 + "") + 1);
}
private static Date asDate(LocalDate localDate) {
return Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
}
private static Date asDate(LocalDateTime localDateTime) {
return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
}
private Map<String, Integer> initMonthMoneyMap(long start, long end) {
Map<String, Integer> map = new LinkedHashMap();
for (long i = start; i <= end; i = DateUtil.offsetMonth(DateUtil.date(i), 1).getTime()) {
map.put(DateUtil.endOfMonth(DateUtil.date(i)).getMonth() + 1 + "", 0);
}
return map;
}
private static long getDefaultStart(long start) {
//如果没传时间进来 默认开始时间是今天开始时间
if (start == 0) {
start = System.currentTimeMillis();
start = DateUtil.beginOfYear(DateUtil.date(start)).getTime();
}
return start;
}
private static long getDefaultEnd(long end) {
//如果没传时间进来 默认开始时间是今天开始时间
if (end == 0) {
end = System.currentTimeMillis();
end = DateUtil.endOfYear(DateUtil.date(end)).getTime();
}
return end;
}
/**
* 计算处理派发单每条数据的标准产值
*
......@@ -651,12 +763,63 @@ public class NormProductionServiceImpl extends ServiceImpl<NormProductionMapper,
return rts;
}
/**
* 计算分析派发单每条数据的标准产值
*
* @param param 统计条件
* @return 分析任务详情
*/
private List<NormProduction.NormProductionDetail> calculateSampleDistributionOptimize
(Map<String, Object> param) {
List<EntrustSample> entrustSamples = iSampleDistributionService.getSampleDistribution(param);
List<NormProduction.NormProductionDetail> rts = new ArrayList<>(entrustSamples.size());
List<Integer> groupTeamIds = entrustSamples.stream().map(EntrustSample::getTeamGroupId).collect(Collectors.toList());
if (groupTeamIds.size() == 0) {
return new ArrayList<>();
}
List<TeamGroup> teamGroups = iTeamGroupService.listByIds(groupTeamIds);
for (EntrustSample entrustSample : entrustSamples) {
TeamGroup teamGroup = teamGroups.stream()
.filter(arg -> arg.getId().intValue() == entrustSample.getTeamGroupId())
.findFirst().orElse(null);
if (entrustSample == null || teamGroup == null) {
continue;
}
String key = entrustSample.getTeamGroupId() + ":" + "1";
//判断缓存是否存在
if (!normProductionCache.containsKey(key)) {
//初始化
initNormProductionCache();
}
NormProduction normProduction = normProductionCache.get(key);
if (normProduction == null) {
//如果没有配置 标准产值设置 跳过不计算
continue;
}
NormProduction.NormProductionDetail productionDetail =
initNormProductionDetail(entrustSample, normProduction, normProduction.getAnalyseRate());
productionDetail.setUserId(entrustSample.getUserId());
productionDetail.setCheckTime(entrustSample.getFinishTime());
productionDetail.setDistributionId(entrustSample.getDistributionId());
productionDetail.setAssessId(entrustSample.getTeamGroupId());
productionDetail.setGroupTeamName(teamGroup.getName());
rts.add(productionDetail);
}
return rts;
}
/**
* 计算分析派发单每条数据的标准产值
*
* @param qwDis 统计条件
* @return 分析任务详情
* @Deprecated 已废弃, 有替代方法
* @see NormProductionServiceImpl#calculateSampleDistributionOptimize
*/
@Deprecated
private List<NormProduction.NormProductionDetail> calculateSampleDistribution
(QueryWrapper<SampleDistribution> qwDis) {
List<SampleDistribution> distributions = iSampleDistributionService.list(qwDis);
......
......@@ -9,6 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
* <p>
......@@ -29,4 +30,9 @@ public class SampleDistributionServiceImpl extends ServiceImpl<SampleDistributio
public List<EntrustSample> getEntrustSample() {
return sampleDistributionMapper.getEntrustSample();
}
@Override
public List<EntrustSample> getSampleDistribution(Map<String, Object> param) {
return sampleDistributionMapper.getSampleDistribution(param);
}
}
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