提交 d90f8765 authored 作者: chaoyanjun's avatar chaoyanjun

--no commit message

上级 46d3acd9
package com.zrqx.core.aspect;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import javax.sql.DataSource;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.aop.Advisor;
import org.springframework.aop.aspectj.AspectJExpressionPointcut;
import org.springframework.aop.support.DefaultPointcutAdvisor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource;
import org.springframework.transaction.interceptor.RollbackRuleAttribute;
import org.springframework.transaction.interceptor.RuleBasedTransactionAttribute;
import org.springframework.transaction.interceptor.TransactionAttribute;
import org.springframework.transaction.interceptor.TransactionInterceptor;
/**
*
* @author lpf
* @date 2018年12月26日下午5:25:20
*/
@Aspect
@Order(1)
@Configuration
public class TxAdviceInterceptor {
private static final int TX_METHOD_TIMEOUT = 120;
public static final String AOP_POINTCUT_EXPRESSION = "(execution(* com.zrqx..service..*Impl.*(..)))";
@Autowired
private PlatformTransactionManager transactionManager;
@Bean(name = "transactionManager")
public PlatformTransactionManager transactionManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean
public TransactionInterceptor txAdvice() {
NameMatchTransactionAttributeSource source = new NameMatchTransactionAttributeSource();
/*只读事务,不做更新操作*/
RuleBasedTransactionAttribute readOnlyTx = new RuleBasedTransactionAttribute();
readOnlyTx.setReadOnly(true);
readOnlyTx.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED );
/*当前存在事务就使用当前事务,当前不存在事务就创建一个新的事务*/
RuleBasedTransactionAttribute requiredTx = new RuleBasedTransactionAttribute();
requiredTx.setRollbackRules(
Collections.singletonList(new RollbackRuleAttribute(Exception.class)));
requiredTx.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
requiredTx.setTimeout(TX_METHOD_TIMEOUT);
Map<String, TransactionAttribute> txMap = new HashMap<>();
txMap.put("add*", requiredTx);
txMap.put("save*", requiredTx);
txMap.put("insert*", requiredTx);
txMap.put("update*", requiredTx);
txMap.put("batch*", requiredTx);
txMap.put("delete*", requiredTx);
txMap.put("get*", readOnlyTx);
txMap.put("query*", readOnlyTx);
txMap.put("select*", readOnlyTx);
txMap.put("page*", readOnlyTx);
txMap.put("list*", readOnlyTx);
source.setNameMap( txMap );
TransactionInterceptor txAdvice = new TransactionInterceptor(transactionManager, source);
return txAdvice;
}
@Bean
public Advisor txAdviceAdvisor() {
AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut();
pointcut.setExpression(AOP_POINTCUT_EXPRESSION);
return new DefaultPointcutAdvisor(pointcut, txAdvice());
//return new DefaultPointcutAdvisor(pointcut, txAdvice);
}
}
\ No newline at end of file
......@@ -2,6 +2,8 @@ package com.zrqx.core.enums;
import java.util.HashMap;
import org.apache.commons.lang3.StringUtils;
public enum ProjectManagementStatusEnum {
/** 售前<br> 售前 */
......@@ -17,7 +19,12 @@ public enum ProjectManagementStatusEnum {
/** 试运行<br> 试运行 */
TESTRUN("testRun","试运行"),
/** 需求变更<br> 需求变更 */
DEMANDCHANGE("demandChange","需求变更");
DEMANDCHANGE("demandChange","需求变更"),
/** 开发完成<br> 开发完成 */
DEVEFINISH("deveFinish","开发完成"),
/** 验收完成<br> 验收完成 */
ACCEPFINISH("accepFinish","验收完成");
private final String code;
......@@ -46,6 +53,23 @@ public enum ProjectManagementStatusEnum {
}
/**
* 通过中文名称获取ID
* @param code
* @return
*/
public static String getCode(String name) {
if (StringUtils.isBlank(name)) {
return null;
}
for (ProjectManagementStatusEnum mt : values()) {
if (mt.getName().equals(name)) {
return mt.getCode();
}
}
return null;
}
/**
* 获取所有的枚举,以MAP返回
* @return
*/
......
package com.zrqx.core.form.project;
import lombok.Data;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/** 项目列表分页form */
@Data
@ApiModel("ProjectPageForm")
public class ProjectPageForm {
@ApiModelProperty("项目名称")
......@@ -17,4 +19,7 @@ public class ProjectPageForm {
private String str;
@ApiModelProperty("团队成员")
private String teamMemberName;
@ApiModelProperty("出版社名称")
private String publisherName;
}
......@@ -32,5 +32,10 @@ public class TimeApplyAddForm {
@ApiModelProperty("审核状态 0:待审核 1:已审核 默认未审核")
private String status1;
@ApiModelProperty("审核状态 3:待审核 4:已审核 默认未审核")
private String status2;
private String status2;
/** 新增 */
@ApiModelProperty("上传附件时返回的唯一标识")
private String pdfLable;
}
package com.zrqx.core.model.project;
import java.util.List;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel("PublisherProjectVo")
public class PublisherProjectVo{
@ApiModelProperty("出版社名称")
private String publisherName;
@ApiModelProperty("所包含项目数")
private Integer sumProjectNum;
@ApiModelProperty("已验收项目数")
private Integer deveFinishNum;
@ApiModelProperty("进行中项目数")
private Integer doingNum;
@ApiModelProperty("所属项目内容")
private List<StatisticsProject> list;
}
......@@ -44,4 +44,7 @@ public class StatisticsTaskTime {
private String startTime;
@ApiModelProperty("结束时间")
private String endTime;
@ApiModelProperty("所属出版社")
private String publisher;
}
......@@ -52,4 +52,6 @@ public class TimeApply {
/** 新增 */
@ApiModelProperty("上传PDF时返回的唯一标识")
private String pdfLable;
@ApiModelProperty("申请人id")
private String createrId;
}
package com.zrqx.core.util.delHtmlTags;
/**
* 去除文章内容页页面代码里的HTML标签
* Created by yanyl on 2018/6/4.
*/
public class DelHtmlTagsUtils {
/**
* 去除html代码中含有的标签
* @param htmlStr
* @return
*/
public static String delHtmlTags(String htmlStr) {
//定义script的正则表达式,去除js可以防止注入
String scriptRegex="<script[^>]*?>[\\s\\S]*?<\\/script>";
//定义style的正则表达式,去除style样式,防止css代码过多时只截取到css样式代码
String styleRegex="<style[^>]*?>[\\s\\S]*?<\\/style>";
//定义style的正则表达式,去除li
String liRegex="<style[^>]*?>[\\s\\S]*?<\\/li>";
//定义HTML标签的正则表达式,去除标签,只提取文字内容
String htmlRegex="<[^>]+>";
//定义空格,回车,换行符,制表符
String spaceRegex = "\\s*|\t|\r|\n";
// 过滤script标签
htmlStr = htmlStr.replaceAll(scriptRegex, "");
// 过滤style标签
htmlStr = htmlStr.replaceAll(styleRegex, "");
// 过滤html标签
htmlStr = htmlStr.replaceAll(htmlRegex, "");
// 过滤空格等
htmlStr = htmlStr.replaceAll(spaceRegex, "");
return htmlStr.trim(); // 返回文本字符串
}
/**
* 获取HTML代码里的内容
* @param htmlStr
* @return
*/
public static String getTextFromHtml(String htmlStr){
//去除html标签
htmlStr = delHtmlTags(htmlStr);
//去除空格" "
htmlStr = htmlStr.replaceAll(" ","");
return htmlStr;
}
}
package com.zrqx.statistics;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.scheduling.annotation.EnableScheduling;
import com.alibaba.druid.pool.DruidDataSource;
import lombok.extern.slf4j.Slf4j;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
......@@ -18,9 +22,33 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Slf4j
public class Start {
@Value("${spring-datasource-url}")
private String url;
@Value("${spring-datasource-username}")
private String username;
@Value("${spring-datasource-password}")
private String password;
public static void main(String[] args) {
SpringApplication.run(Start.class, args);
log.info("项目已启动.......");
}
@Bean
public DruidDataSource dataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl(url);
dataSource.setUsername(username);// 用户名
dataSource.setPassword(password);// 密码
dataSource.setInitialSize(2);
dataSource.setMaxActive(20);
dataSource.setMinIdle(0);
dataSource.setMaxWait(60000);
dataSource.setValidationQuery("SELECT 1");
dataSource.setTestOnBorrow(false);
dataSource.setTestWhileIdle(true);
dataSource.setPoolPreparedStatements(false);
return dataSource;
}
}
......@@ -23,6 +23,7 @@ import com.zrqx.core.form.timeApply.TimeApplyForm;
import com.zrqx.core.form.timeApply.UpdateTimeApplyForm;
import com.zrqx.core.model.timeApply.TimeApply;
import com.zrqx.core.model.timeApply.TimeApplyChange;
import com.zrqx.core.redis.Redis;
import com.zrqx.core.response.CallBack;
import com.zrqx.core.util.bean.BeanUtils;
import com.zrqx.core.util.datatype.ArrayUtils;
......@@ -46,6 +47,8 @@ public class TimeApplyChangeController {
private TimeApplyChangeService timeApplyChangeService;
@Autowired
private TimeChangeService timeChangeService;
@Autowired
private Redis redis;
/**
* 查询申请页列表
......@@ -107,6 +110,7 @@ public class TimeApplyChangeController {
entity.setStartTime1(startTime1);
entity.setEndTime1(endTime1);
entity.setSynchronous("0");
entity.setCreaterId(redis.getUser().getId());
return CallBack.success(timeApplyChangeService.insert(entity));
}
......
......@@ -131,8 +131,8 @@ public class StatisticsServiceImpl extends BaseServiceImpl<StatisticsTaskTime, S
//查项目拆分详情
StatisticsTaskTimeForm query = new StatisticsTaskTimeForm();
query.setAccount(v.getName());
query.setEndTime(v.getEndTime());
query.setStartTime(v.getStartTime());
query.setEndTime(form.getEndTime());
query.setStartTime(form.getStartTime());
List<StatisticsTaskTime> list = staPService.queryProjectSplitData(query);
double beyondTime = list.stream().mapToDouble(StatisticsTaskTime :: getBeyondTime).sum();//总Bug超出工时
v.setBeyondTime(new BigDecimal(beyondTime).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue());
......@@ -143,6 +143,7 @@ public class StatisticsServiceImpl extends BaseServiceImpl<StatisticsTaskTime, S
double finishTime = list.stream().mapToDouble(StatisticsTaskTime :: getFinishTime).sum();//最终工时
v.setFinishTime(new BigDecimal(finishTime).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue());
v.setBugNum(list.stream().mapToInt(StatisticsTaskTime :: getBugNum).sum());
v.setLevel(list.get(0).getLevel());
});
return new PageInfo<StatisticsTaskTime>(list1);
}
......@@ -299,7 +300,6 @@ public class StatisticsServiceImpl extends BaseServiceImpl<StatisticsTaskTime, S
// 前端研发
if (dept.contains("前端")) {
monthsData = spMapper.selectEChartsDatams("前端研发");
//monthsData = formatMonths(monthsData,"前端研发");
quarterData = spMapper.selectEChartsDataQs("前端研发");
yearsData = spMapper.selectEChartsDataYs("前端研发");
......@@ -307,7 +307,6 @@ public class StatisticsServiceImpl extends BaseServiceImpl<StatisticsTaskTime, S
// 后端研发
if (dept.contains("后端")) {
monthsData = spMapper.selectEChartsDatams("后端研发");
//monthsData = formatMonths(monthsData,"后端研发");
quarterData = spMapper.selectEChartsDataQs("后端研发");
yearsData = spMapper.selectEChartsDataYs("后端研发");
......@@ -315,7 +314,6 @@ public class StatisticsServiceImpl extends BaseServiceImpl<StatisticsTaskTime, S
// 产品部
if (dept.contains("产品")) {
monthsData = spMapper.selectEChartsDatams("产品部");
//monthsData = formatMonths(monthsData,"产品部");
quarterData = spMapper.selectEChartsDataQs("产品部");
yearsData = spMapper.selectEChartsDataYs("产品部");
......@@ -323,7 +321,6 @@ public class StatisticsServiceImpl extends BaseServiceImpl<StatisticsTaskTime, S
// 设计部
if (dept.contains("设计")) {
monthsData = spMapper.selectEChartsDatams("设计部");
//monthsData = formatMonths(monthsData,"设计部");
quarterData = spMapper.selectEChartsDataQs("设计部");
yearsData = spMapper.selectEChartsDataYs("设计部");
......@@ -332,6 +329,10 @@ public class StatisticsServiceImpl extends BaseServiceImpl<StatisticsTaskTime, S
Map<String, List<EchartsDataQuartersVo>> quarters = quarterData.stream().collect(Collectors.groupingBy(EchartsDataQuartersVo::getName));
Map<String, List<EchartsDataYearsVo>> years = yearsData.stream().collect(Collectors.groupingBy(EchartsDataYearsVo::getName));
months.forEach((k,v) ->{
formatMonths(v,k);
});
vo.setMonths(months);
vo.setQuarters(quarters);
vo.setYears(years);
......@@ -340,7 +341,7 @@ public class StatisticsServiceImpl extends BaseServiceImpl<StatisticsTaskTime, S
}
//格式化日期 month
public List<EchartsDataMonthsVo> formatMonths(List<EchartsDataMonthsVo> list,String deptName){
public List<EchartsDataMonthsVo> formatMonths(List<EchartsDataMonthsVo> list,String name){
List<String> months = new ArrayList<String>();
LocalDate today = LocalDate.now();
for(long i = 1L;i <= 12L; i++){
......@@ -349,8 +350,10 @@ public class StatisticsServiceImpl extends BaseServiceImpl<StatisticsTaskTime, S
months.add(ss);
}
List<String> date = new ArrayList<String>();
String deptName = "" ;
for (EchartsDataMonthsVo m : list) {
date.add(m.getMonths());
deptName = m.getDeptName();
}
for (String m : months) {
if (date.contains(m)) {
......@@ -359,6 +362,7 @@ public class StatisticsServiceImpl extends BaseServiceImpl<StatisticsTaskTime, S
EchartsDataMonthsVo vo = new EchartsDataMonthsVo();
vo.setMonths(m);
vo.setDeptName(deptName);
vo.setName(name);
vo.setSumTime(0.0);
list.add(vo);
}
......@@ -366,4 +370,35 @@ public class StatisticsServiceImpl extends BaseServiceImpl<StatisticsTaskTime, S
List<EchartsDataMonthsVo> collect4 =list.stream().sorted(Comparator.comparing(EchartsDataMonthsVo::getMonths)).collect(Collectors.toList());
return collect4;
}
//格式化日期 quarter
public List<EchartsDataQuartersVo> formatquarters(List<EchartsDataQuartersVo> list,String name){
List<String> quarters = new ArrayList<String>();
quarters.add("1");
quarters.add("2");
quarters.add("3");
quarters.add("4");
List<String> date = new ArrayList<String>();
String deptName = "" ;
for (EchartsDataQuartersVo m : list) {
date.add(m.getQuarters());
deptName = m.getDeptName();
}
for (String m : quarters) {
if (date.contains(m)) {
continue;
}else {
EchartsDataQuartersVo vo = new EchartsDataQuartersVo();
vo.setQuarters(m);
vo.setDeptName(deptName);
vo.setName(name);
vo.setSumTime(0.0);
list.add(vo);
}
}
List<EchartsDataQuartersVo> collect4 =list.stream().sorted(Comparator.comparing(EchartsDataQuartersVo::getQuarters)).collect(Collectors.toList());
return collect4;
}
}
......@@ -52,17 +52,34 @@ public interface StatisticsTaskMapper extends BaseMapper<StatisticsTask> {
+ "")
List<StatisticsTask> queryTaskByProject(@Param("id") Integer id);
@Select(" SELECT u.id,SUM(t.estimate) as estimate,t.project,u.realname FROM zt_task t LEFT JOIN zt_user u ON t.finishedBy=u.account WHERE"
+ " project = #{id} and (t.status='done') AND t.deleted = '0' AND u.id IS NOT NULL GROUP BY u.id "
+ "")
List<StatisticsTask> queryTaskByProjectV1(@Param("id") Integer id);
@Select("<script>"
+ " SELECT u.id,SUM(t.estimate) as estimate,t.project,u.realname "
+ " FROM zt_task t "
+ " LEFT JOIN zt_user u ON t.finishedBy=u.account "
+ " left join zt_dept d on d.id = u.dept "
+ " WHERE 1=1 "
+ " eq(d.name,department) "
+ " and project = #{id} and (t.status='done') AND t.deleted = '0' AND u.id IS NOT NULL GROUP BY u.id "
+ "</script>")
List<StatisticsTask> queryTaskByProjectV1(@Param("id") Integer id,@Param("department")String department);
@Select(" SELECT u.id , COUNT(t.id) AS bugs ,SUM(t.estimate) AS bugTime,u.realname AS name FROM zt_task t LEFT JOIN zt_user u ON t.finishedBy=u.account WHERE 1=1 "
+ " AND t.project = #{id} AND t.NAME LIKE '%bug%' GROUP BY u.id"
)
List<StatisticsBug> queryTaskBugByProject(@Param("id") Integer id);
@Select("<script>"
+ " SELECT t.id,t.name,t.finishedDate,t.estimate,p.name AS project,u.realname finishedBy FROM"
+ " SELECT u.id , COUNT(t.id) AS bugs ,SUM(t.estimate) AS bugTime,u.realname AS name "
+ " FROM zt_task t "
+ " LEFT JOIN zt_user u ON t.finishedBy=u.account "
+ " left join zt_dept d on d.id = u.dept "
+ " WHERE 1=1 "
+ " eq(d.name,department) "
+ " AND t.project = #{id} AND t.NAME LIKE '%bug%' GROUP BY u.id"
+ "</script>")
List<StatisticsBug> queryTaskBugByProject1(@Param("id") Integer id,@Param("department")String department);
@Select("<script>"
+ " SELECT t.id,t.name,t.finishedDate,t.estimate,p.name AS project,u.realname finishedBy,t.desc FROM"
+ " zt_task t LEFT JOIN zt_user u ON t.finishedBy=u.account LEFT JOIN zt_dept d on u.dept = d.id "
+ " LEFT JOIN zt_project p ON t.project = p.id WHERE 1=1 "
+ " and (t.status='done') AND t.deleted = '0' "
......
......@@ -5,6 +5,7 @@ import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -13,6 +14,7 @@ import com.zrqx.core.form.project.ProjectInfoPageForm;
import com.zrqx.core.mapper.BaseMapper;
import com.zrqx.core.model.project.Team;
import com.zrqx.core.service.BaseServiceImpl;
import com.zrqx.core.util.delHtmlTags.DelHtmlTagsUtils;
import com.zrqx.core.util.page.PageInfo;
import com.zrqx.core.util.page.PageParam;
import com.zrqx.core.vo.project.PorjectUserInfoVo;
......@@ -27,11 +29,6 @@ public class StatisticsTaskServiceImpl extends BaseServiceImpl<StatisticsTask, I
private StatisticsTaskMapper mapper;
@Autowired
private StatisticsProjectMapper spMapper;
@Override
public boolean insertUuidList(List<StatisticsTask> recordList) {
// TODO Auto-generated method stub
return false;
}
@Override
public List<StatisticsTask> queryTask(String account, String startTime, String endTime) {
......@@ -40,7 +37,6 @@ public class StatisticsTaskServiceImpl extends BaseServiceImpl<StatisticsTask, I
@Override
public BaseMapper<StatisticsTask> getMapper() {
// TODO Auto-generated method stub
return mapper;
}
......@@ -59,6 +55,10 @@ public class StatisticsTaskServiceImpl extends BaseServiceImpl<StatisticsTask, I
// 开启分页
startPage(pageParam);
List<StatisticsTask> list = mapper.queryTaskByProjectPage(form);
list.forEach(v ->{
String desc = DelHtmlTagsUtils.getTextFromHtml(v.getDesc());
v.setDesc(desc);
});
return new PageInfo<StatisticsTask>(list);
}
......@@ -78,12 +78,12 @@ public class StatisticsTaskServiceImpl extends BaseServiceImpl<StatisticsTask, I
@Override
public List<PorjectUserInfoVo> queryTaskByProjectPageNew(ProjectInfoPageForm form) {
//统计在团队中的可用工时
List<Team> teams = spMapper.queryTeamByProjectV1(form.getId());
List<Team> teams = spMapper.queryTeamByProjectV2(form.getId(),form.getDepartment());
//统计在项目中的实际工时
List<StatisticsTask> listArray = mapper.queryTaskByProjectV1(form.getId());
List<StatisticsTask> listArray = mapper.queryTaskByProjectV1(form.getId(),form.getDepartment());
Map<Integer, Double> mapStatisticsTask = listArray.stream().collect(Collectors.toMap(StatisticsTask::getId, StatisticsTask::getEstimate));
//统计在项目中完成bug数量
List<StatisticsBug> list2 = mapper.queryTaskBugByProject(form.getId());
List<StatisticsBug> list2 = mapper.queryTaskBugByProject1(form.getId(),form.getDepartment());
Map<Integer, StatisticsBug> mapStatisticsBug = list2.stream().collect(Collectors.toMap(StatisticsBug::getId, StatisticsBug -> StatisticsBug));
List<PorjectUserInfoVo> resultList = teams.stream().map(t -> {
......
......@@ -16,6 +16,7 @@ import com.zrqx.core.enums.ProjectStatusEnum;
import com.zrqx.core.form.index.UserManagementForm;
import com.zrqx.core.form.project.ProjectManagementUpdateForm;
import com.zrqx.core.form.project.ProjectPageForm;
import com.zrqx.core.model.project.PublisherProjectVo;
import com.zrqx.core.model.project.StatisticsProject;
import com.zrqx.core.response.CallBack;
import com.zrqx.core.util.page.PageInfo;
......@@ -80,9 +81,18 @@ public class ProjectController {
return CallBack.success(vo);
}
@ApiOperation(value = "项目工时分类列表",notes = "项目工时分类列表")
@ApiOperation(value = "出版社项目工时分类列表",notes = "出版社项目工时分类列表")
@GetMapping("/project_time/page")
public CallBack<PageInfo<StatisticsProject>> projects(ProjectPageForm form,PageParam pageParam) {
public CallBack<PageInfo<PublisherProjectVo>> projects(ProjectPageForm form,PageParam pageParam) {
if (StringUtils.isEmpty(form.getStr())) {
form.setStr("all");
}
return CallBack.success(spService.queryProjectList1(form,pageParam));
}
@ApiOperation(value = "项目工时",notes = "项目工时")
@GetMapping("projectTime/page")
public CallBack<PageInfo<StatisticsProject>> projectTime(ProjectPageForm form,PageParam pageParam) {
if (StringUtils.isEmpty(form.getStr())) {
form.setStr("all");
}
......
......@@ -9,6 +9,7 @@ import org.apache.ibatis.annotations.Select;
import com.zrqx.core.form.project.ProjectPageForm;
import com.zrqx.core.form.project.StatisticsTaskTimeForm;
import com.zrqx.core.mapper.BaseMapper;
import com.zrqx.core.model.project.PublisherProjectVo;
import com.zrqx.core.model.project.StatisticsProject;
import com.zrqx.core.model.project.Team;
import com.zrqx.core.model.statistics.StatisticsTaskTime;
......@@ -31,6 +32,11 @@ public interface StatisticsProjectMapper extends BaseMapper<StatisticsProject> {
+ " LEFT JOIN zt_task t ON p.id= t.project "
+ " where 1=1 "
+ " AND p.DELETEd = '0' and (t.status='done') AND t.deleted = '0' "
//出版社
+ "<if test = '" + NOTBLANK + "(form.publisherName)'> "
+ "AND p.desc = #{form.publisherName} "
+ "</if>"
// 项目名称
+ "<if test = '" + NOTBLANK + "(form.project)'> "
+ "AND p.name like concat('%',#{form.project},'%') "
......@@ -51,6 +57,16 @@ public interface StatisticsProjectMapper extends BaseMapper<StatisticsProject> {
+ "</script>")
List<StatisticsProject> queryProjectList(@Param("form") ProjectPageForm form);
@Select("<script>"
+ "select p.desc as publisherName FROM zt_project p where 1=1 "
+ "AND p.DELETEd = '0' "
+ "<if test = '" + NOTBLANK + "(publisherName)'> "
+ "and p.desc = #{publisherName} "
+ "</if>"
+ "group by p.desc "
+ "</script>")
List<PublisherProjectVo> selectProject(@Param("publisherName")String publisherName);
@Select("SELECT count(b.id) FROM zt_projectproduct pp,zt_bug b WHERE pp.product=b.product AND pp.project = #{id} AND b.deleted = '0'")
Integer queryBugCountByProject(Integer id);
......@@ -61,6 +77,18 @@ public interface StatisticsProjectMapper extends BaseMapper<StatisticsProject> {
List<Team> queryTeamByProjectV1(Integer id);
@Select("<script>"
+ "SELECT u.id as userId ,t.root,u.realname NAME,SUM(t.days*t.hours) AS sumHours,t.days,t.hours "
+ "FROM zt_team t "
+ "left join zt_user u on t.account = u.account "
+ "left join zt_dept d on d.id = u.dept "
+ "WHERE 1=1 "
+ "AND t.root = #{id} "
+ " eq(d.name,department) "
+ "GROUP BY u.id "
+ "</script>")
List<Team> queryTeamByProjectV2(@Param("id")Integer id,@Param("department")String department);
@Select("<script>"
+ "select p.id,p.name project,u.realname name,SUM(t.estimate) usableHours,SUM(t.consumed) usedHours, "
+ "p.status,p.closedDate,p.canceledDate FROM "
+ "zt_project p,zt_task t,zt_user u WHERE p.id = t.project "
......@@ -75,7 +103,7 @@ public interface StatisticsProjectMapper extends BaseMapper<StatisticsProject> {
+ "</if>"
// 项目状态
+ "<if test = '" + NOTBLANK + "(form.name)'> "
+ "AND p.status = #{form.status} "
+ " AND p.status = #{form.status} "
+ "</if>"
+ "GROUP BY p.id ORDER BY p.openedDate DESC "
+ "</script>")
......@@ -164,7 +192,7 @@ public interface StatisticsProjectMapper extends BaseMapper<StatisticsProject> {
List<EchartsDataYearsVo> selectEChartsDataYs(@Param("name")String name);
@Select("<script>"
+ "SELECT SUM(t.estimate) AS sumHours,t.project AS id,u.realname as account,p.name,ui.level FROM zt_task t "
+ "SELECT SUM(t.estimate) AS sumHours,t.project AS id,u.realname as account,p.name,ui.level,p.desc as publisher FROM zt_task t "
+ "LEFT JOIN zt_user u ON t.finishedBy=u.account "
+ "LEFT JOIN zt_project p ON t.project = p.id "
+ "LEFT JOIN user_info ui ON u.id = ui.userId "
......
......@@ -4,6 +4,7 @@ import java.util.List;
import com.zrqx.core.form.project.ProjectPageForm;
import com.zrqx.core.form.project.StatisticsTaskTimeForm;
import com.zrqx.core.model.project.PublisherProjectVo;
import com.zrqx.core.model.project.StatisticsProject;
import com.zrqx.core.model.project.Team;
import com.zrqx.core.model.statistics.StatisticsTaskTime;
......@@ -16,7 +17,7 @@ import com.zrqx.core.vo.index.ProjectTotalInfoVo;
import com.zrqx.core.vo.project.ProjectPageVo;
public interface StatisticsProjectService extends BaseService<StatisticsProject,String> {
PageInfo<StatisticsProject> queryProjectList(ProjectPageForm form,PageParam pageParam);
PageInfo<PublisherProjectVo> queryProjectList1(ProjectPageForm form,PageParam pageParam);
Integer queryBugCountByProject(Integer id);
List<Team> queryTeamByProject(Integer id);
......@@ -40,7 +41,7 @@ public interface StatisticsProjectService extends BaseService<StatisticsProject,
* @date: 2019年11月12日 下午3:28:29
*/
EchartsDataVo selectEChartsData();
PageInfo<StatisticsProject> queryProjectList(ProjectPageForm form,PageParam pageParam);
List<StatisticsProject> queryProjectList();
List<StatisticsTaskTime> queryProjectSplitData(StatisticsTaskTimeForm form);
int selectByCount(Integer id);
......
......@@ -22,10 +22,12 @@ import com.zrqx.core.enums.ProjectStatusEnum;
import com.zrqx.core.form.project.ProjectPageForm;
import com.zrqx.core.form.project.StatisticsTaskTimeForm;
import com.zrqx.core.mapper.BaseMapper;
import com.zrqx.core.model.project.PublisherProjectVo;
import com.zrqx.core.model.project.StatisticsProject;
import com.zrqx.core.model.project.Team;
import com.zrqx.core.model.statistics.StatisticsTaskTime;
import com.zrqx.core.service.BaseServiceImpl;
import com.zrqx.core.util.delHtmlTags.DelHtmlTagsUtils;
import com.zrqx.core.util.page.PageInfo;
import com.zrqx.core.util.page.PageParam;
import com.zrqx.core.vo.echart.EchartsDataDaysVo;
......@@ -105,6 +107,42 @@ public class StatisticsProjectServiceImpl extends BaseServiceImpl<StatisticsProj
}
return new PageInfo<StatisticsProject>(null);
}
@Override
public PageInfo<PublisherProjectVo> queryProjectList1(ProjectPageForm form,PageParam pageParam) {
//开启分页
startPage(pageParam);
// 查询所有项目
List<PublisherProjectVo> pList = mapper.selectProject(form.getPublisherName());
pList.forEach(vo ->{
String publisher = DelHtmlTagsUtils.getTextFromHtml(vo.getPublisherName());
vo.setPublisherName(publisher);
form.setPublisherName(vo.getPublisherName());
List<StatisticsProject> list = mapper.queryProjectList(form);
vo.setSumProjectNum(list.size());
int deveFinishNum = 0;//已验收项目数
int doingNum = 0;//进行中项目数
for (StatisticsProject s : list) {
List<Team> teams = mapper.queryTeamByProject(s.getId());
DoubleSummaryStatistics collect = teams.parallelStream().collect(Collectors.summarizingDouble(a -> a.getDays() * a.getHours()));
String status1 = mapper.selectStatus1ForId(s.getId());
if (ProjectManagementStatusEnum.getCode("验收完成").equals(status1)) {
deveFinishNum = deveFinishNum + 1;
}
s.setStatus1Zh(ProjectManagementStatusEnum.getName(status1));
s.setSumHours(collect.getSum());
s.setBugs(mapper.queryBugCountByProject(s.getId()));
s.setStatusZh(ProjectStatusEnum.getName(s.getStatus()));
if (s.getName() == null) {
s.setName("admin");
}
}
doingNum = list.size() - deveFinishNum;
vo.setDoingNum(doingNum);
vo.setList(list);
});
return new PageInfo<PublisherProjectVo>(pList);
}
@Override
......@@ -481,21 +519,28 @@ public class StatisticsProjectServiceImpl extends BaseServiceImpl<StatisticsProj
Integer months = getMonth(form.getStartTime(),form.getEndTime());
vo.setLevel(vo.getLevel() * months);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
String publisher = DelHtmlTagsUtils.getTextFromHtml(vo.getPublisher());
vo.setPublisher(publisher);
List<Team> teams = mapper.queryTeamByProjectSplit(vo.getId(),vo.getAccount());
DoubleSummaryStatistics collect = teams.parallelStream().collect(Collectors.summarizingDouble(a -> a.getDays() * a.getHours()));
double canUseTime = new BigDecimal(collect.getSum()).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
vo.setCanUseTime(canUseTime);
// 最高可用bug工时 = 可用工时 * 20%
double maxBugTime = new BigDecimal(collect.getSum()).multiply(new BigDecimal(0.2)).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
double totalCanUseTime = new BigDecimal(collect.getSum()).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
StatisticsTaskTime query = new StatisticsTaskTime();
query.setAccount(vo.getAccount());
query.setId(vo.getId());
StatisticsTaskTime totalData = mapper.queryProjectSplitTotalData(query);
Double totalSumHours = totalData.getTotalSumHours();
Double totalSumHours1 = totalData.getTotalSumHours();
//剩余可用工时
double canUseTime = new BigDecimal(totalCanUseTime).subtract(new BigDecimal(totalSumHours1)).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
//剩余可用工时小于0时为0;
canUseTime = canUseTime < 0 ? 0 :canUseTime;
vo.setCanUseTime(canUseTime);
// 最高可用bug工时 = 可用工时 * 20%
double maxBugTime = new BigDecimal(collect.getSum()).multiply(new BigDecimal(0.2)).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
Double totalSumHours = vo.getSumHours();
//总预计工时可能大于可用工时
if (totalSumHours > canUseTime) {//预计大于可用
double invalidTime = new BigDecimal(totalSumHours).subtract(new BigDecimal(canUseTime)).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论