Commit e286410e authored by qinhu's avatar qinhu

标准产值

parent 5baf0b6b
package cn.wise.sc.cement.business.controller;
import cn.wise.sc.cement.business.entity.NormProduction;
import cn.wise.sc.cement.business.model.BaseResponse;
import cn.wise.sc.cement.business.model.PageQuery;
import cn.wise.sc.cement.business.service.INormProductionService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
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 java.util.List;
/**
* <p>
* 前端控制器
* </p>
*
* @author ztw
* @since 2020-09-23
*/
@RestController
@Api(tags = "人员产值统计-标准产值")
@RequestMapping("/business/norm/production")
public class NormProductionController {
final
INormProductionService iNormProductionService;
public NormProductionController(INormProductionService iNormProductionService) {
this.iNormProductionService = iNormProductionService;
}
@PostMapping("/create")
@ApiOperation("新增标准产值配置")
public BaseResponse<NormProduction> addObj(@RequestBody NormProduction normProduction) {
return iNormProductionService.addObj(normProduction);
}
@GetMapping("/page")
@ApiOperation("分页查询")
public BaseResponse<IPage<NormProduction>> page(PageQuery pageQuery) {
return iNormProductionService.getPage(pageQuery);
}
@PutMapping("/edit")
@ApiOperation("编辑标注产值配置")
public BaseResponse<Boolean> edit(@RequestBody NormProduction production) {
return iNormProductionService.edit(production);
}
@GetMapping("/{id}")
@ApiOperation("根据id获取标准产值配置")
public BaseResponse<NormProduction> getById(@PathVariable("id") Integer id) {
if (id == null || id <= 0) {
return BaseResponse.errorMsg("id不能为空!");
}
NormProduction rts = iNormProductionService.getById(id);
if (rts != null) {
return BaseResponse.okData(rts);
} else {
return BaseResponse.errorMsg("没找着符合要求的信息!");
}
}
@PutMapping("/status/{id}")
@ApiOperation("启用/禁用")
public BaseResponse<Integer> activeOrForbidden(@PathVariable("id") Integer id) {
if (id == null || id <= 0) {
return BaseResponse.errorMsg("编号id不能为空!");
}
return iNormProductionService.activeOrForbidden(id);
}
@GetMapping("/statistics")
@ApiOperation("标准产值统计")
public BaseResponse normProductionStatistics(Long start, Long end) {
return iNormProductionService.normProductionStatistics(start, end);
}
@GetMapping("/statistics/detail")
public BaseResponse<List<NormProduction.NormProductionDetail>> normProductionDetails(Integer userId, Long start, Long end) {
List<NormProduction.NormProductionDetail> rts = iNormProductionService.normProductionDetails(userId, start, end);
return BaseResponse.okData(rts);
}
}
package cn.wise.sc.cement.business.entity;
import io.swagger.models.auth.In;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @description:
* @author: qh
* @create: 2020-09-23 16:14
**/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class EntrustSample {
private String projectName;
private Integer entrustId;
private String entrustCode;
private String sampleName;
private Integer sampleId;
private Integer distributionId;
private Integer teamGroupId;
private Integer userId;
}
package cn.wise.sc.cement.business.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* <p>
*
* </p>
*
* @author ztw
* @since 2020-09-23
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class NormProduction implements Serializable {
private static final long serialVersionUID=1L;
/**
* 主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* 检查组id
*/
@ApiModelProperty("检查组id")
private Integer assessId;
/**
* 类型 0:检测组 1:处理项
*/
@ApiModelProperty("类型 0:检测组 1:处理项")
private Integer type;
/**
* 定额工日
*/
@ApiModelProperty("定额工日")
private Double quotaDay;
/**
* 报出分析结果
*/
@ApiModelProperty("报出分析结果")
private Double reportedAnalyseResult;
/**
* 建议系数
*/
@ApiModelProperty("建议系数")
private Double coefficient;
/**
* 考核工值
*/
@ApiModelProperty("考核工值")
private Double assessValue;
/**
* 分析占比
*/
@ApiModelProperty("分析占比")
private Double analyseRate;
/**
* 分样占比
*/
@ApiModelProperty("分样占比")
private Double separateRate;
/**
* 考核占比
*/
@ApiModelProperty("考核占比")
private Double assessRate;
/**
* 报结果占比
*/
@ApiModelProperty("报结果占比")
private Double reportedResultRate;
/**
* 状态
*/
@ApiModelProperty("状态")
private Integer status;
/**
* 标准产值详情
*/
@Data
public static class NormProductionDetail{
private String userName;
private Integer distributionId;
private Integer userId;
private Integer entrustId;
private Integer assessId;
private LocalDateTime checkTime;
private Double analyseRate;
private Double separateRate;
private Double assessRate;
private Double reportedResultRate;
private String projectName;
private String sampleName;
private String entrustCode;
private Integer sampleId;
private BigDecimal workTimeCoefficient;
private Integer type;
private String groupTeamName;
private Integer groupId;
}
}
package cn.wise.sc.cement.business.entity;
import lombok.Data;
import java.io.Serializable;
/**
* @description: 标准产值统计对象
* @author: qh
* @create: 2020-09-23 18:18
**/
@Data
public class NormProductionStatistics implements Serializable {
private static final long serialVersionUID = 42L;
private String userName;
private String userId;
private String account;
private String sex;
private String position;
private String time;
private Long count;
private Integer coefficient;
}
...@@ -2,6 +2,7 @@ package cn.wise.sc.cement.business.entity; ...@@ -2,6 +2,7 @@ package cn.wise.sc.cement.business.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.io.Serializable; import java.io.Serializable;
...@@ -23,7 +24,7 @@ import lombok.experimental.Accessors; ...@@ -23,7 +24,7 @@ import lombok.experimental.Accessors;
@Accessors(chain = true) @Accessors(chain = true)
public class SampleCheck implements Serializable { public class SampleCheck implements Serializable {
private static final long serialVersionUID=1L; private static final long serialVersionUID = 1L;
/** /**
* 主键 * 主键
...@@ -49,5 +50,4 @@ public class SampleCheck implements Serializable { ...@@ -49,5 +50,4 @@ public class SampleCheck implements Serializable {
@ApiModelProperty("备注") @ApiModelProperty("备注")
private String remark; private String remark;
} }
package cn.wise.sc.cement.business.mapper;
import cn.wise.sc.cement.business.entity.NormProduction;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* Mapper 接口
* </p>
*
* @author ztw
* @since 2020-09-23
*/
public interface NormProductionMapper extends BaseMapper<NormProduction> {
}
package cn.wise.sc.cement.business.mapper; package cn.wise.sc.cement.business.mapper;
import cn.wise.sc.cement.business.entity.EntrustSample;
import cn.wise.sc.cement.business.entity.SampleCheckTeam; import cn.wise.sc.cement.business.entity.SampleCheckTeam;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
/** /**
* <p> * <p>
* Mapper 接口 * Mapper 接口
...@@ -13,4 +16,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; ...@@ -13,4 +16,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/ */
public interface SampleCheckTeamMapper extends BaseMapper<SampleCheckTeam> { public interface SampleCheckTeamMapper extends BaseMapper<SampleCheckTeam> {
List<EntrustSample> getEntrustSample();
} }
package cn.wise.sc.cement.business.mapper; package cn.wise.sc.cement.business.mapper;
import cn.wise.sc.cement.business.entity.EntrustSample;
import cn.wise.sc.cement.business.entity.SampleDistribution; import cn.wise.sc.cement.business.entity.SampleDistribution;
import cn.wise.sc.cement.business.model.vo.SampleCheckGroupVo; import cn.wise.sc.cement.business.model.vo.SampleCheckGroupVo;
import cn.wise.sc.cement.business.model.vo.SampleDistributionTeamVo; import cn.wise.sc.cement.business.model.vo.SampleDistributionTeamVo;
...@@ -8,6 +9,7 @@ import cn.wise.sc.cement.business.model.vo.SampleHandleVo; ...@@ -8,6 +9,7 @@ import cn.wise.sc.cement.business.model.vo.SampleHandleVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
...@@ -21,6 +23,7 @@ import java.util.Map; ...@@ -21,6 +23,7 @@ import java.util.Map;
* @author ztw * @author ztw
* @since 2020-08-24 * @since 2020-08-24
*/ */
@Mapper
public interface SampleDistributionMapper extends BaseMapper<SampleDistribution> { public interface SampleDistributionMapper extends BaseMapper<SampleDistribution> {
IPage<SampleDistributionVo> getPage(@Param("page") Page page, @Param("params") Map<String, Object> params); IPage<SampleDistributionVo> getPage(@Param("page") Page page, @Param("params") Map<String, Object> params);
...@@ -28,4 +31,6 @@ public interface SampleDistributionMapper extends BaseMapper<SampleDistribution> ...@@ -28,4 +31,6 @@ public interface SampleDistributionMapper extends BaseMapper<SampleDistribution>
List<SampleDistributionTeamVo> getDistributionTeamList(@Param("sampleId") Integer sampleId, @Param("userId") Integer userId); List<SampleDistributionTeamVo> getDistributionTeamList(@Param("sampleId") Integer sampleId, @Param("userId") Integer userId);
List<SampleCheckGroupVo> getSampleCheckGroupList(@Param("sampleId") Integer sampleId); List<SampleCheckGroupVo> getSampleCheckGroupList(@Param("sampleId") Integer sampleId);
List<EntrustSample> getEntrustSample();
} }
package cn.wise.sc.cement.business.mapper; package cn.wise.sc.cement.business.mapper;
import cn.wise.sc.cement.business.entity.EntrustSample;
import cn.wise.sc.cement.business.entity.SampleHandle; import cn.wise.sc.cement.business.entity.SampleHandle;
import cn.wise.sc.cement.business.model.vo.EntrustVo; import cn.wise.sc.cement.business.model.vo.EntrustVo;
import cn.wise.sc.cement.business.model.vo.SampleHandleVo; import cn.wise.sc.cement.business.model.vo.SampleHandleVo;
...@@ -32,4 +33,5 @@ public interface SampleHandleMapper extends BaseMapper<SampleHandle> { ...@@ -32,4 +33,5 @@ public interface SampleHandleMapper extends BaseMapper<SampleHandle> {
@Select("select MIN(accept_time) from sample_handle where sample_id = #{sampleId} and status>0") @Select("select MIN(accept_time) from sample_handle where sample_id = #{sampleId} and status>0")
LocalDateTime getNo1AcceptTime(Integer sampleId); LocalDateTime getNo1AcceptTime(Integer sampleId);
List<EntrustSample> getEntrustSample();
} }
<?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="cn.wise.sc.cement.business.mapper.NormProductionMapper">
</mapper>
...@@ -2,4 +2,17 @@ ...@@ -2,4 +2,17 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.wise.sc.cement.business.mapper.SampleCheckTeamMapper"> <mapper namespace="cn.wise.sc.cement.business.mapper.SampleCheckTeamMapper">
<select id="getEntrustSample" resultType="cn.wise.sc.cement.business.entity.EntrustSample">
SELECT t.project_name,t.entrust_code,sscc.sample_id,sscc.entrust_id,sscc.`sample_name`,
sscc.user_id,sscc.team_group_id,sscc.distribution_id FROM entrust t
RIGHT JOIN
(SELECT s.entrust_id,s.sample_id,s.`name` as sample_name,scc.user_id,scc.team_group_id,scc.distribution_id FROM sample s
RIGHT JOIN
(SELECT id,sct.check_id,sct.sample_id,sct.user_id,team_group_id,sct.distribution_id FROM sample_check sc
RIGHT JOIN
(SELECT sample_id,user_id,check_id, id as distribution_id FROM sample_check_team) sct
ON sc.id = sct.check_id) scc
ON s.id = scc.sample_id) sscc
ON sscc.entrust_id = t.id
</select>
</mapper> </mapper>
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
left join sample s on s.id = t.sample_id left join sample s on s.id = t.sample_id
left join entrust e on e.id = s.entrust_id left join entrust e on e.id = s.entrust_id
left join project p on p.id = e.project_id left join project p on p.id = e.project_id
<include refid="where" /> <include refid="where"/>
order by t.create_time desc order by t.create_time desc
</select> </select>
...@@ -61,8 +61,6 @@ ...@@ -61,8 +61,6 @@
order by t.id asc order by t.id asc
</select> </select>
<select id="getSampleCheckGroupList" resultType="cn.wise.sc.cement.business.model.vo.SampleCheckGroupVo"> <select id="getSampleCheckGroupList" resultType="cn.wise.sc.cement.business.model.vo.SampleCheckGroupVo">
select sd.team_group_id as teamGroupId, tg.name as teamGroupName, select sd.team_group_id as teamGroupId, tg.name as teamGroupName,
sd.user_id as userId, su.name as userName sd.user_id as userId, su.name as userName
...@@ -74,5 +72,15 @@ ...@@ -74,5 +72,15 @@
order by sd.team_group_id order by sd.team_group_id
</select> </select>
<select id="getEntrustSample"
resultType="cn.wise.sc.cement.business.entity.EntrustSample">
SELECT e.project_name,e.entrust_code,g.distribution_id,g.entrust_id,g.`sample_name`,g.user_id,g.sample_id FROM entrust e
RIGHT JOIN
(SELECT s.`name` as sample_name,d.distribution_id,s.entrust_id,d.user_id,s.id as sample_id FROM sample s
RIGHT JOIN
(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>
</mapper> </mapper>
...@@ -76,8 +76,14 @@ ...@@ -76,8 +76,14 @@
where t.id = #{id} where t.id = #{id}
</select> </select>
<select id="getEntrustSample" resultType="cn.wise.sc.cement.business.entity.EntrustSample">
SELECT e.project_name,e.entrust_code,g.distribution_id,g.entrust_id,g.`sample_name`,g.user_id,g.sample_id FROM entrust e
RIGHT JOIN
(SELECT s.`name` as sample_name,d.distribution_id,s.entrust_id,d.user_id,s.id as sample_id FROM sample s
RIGHT JOIN
(SELECT user_id, id as distribution_id,sample_id FROM sample_handle ) d
on s.id = d.sample_id ) g ON g.entrust_id = e.id
</select>
</mapper> </mapper>
package cn.wise.sc.cement.business.service;
import cn.wise.sc.cement.business.entity.NormProduction;
import cn.wise.sc.cement.business.entity.NormProductionStatistics;
import cn.wise.sc.cement.business.model.BaseResponse;
import cn.wise.sc.cement.business.model.PageQuery;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* <p>
* 服务类
* </p>
*
* @author ztw
* @since 2020-09-23
*/
public interface INormProductionService extends IService<NormProduction> {
/**
* 创建新的标准产值配置
*
* @param normProduction 标准产值
* @return BaseResponse
*/
BaseResponse<NormProduction> addObj(NormProduction normProduction);
/**
* 分页查询
*
* @param pageQuery 分页条件
* @return 数据
*/
BaseResponse<IPage<NormProduction>> getPage(PageQuery pageQuery);
/**
* 编辑标准产值
*
* @param production 标准产值
* @return bool
*/
BaseResponse<Boolean> edit(NormProduction production);
/**
* 启用禁用标准产值
*
* @param id id
* @return bool
*/
BaseResponse<Integer> activeOrForbidden(Integer id);
/**
* 标准产值统计
*
* @param start 开始时间
* @param end 结束时间
* @return BaseResponse
*/
BaseResponse<List<NormProductionStatistics>> normProductionStatistics(Long start, Long end);
/**
* 标准产值统计 单人详情
*
* @param userId 用户id
* @param start 开始时间
* @param end 结束时间
* @return 详细信息
*/
List<NormProduction.NormProductionDetail> normProductionDetails(Integer userId,
Long start, Long end);
}
package cn.wise.sc.cement.business.service; package cn.wise.sc.cement.business.service;
import cn.wise.sc.cement.business.entity.EntrustSample;
import cn.wise.sc.cement.business.entity.SampleCheckTeam; import cn.wise.sc.cement.business.entity.SampleCheckTeam;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/** /**
* <p> * <p>
* 服务类 * 服务类
...@@ -13,4 +16,9 @@ import com.baomidou.mybatisplus.extension.service.IService; ...@@ -13,4 +16,9 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/ */
public interface ISampleCheckTeamService extends IService<SampleCheckTeam> { public interface ISampleCheckTeamService extends IService<SampleCheckTeam> {
/**
* 获取校核信息
* @return 项目分样信息
*/
List<EntrustSample> getEntrustSample();
} }
package cn.wise.sc.cement.business.service; package cn.wise.sc.cement.business.service;
import cn.wise.sc.cement.business.entity.EntrustSample;
import cn.wise.sc.cement.business.entity.SampleDistribution; import cn.wise.sc.cement.business.entity.SampleDistribution;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/** /**
* <p> * <p>
* 服务类 * 服务类
...@@ -12,5 +15,10 @@ import com.baomidou.mybatisplus.extension.service.IService; ...@@ -12,5 +15,10 @@ import com.baomidou.mybatisplus.extension.service.IService;
* @since 2020-08-24 * @since 2020-08-24
*/ */
public interface ISampleDistributionService extends IService<SampleDistribution> { public interface ISampleDistributionService extends IService<SampleDistribution> {
/**
* 获取派发项目和分样信息
* @return
*/
List<EntrustSample> getEntrustSample();
} }
package cn.wise.sc.cement.business.service; package cn.wise.sc.cement.business.service;
import cn.wise.sc.cement.business.entity.EntrustSample;
import cn.wise.sc.cement.business.entity.SampleHandle; import cn.wise.sc.cement.business.entity.SampleHandle;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/** /**
* <p> * <p>
* 服务类 * 服务类
...@@ -13,4 +16,9 @@ import com.baomidou.mybatisplus.extension.service.IService; ...@@ -13,4 +16,9 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/ */
public interface ISampleHandleService extends IService<SampleHandle> { public interface ISampleHandleService extends IService<SampleHandle> {
/**
* 获取处理信息
* @return list
*/
List<EntrustSample> getEntrustSample();
} }
package cn.wise.sc.cement.business.service.impl;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.wise.sc.cement.business.entity.EntrustSample;
import cn.wise.sc.cement.business.entity.Handle;
import cn.wise.sc.cement.business.entity.NormProduction;
import cn.wise.sc.cement.business.entity.NormProductionStatistics;
import cn.wise.sc.cement.business.entity.SampleCheckTeam;
import cn.wise.sc.cement.business.entity.SampleDistribution;
import cn.wise.sc.cement.business.entity.SampleHandle;
import cn.wise.sc.cement.business.entity.SysUser;
import cn.wise.sc.cement.business.entity.TeamGroup;
import cn.wise.sc.cement.business.mapper.NormProductionMapper;
import cn.wise.sc.cement.business.model.BaseResponse;
import cn.wise.sc.cement.business.model.PageQuery;
import cn.wise.sc.cement.business.service.IHandleService;
import cn.wise.sc.cement.business.service.INormProductionService;
import cn.wise.sc.cement.business.service.ISampleCheckTeamService;
import cn.wise.sc.cement.business.service.ISampleDistributionService;
import cn.wise.sc.cement.business.service.ISampleHandleService;
import cn.wise.sc.cement.business.service.ISysUserService;
import cn.wise.sc.cement.business.service.ITeamGroupService;
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.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/**
* <p>
* 服务实现类
* </p>
*
* @author ztw
* @since 2020-09-23
*/
@Service
public class NormProductionServiceImpl extends ServiceImpl<NormProductionMapper, NormProduction> implements INormProductionService {
final public Map<String, NormProduction> normProductionCache = new HashMap<>();
final
ISampleDistributionService iSampleDistributionService;
final
ISampleHandleService iSampleHandleService;
final
ISysUserService iSysUserService;
final
ISampleCheckTeamService iSampleCheckTeamService;
final
ITeamGroupService iTeamGroupService;
final
IHandleService iHandleService;
public NormProductionServiceImpl(ISampleDistributionService iSampleDistributionService,
ISampleHandleService iSampleHandleService,
ISysUserService iSysUserService,
ISampleCheckTeamService iSampleCheckTeamService,
ITeamGroupService iTeamGroupService, IHandleService iHandleService) {
this.iSampleDistributionService = iSampleDistributionService;
this.iSampleHandleService = iSampleHandleService;
this.iSysUserService = iSysUserService;
this.iSampleCheckTeamService = iSampleCheckTeamService;
this.iTeamGroupService = iTeamGroupService;
this.iHandleService = iHandleService;
}
@Override
public BaseResponse<NormProduction> addObj(NormProduction normProduction) {
//判断配置项目是否已存在
QueryWrapper<NormProduction> qw = new QueryWrapper<>();
qw.eq("assessId_id", normProduction.getAssessId());
qw.eq("type", normProduction.getType());
qw.eq("status", 1);
int count = this.count(qw);
if (count != 0) {
return BaseResponse.errorMsg("当前标准产值已存在!");
}
//判断比例是否为总值100%
// if (normProduction.getAnalyseRate()
// + normProduction.getAssessRate()
// + normProduction.getSeparateRate()
// + normProduction.getReportedResultRate() != 1) {
// return BaseResponse.errorMsg("百分比总和不等于1");
// }
//状态为1
normProduction.setStatus(1);
boolean save = this.save(normProduction);
if (save) {
return BaseResponse.okData(normProduction);
} else {
return BaseResponse.errorMsg("失败!");
}
}
@Override
public BaseResponse<IPage<NormProduction>> getPage(PageQuery pageQuery) {
IPage<NormProduction> page = new Page<>(pageQuery.getPageNo(), pageQuery.getPageSize());
IPage<NormProduction> rts = this.page(page);
return BaseResponse.okData(rts);
}
@Override
public BaseResponse<Boolean> edit(NormProduction production) {
if (production.getId() == null || production.getId() <= 0) {
return BaseResponse.errorMsg("编号id是必须的!");
}
//判断比例是否为总值100%
// if (production.getAnalyseRate()
// + production.getAssessRate()
// + production.getSeparateRate()
// + production.getReportedResultRate() != 1) {
// return BaseResponse.errorMsg("百分比总和不等于1");
// }
//检测组和处理组 不允许更新
production.setAssessId(null);
boolean b = this.updateById(production);
if (b) {
return BaseResponse.okData(true);
} else {
return BaseResponse.errorMsg("修改失败!");
}
}
@Override
public BaseResponse<Integer> activeOrForbidden(Integer id) {
NormProduction normProduction = this.getById(id);
Integer status = normProduction.getStatus();
if (status == 1) {
normProduction.setStatus(0);
this.updateById(normProduction);
return BaseResponse.okData(0);
} else {
normProduction.setStatus(1);
this.updateById(normProduction);
return BaseResponse.okData(1);
}
}
@Override
public BaseResponse<List<NormProductionStatistics>> normProductionStatistics(Long start, Long end) {
//统计分样处理的详情
List<NormProduction.NormProductionDetail> normProductionDetails =
normProductionDetails(null, start, end);
Map<Integer, BigDecimal> coefficientMap = new HashMap<>(normProductionDetails.size());
normProductionDetails
.forEach(arg -> {
Integer userId = arg.getUserId();
//不存在 添加
if (coefficientMap.containsKey(userId)) {
coefficientMap.put(userId, arg.getWorkTimeCoefficient());
} else {
BigDecimal bigDecimal = coefficientMap.get(userId);
BigDecimal newWorkTime = arg.getWorkTimeCoefficient().add(bigDecimal);
coefficientMap.put(userId, newWorkTime);
}
});
List<NormProductionStatistics> rts = new ArrayList<>();
Set<Integer> userIds = coefficientMap.keySet();
QueryWrapper<SysUser> qw = new QueryWrapper<>();
qw.in("id", userIds);
//获取用户id
List<SysUser> users = iSysUserService.list(qw);
for (Integer userId : coefficientMap.keySet()) {
SysUser sysUser = users.stream()
.filter(arg -> arg.getId().intValue() == userId)
.findFirst().orElse(null);
if (sysUser == null) {
continue;
}
NormProductionStatistics productionStatistics = new NormProductionStatistics();
productionStatistics.setAccount(sysUser.getUsername());
productionStatistics.setCoefficient(coefficientMap.get(userId).intValue());
productionStatistics.setCount(normProductionDetails.stream()
.filter(arg -> arg.getUserId().intValue() == sysUser.getId())
.count());
productionStatistics.setPosition(sysUser.getQualifications());
DateTime startTime = DateUtil.date(start);
DateTime endTime = DateUtil.date(end);
productionStatistics.setTime(startTime.toDateStr() + "-" + endTime.toDateStr());
productionStatistics.setSex(sysUser.getSex() == 0 ? "女" : "男");
productionStatistics.setUserId(sysUser.getId() + "");
productionStatistics.setUserName(sysUser.getName());
rts.add(productionStatistics);
}
return BaseResponse.okData(rts);
}
@Override
public List<NormProduction.NormProductionDetail> normProductionDetails(
Integer userId, Long start, Long end) {
/*
* 计算的地方: 分样派发和分样处理表
* userId == null,计算所有人数据。
* userId != null,计算单人时间线的数据。
* 当start==0&&end==0时计算历史所有数据
*
* 过程:
* 1.获取分样派发表数据,然后获取标准产值配置,它的检测组相同。
* 3.每条记录*标准产值计算出来的结果。==>得出详情信息。
* 处理项目:
* 1.获取处理派发表数据,获取标准产值配置,查询处理项。
* */
//获取标准产值数据
QueryWrapper<SampleDistribution> qwDis = new QueryWrapper<>();
QueryWrapper<SampleHandle> qwHan = new QueryWrapper<>();
QueryWrapper<SampleCheckTeam> qwCT = new QueryWrapper<>();
if (userId != null && userId > 0) {
qwDis.eq("user_id", userId);
qwHan.eq("user_id", userId);
qwCT.eq("user_id", userId);
}
if (start != null && end != null) {
DateTime startTime = DateUtil.date(start);
DateTime endTime = DateUtil.date(end);
qwDis.between("finish_time", startTime, endTime);
qwHan.between("finish_time", startTime, endTime);
qwCT.between("finish_time", startTime, endTime);
}
//计算分析任务单产值
List<NormProduction.NormProductionDetail> sampleDistributionDetail = calculateSampleDistribution(qwDis);
//计算处理任务单产值
List<NormProduction.NormProductionDetail> sampleHandleDetail = calculateSampleHandle(qwHan);
//todo 计算校核任务单产值
// List<NormProduction.NormProductionDetail> sampleCheckTeamDetail = calculateSampleCheck(qwCT);
//todo 计算报出结果产值
List<NormProduction.NormProductionDetail> rts = new ArrayList<>(
sampleDistributionDetail.size()
+ sampleHandleDetail.size());
rts.addAll(sampleDistributionDetail);
rts.addAll(sampleHandleDetail);
//关联用户名字
List<Integer> userIds = rts.stream()
.map(NormProduction.NormProductionDetail::getUserId)
.collect(Collectors.toList());
List<SysUser> users = iSysUserService.listByIds(userIds);
rts.forEach(arg-> users.stream()
.filter(opt -> opt.getId().intValue() == arg.getUserId())
.findFirst()
.ifPresent(sysUser -> arg.setUserName(sysUser.getName())));
return rts;
}
/**
* 计算校核单每条数据的标准产值
*
* @param qwCheck 统计条件
* @return 校核任务详情
*/
private List<NormProduction.NormProductionDetail> calculateSampleCheck(QueryWrapper<SampleCheckTeam> qwCheck) {
//计算处理的绩效
List<SampleCheckTeam> sampleCheckTeams = iSampleCheckTeamService.list(qwCheck);
List<EntrustSample> entrustSamples = iSampleCheckTeamService.getEntrustSample();
List<NormProduction.NormProductionDetail> rts = new ArrayList<>(sampleCheckTeams.size());
for (SampleCheckTeam sampleCheckTeam : sampleCheckTeams) {
//判断是否已经配置了 获取到核算处理的联表
EntrustSample entrustSample = entrustSamples.stream()
.filter(arg -> arg.getDistributionId().intValue() == sampleCheckTeam.getId())
.findFirst().orElse(null);
if (entrustSample == null) {
continue;
}
String key = sampleCheckTeam.getTeamGroupId() + ":" + "1";
//判断缓存是否存在
if (!normProductionCache.containsKey(key)) {
//初始化
initNormProductionCache();
}
NormProduction normProduction = normProductionCache.get(key);
NormProduction.NormProductionDetail productionDetail =
initNormProductionDetail(entrustSample, normProduction, normProduction.getAssessRate());
productionDetail.setUserId(entrustSample.getUserId());
productionDetail.setCheckTime(sampleCheckTeam.getCreateTime());
productionDetail.setDistributionId(sampleCheckTeam.getId());
productionDetail.setAssessId(sampleCheckTeam.getTeamGroupId());
rts.add(productionDetail);
}
return rts;
}
/**
* 计算处理派发单每条数据的标准产值
*
* @param qwHan 统计条件
* @return 处理任务详情
*/
private List<NormProduction.NormProductionDetail> calculateSampleHandle(QueryWrapper<SampleHandle> qwHan) {
//计算处理的绩效
List<SampleHandle> sampleHandles = iSampleHandleService.list(qwHan);
List<EntrustSample> entrustSamples = iSampleHandleService.getEntrustSample();
List<NormProduction.NormProductionDetail> rts = new ArrayList<>(sampleHandles.size());
List<Integer> handleIds = new ArrayList<>();
sampleHandles.forEach(arg -> {
String idsStr = arg.getContent();
String[] split = idsStr.split("、");
try {
for (String idStr : split) {
handleIds.add(Integer.parseInt(idStr));
}
} catch (NumberFormatException ex) {
throw new RuntimeException("处理项目的id传的有问题呀!");
}
});
List<Handle> handles = iHandleService.listByIds(handleIds);
//获取每一次派发单的数据
for (SampleHandle sampleHandle : sampleHandles) {
//判断是否已经配置了
EntrustSample entrustSample = entrustSamples.stream()
.filter(arg -> arg.getDistributionId().intValue() == sampleHandle.getId())
.findFirst().orElse(null);
if (entrustSample == null) {
continue;
}
//处理项是多个处理ids 、分割
String content = sampleHandle.getContent();
String[] split = content.split("、");
List<Integer> ids = new ArrayList<>(split.length);
try {
for (String idStr : split) {
ids.add(Integer.parseInt(idStr));
}
} catch (NumberFormatException ex) {
throw new RuntimeException("处理项目的id传的有问题呀!");
}
for (Integer handleId : ids) {
String key = handleId + ":" + "0";
//判断缓存是否存在
if (!normProductionCache.containsKey(key)) {
//初始化
initNormProductionCache();
}
NormProduction normProduction = normProductionCache.get(key);
Handle handle = handles.stream()
.filter(arg -> arg.getId().intValue() == handleId)
.findFirst().orElse(null);
if (normProduction == null || handle == null) {
//如果没有配置 标准产值设置 跳过不计算
continue;
}
NormProduction.NormProductionDetail productionDetail =
initNormProductionDetail(entrustSample, normProduction, normProduction.getAnalyseRate());
productionDetail.setUserId(sampleHandle.getUserId());
productionDetail.setCheckTime(sampleHandle.getAcceptTime());
productionDetail.setDistributionId(sampleHandle.getId());
productionDetail.setAssessId(handleId);
productionDetail.setGroupTeamName(handle.getName());
rts.add(productionDetail);
}
}
return rts;
}
/**
* 计算分析派发单每条数据的标准产值
*
* @param qwDis 统计条件
* @return 分析任务详情
*/
private List<NormProduction.NormProductionDetail> calculateSampleDistribution(QueryWrapper<SampleDistribution> qwDis) {
List<SampleDistribution> distributions = iSampleDistributionService.list(qwDis);
List<EntrustSample> entrustSamples = iSampleDistributionService.getEntrustSample();
List<NormProduction.NormProductionDetail> rts = new ArrayList<>(distributions.size());
List<Integer> groupTeamIds = distributions.stream().map(SampleDistribution::getTeamGroupId).collect(Collectors.toList());
List<TeamGroup> teamGroups = iTeamGroupService.listByIds(groupTeamIds);
//获取每一次派发单的数据
for (SampleDistribution distribution : distributions) {
//判断是否已经配置了
EntrustSample entrustSample = entrustSamples.stream()
.filter(arg -> arg.getDistributionId().intValue() == distribution.getId())
.findFirst().orElse(null);
TeamGroup teamGroup = teamGroups.stream()
.filter(arg -> arg.getId().intValue() == distribution.getTeamGroupId())
.findFirst().orElse(null);
if (entrustSample == null || teamGroup == null) {
continue;
}
String key = distribution.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(distribution.getUserId());
productionDetail.setCheckTime(distribution.getAcceptTime());
productionDetail.setDistributionId(distribution.getId());
productionDetail.setAssessId(distribution.getTeamGroupId());
productionDetail.setGroupTeamName(teamGroup.getName());
rts.add(productionDetail);
}
return rts;
}
/**
* 初始化产值明细
*
* @param entrustSample 分样任务
* @param normProduction 标准产值配置表
* @return 标准产值明细
*/
private NormProduction.NormProductionDetail initNormProductionDetail(
EntrustSample entrustSample, NormProduction normProduction, Double rate) {
NormProduction.NormProductionDetail productionDetail =
new NormProduction.NormProductionDetail();
productionDetail.setAnalyseRate(normProduction.getAnalyseRate());
productionDetail.setAssessRate(normProduction.getAssessRate());
productionDetail.setSeparateRate(normProduction.getSeparateRate());
productionDetail.setReportedResultRate(normProduction.getReportedResultRate());
productionDetail.setAssessId(normProduction.getAssessId());
productionDetail.setEntrustId(entrustSample.getEntrustId());
productionDetail.setProjectName(entrustSample.getProjectName());
productionDetail.setSampleName(entrustSample.getSampleName());
productionDetail.setSampleId(entrustSample.getSampleId());
productionDetail.setEntrustCode(entrustSample.getEntrustCode());
productionDetail.setWorkTimeCoefficient(calculateWorkTimeCoefficient(normProduction,
rate));
return productionDetail;
}
/**
* 初始化标准产值缓存
*/
private void initNormProductionCache() {
QueryWrapper<NormProduction> qw = new QueryWrapper<>();
qw.eq("status", 1);
List<NormProduction> list = this.list(qw);
for (NormProduction normProduction : list) {
String key = normProduction.getAssessId() + ":" + normProduction.getType();
normProductionCache.put(key, normProduction);
}
}
/**
* 计算标准产值的工时标准系数
* 额定工日*建议系数/报出对应分析结果*考核工值*分析占比
*
* @param normProduction 标准产值配置对象 如:六元素
* @param rate 具体的操作占比 如:统计分析 85%
* @return BigDecimal
*/
private BigDecimal calculateWorkTimeCoefficient(NormProduction normProduction, Double rate) {
//计算出工时标准系数:
//额定工日*建议系数/报出对应分析结果*考核工值*分析占比
BigDecimal quotaDayBig = BigDecimal.valueOf(normProduction.getQuotaDay());
BigDecimal coefficientBig = BigDecimal.valueOf(normProduction.getCoefficient());
BigDecimal reportedAnalyseRtsBig = BigDecimal.valueOf(normProduction.getReportedAnalyseResult());
BigDecimal assessValueBig = BigDecimal.valueOf(normProduction.getAssessValue());
BigDecimal analyseRateBig = BigDecimal.valueOf(rate);
return quotaDayBig.multiply(coefficientBig)
.divide(reportedAnalyseRtsBig, 6, RoundingMode.HALF_DOWN)
.multiply(assessValueBig).multiply(analyseRateBig)
.setScale(6, RoundingMode.HALF_DOWN);
}
}
package cn.wise.sc.cement.business.service.impl; package cn.wise.sc.cement.business.service.impl;
import cn.wise.sc.cement.business.entity.EntrustSample;
import cn.wise.sc.cement.business.entity.SampleCheckTeam; import cn.wise.sc.cement.business.entity.SampleCheckTeam;
import cn.wise.sc.cement.business.mapper.SampleCheckTeamMapper; import cn.wise.sc.cement.business.mapper.SampleCheckTeamMapper;
import cn.wise.sc.cement.business.service.ISampleCheckTeamService; import cn.wise.sc.cement.business.service.ISampleCheckTeamService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List;
/** /**
* <p> * <p>
* 服务实现类 * 服务实现类
...@@ -17,4 +21,15 @@ import org.springframework.stereotype.Service; ...@@ -17,4 +21,15 @@ import org.springframework.stereotype.Service;
@Service @Service
public class SampleCheckTeamServiceImpl extends ServiceImpl<SampleCheckTeamMapper, SampleCheckTeam> implements ISampleCheckTeamService { public class SampleCheckTeamServiceImpl extends ServiceImpl<SampleCheckTeamMapper, SampleCheckTeam> implements ISampleCheckTeamService {
final
SampleCheckTeamMapper sampleCheckTeamMapper;
public SampleCheckTeamServiceImpl(SampleCheckTeamMapper sampleCheckTeamMapper) {
this.sampleCheckTeamMapper = sampleCheckTeamMapper;
}
@Override
public List<EntrustSample> getEntrustSample() {
return sampleCheckTeamMapper.getEntrustSample();
}
} }
package cn.wise.sc.cement.business.service.impl; package cn.wise.sc.cement.business.service.impl;
import cn.wise.sc.cement.business.entity.EntrustSample;
import cn.wise.sc.cement.business.entity.SampleDistribution; import cn.wise.sc.cement.business.entity.SampleDistribution;
import cn.wise.sc.cement.business.mapper.SampleDistributionMapper; import cn.wise.sc.cement.business.mapper.SampleDistributionMapper;
import cn.wise.sc.cement.business.service.ISampleDistributionService; import cn.wise.sc.cement.business.service.ISampleDistributionService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List;
/** /**
* <p> * <p>
* 服务实现类 * 服务实现类
...@@ -17,4 +21,12 @@ import org.springframework.stereotype.Service; ...@@ -17,4 +21,12 @@ import org.springframework.stereotype.Service;
@Service @Service
public class SampleDistributionServiceImpl extends ServiceImpl<SampleDistributionMapper, SampleDistribution> implements ISampleDistributionService { public class SampleDistributionServiceImpl extends ServiceImpl<SampleDistributionMapper, SampleDistribution> implements ISampleDistributionService {
@Autowired
SampleDistributionMapper sampleDistributionMapper;
@Override
public List<EntrustSample> getEntrustSample() {
return sampleDistributionMapper.getEntrustSample();
}
} }
package cn.wise.sc.cement.business.service.impl; package cn.wise.sc.cement.business.service.impl;
import cn.wise.sc.cement.business.entity.EntrustSample;
import cn.wise.sc.cement.business.entity.SampleHandle; import cn.wise.sc.cement.business.entity.SampleHandle;
import cn.wise.sc.cement.business.mapper.SampleHandleMapper; import cn.wise.sc.cement.business.mapper.SampleHandleMapper;
import cn.wise.sc.cement.business.service.ISampleHandleService; import cn.wise.sc.cement.business.service.ISampleHandleService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List;
/** /**
* <p> * <p>
* 服务实现类 * 服务实现类
...@@ -17,4 +21,11 @@ import org.springframework.stereotype.Service; ...@@ -17,4 +21,11 @@ import org.springframework.stereotype.Service;
@Service @Service
public class SampleHandleServiceImpl extends ServiceImpl<SampleHandleMapper, SampleHandle> implements ISampleHandleService { public class SampleHandleServiceImpl extends ServiceImpl<SampleHandleMapper, SampleHandle> implements ISampleHandleService {
@Autowired
SampleHandleMapper sampleHandleMapper;
@Override
public List<EntrustSample> getEntrustSample() {
return sampleHandleMapper.getEntrustSample();
}
} }
...@@ -11,7 +11,7 @@ spring: ...@@ -11,7 +11,7 @@ spring:
url: jdbc:mysql://192.168.110.85:3306/sinoma_tcdri?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&useSSL=false url: jdbc:mysql://192.168.110.85:3306/sinoma_tcdri?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&useSSL=false
username: root username: root
password: admin!@#123 password: admin!@#123
driverClassName: com.mysql.jdbc.Driver driverClassName: com.mysql.cj.jdbc.Driver
hikari: hikari:
minimum-idle: 3 minimum-idle: 3
maximum-pool-size: 10 maximum-pool-size: 10
......
...@@ -56,7 +56,7 @@ public class GeneratorApplication { ...@@ -56,7 +56,7 @@ public class GeneratorApplication {
// 全局配置 // 全局配置
GlobalConfig gc = new GlobalConfig(); GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir"); String projectPath = System.getProperty("user.dir");
gc.setOutputDir(projectPath + "/cement-business/src/main/java"); gc.setOutputDir(projectPath + "\\cement-business\\src\\main\\java");
gc.setAuthor("ztw"); gc.setAuthor("ztw");
gc.setOpen(false); gc.setOpen(false);
// gc.setSwagger2(true); 实体属性 Swagger2 注解 // gc.setSwagger2(true); 实体属性 Swagger2 注解
......
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