package com.product.contract.service;
|
|
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONObject;
|
import com.product.common.lang.StringUtils;
|
import com.product.core.config.CoreConst;
|
import com.product.core.dao.BaseDao;
|
import com.product.core.entity.DataTableEntity;
|
import com.product.core.entity.FieldSetEntity;
|
import com.product.core.service.support.AbstractBaseService;
|
import com.product.core.spring.context.SpringMVCContextHolder;
|
import com.product.util.BaseUtil;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import java.time.LocalDateTime;
|
import java.time.format.DateTimeFormatter;
|
import java.util.Date;
|
import java.util.LinkedHashMap;
|
import java.util.Map;
|
|
@Service
|
public class ProjectScheduleService extends AbstractBaseService {
|
@Autowired
|
BaseDao baseDao;
|
|
/**
|
* 后端处理项目进度列表
|
* @return
|
*/
|
public DataTableEntity getList() {
|
String curUserId = SpringMVCContextHolder.getCurrentUserId();
|
StringBuilder sql = new StringBuilder();
|
sql.append("SELECT c.uuid,a.uuid business_uuid,b.uuid business_sub_uuid,a.project_name project_name,b.project_task_sub,c.reporter,c.reporting_time,c.reporting_content,c.progress_rate \n");
|
sql.append("FROM product_project_business a \n");
|
sql.append("LEFT JOIN product_project_business_plan b ON a.uuid=b.project_uuid\n");
|
sql.append("LEFT JOIN product_project_schedule c on b.uuid=c.business_sub_uuid\n");
|
sql.append("WHERE a.project_name is not null \n");
|
sql.append("AND (CONCAT(',',a.team_members,',') LIKE ? OR a.group_leader = ?) \n");
|
sql.append("ORDER BY a.project_name,b.start_date,c.reporting_time");
|
DataTableEntity dt = baseDao.listTable(sql.toString(), new String[]{"%," + curUserId + ",%", curUserId});
|
baseDao.loadPromptData(dt);
|
JSONObject projectJsob = new JSONObject(new LinkedHashMap<>());
|
for (int i = 0; i < dt.getRows(); i++) {
|
FieldSetEntity fs = dt.getFieldSetEntity(i);
|
JSONObject subJsob = projectJsob.getJSONObject(fs.getString("business_uuid"));
|
if (subJsob==null){
|
subJsob=new JSONObject(new LinkedHashMap<>());
|
JSONArray arr = new JSONArray();
|
arr.add(BaseUtil.fieldSetEntityToJson(fs));
|
subJsob.put(fs.getString("business_sub_uuid"), arr);
|
projectJsob.put(fs.getString("business_uuid"),subJsob);
|
}else {
|
JSONArray arr = subJsob.getJSONArray(fs.getString("business_sub_uuid"));
|
if (arr==null){
|
arr = new JSONArray();
|
arr.add(BaseUtil.fieldSetEntityToJson(fs));
|
subJsob.put(fs.getString("business_sub_uuid"),arr);
|
}else {
|
arr.add(BaseUtil.fieldSetEntityToJson(fs));
|
}
|
}
|
}
|
// 获取当前时间
|
LocalDateTime now = LocalDateTime.now();
|
|
// 定义时间格式
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
// 将当前时间格式化为字符串
|
String timeString = now.format(formatter);
|
|
|
//总数居
|
DataTableEntity data = new DataTableEntity();
|
for (Map.Entry<String, Object> key : projectJsob.entrySet()) {
|
//计算
|
int num=0;
|
//大项目下的数据
|
DataTableEntity d = new DataTableEntity();
|
|
JSONObject subJsob=projectJsob.getJSONObject(key.getKey());
|
for (Map.Entry<String, Object> entry : subJsob.entrySet()) {
|
//获取子项目下的数组数据
|
JSONArray jsonArray = subJsob.getJSONArray(entry.getKey());
|
/**
|
* 判定是否新增数据
|
*/
|
if (jsonArray.size()==1&&jsonArray.getJSONObject(0).getString("uuid")==null){
|
num=num+1;
|
JSONObject json = jsonArray.getJSONObject(0);
|
json.put("reporter", SpringMVCContextHolder.getCurrentUser().getUser_name());
|
json.put("reporting_time", timeString);
|
json.put("number1", 1);
|
|
}else {
|
String progressRate = jsonArray.getJSONObject(jsonArray.size() - 1).getString("progress_rate");
|
if (!progressRate.equals("100%")){
|
jsonArray.getJSONObject(0).put("number1",jsonArray.size()+1);
|
num=num+jsonArray.size()+1;
|
|
//新增颗填写数据
|
JSONObject j = new JSONObject();
|
j.put("business_uuid",jsonArray.getJSONObject(0).getString("business_uuid"));
|
j.put("business_sub_uuid",jsonArray.getJSONObject(0).getString("business_sub_uuid"));
|
j.put("project_name",jsonArray.getJSONObject(0).getString("project_name"));
|
j.put("project_task_sub",jsonArray.getJSONObject(0).getString("project_task_sub"));
|
j.put("reporter", SpringMVCContextHolder.getCurrentUser().getUser_name());
|
j.put("reporting_time", timeString);
|
jsonArray.add(j);
|
}else {
|
jsonArray.getJSONObject(0).put("number1",jsonArray.size());
|
num=num+jsonArray.size();
|
}
|
}
|
for (int i = 0; i <jsonArray.size() ; i++) {
|
JSONObject a = jsonArray.getJSONObject(i);
|
FieldSetEntity fs = new FieldSetEntity();
|
fs.setTableName("product_project_unfiled");
|
fs.setValue("uuid",a.getString("uuid"));
|
fs.setValue("business_uuid",a.getString("business_uuid"));
|
fs.setValue("business_sub_uuid",a.getString("business_sub_uuid"));
|
fs.setValue("project_name",a.getString("project_name"));
|
fs.setValue("project_task_sub",a.getString("project_task_sub"));
|
fs.setValue("reporter",a.getString("reporter"));
|
fs.setValue("reporting_time",a.getString("reporting_time"));
|
fs.setValue("reporting_content",a.getString("reporting_content"));
|
fs.setValue("progress_rate",a.getString("progress_rate"));
|
if (!StringUtils.isEmpty(a.getString("number1"))) {
|
fs.setValue("number1", a.getInteger("number1"));
|
}
|
d.addFieldSetEntity(fs);
|
}
|
}
|
d.setFieldValue(0,"number",num);
|
data.addFieldSetEntity(d);
|
}
|
return data;
|
}
|
/**
|
* 项目未归档原因保存
|
* @param dt
|
* @return
|
*/
|
public boolean save(DataTableEntity dt){
|
boolean re=true;
|
for (int i = 0; i < dt.getRows(); i++) {
|
FieldSetEntity fs = dt.getFieldSetEntity(i);
|
if (StringUtils.isEmpty(fs.getString(CoreConst.UUID))&&(!StringUtils.isEmpty(fs.getString("reporting_content"))||!StringUtils.isEmpty(fs.getString("progress_rate")))){
|
fs.setValue("org_level_uuid", SpringMVCContextHolder.getCurrentUser().getOrg_level_uuid());
|
fs.setValue("created_by", SpringMVCContextHolder.getCurrentUser().getUser_id());
|
fs.setValue("created_utc_datetime",new Date());
|
fs.setValue("reporter",SpringMVCContextHolder.getCurrentUser().getUser_id());
|
|
boolean a = baseDao.saveFieldSetEntity(fs);
|
if (!a) re= false;
|
}
|
}
|
return re;
|
}
|
}
|