From 9df5fcf6974977866bd73551e35961f849a625b2 Mon Sep 17 00:00:00 2001
From: zm <2369059705qq.com>
Date: 星期二, 23 七月 2024 18:03:59 +0800
Subject: [PATCH] 项目立项和项目进度汇报

---
 src/main/java/com/product/contract/controller/ProjectScheduleController.java |   76 ++++++++++
 src/main/java/com/product/contract/service/ProjectScheduleService.java       |  156 ++++++++++++++++++++++
 src/main/java/com/product/contract/config/CmnConst.java                      |    5 
 src/main/java/com/product/contract/controller/ProjectBusinessController.java |   93 +++++++++++++
 src/main/java/com/product/contract/service/ide/IProjectBusinessService.java  |   11 +
 src/main/java/com/product/contract/config/SystemCode.java                    |    3 
 src/main/java/com/product/contract/service/ProjectBusinessService.java       |   65 +++++++++
 7 files changed, 409 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/product/contract/config/CmnConst.java b/src/main/java/com/product/contract/config/CmnConst.java
index 6373b73..5151e40 100644
--- a/src/main/java/com/product/contract/config/CmnConst.java
+++ b/src/main/java/com/product/contract/config/CmnConst.java
@@ -20,6 +20,11 @@
     public static final String LX_PROJECT_TASK_ALLOCATION = "product_project_task_allocation"; //浠诲姟鍒嗛厤琛�
     public static final String LX_PROJECT_TASK_ALLOCATION_SUB = "product_project_task_allocation_sub"; //浠诲姟鍒嗛厤琛�
     public static final String LX_PROJECT_TASK_PROGRESS = "product_project_task_progress"; //浠诲姟杩涘害琛�
+    public static final String PRODUCT_PROJECT_SCHEDULE = "product_project_schedule";//浠诲姟杩涘害
+
+    public static final String PRODUCT_PROJECT_BUSINESS = "product_project_business";//椤圭洰琛�
+    public static final String PRODUCT_PROJECT_BUSINESS_PLAN = "product_project_business_plan";//椤圭洰璁″垝琛�
+    public static final String PRODUCT_PROJECT_MANAGER_DATA_LIST = "product_project_manager_data_list";//璧勬枡琛�
 
     //甯搁噺瀹氫箟
     public static final String UUID = "uuid"; // uuid
diff --git a/src/main/java/com/product/contract/config/SystemCode.java b/src/main/java/com/product/contract/config/SystemCode.java
index f3f0386..2ab41d3 100644
--- a/src/main/java/com/product/contract/config/SystemCode.java
+++ b/src/main/java/com/product/contract/config/SystemCode.java
@@ -85,6 +85,9 @@
     SYSTEM_SAVE_TASK_PROGRESS_FAIL("淇濆瓨浠诲姟杩涘害澶辫触", ModuleEnum.CONTRACT.getValue() + "043"),
     SYSTEM_LIST_TASK_PROGRESS_FAIL("鑾峰彇浠诲姟杩涘害鍒楄〃澶辫触", ModuleEnum.CONTRACT.getValue() + "044"),
     SYSTEM_GET_TASK_PROGRESS_FAIL("鑾峰彇浠诲姟杩涘害璇︽儏澶辫触", ModuleEnum.CONTRACT.getValue() + "045"),
+    PROJECT_SCHEDULE_OPERATE_FAIL("椤圭洰杩涘害淇℃伅鎿嶄綔澶辫触锛�", ModuleEnum.CONTRACT.getValue() +"046"),
+    PROJECT_SCHEDULE_SAVE_FAIL("椤圭洰杩涘害淇濆瓨澶辫触", ModuleEnum.CONTRACT.getValue() +"047"),
+
     ;
 
     private String text;
diff --git a/src/main/java/com/product/contract/controller/ProjectBusinessController.java b/src/main/java/com/product/contract/controller/ProjectBusinessController.java
new file mode 100644
index 0000000..0f85c62
--- /dev/null
+++ b/src/main/java/com/product/contract/controller/ProjectBusinessController.java
@@ -0,0 +1,93 @@
+package com.product.contract.controller;
+
+import com.product.contract.config.CmnConst;
+import com.product.contract.config.SystemCode;
+import com.product.contract.service.ProjectBusinessService;
+import com.product.contract.service.ide.IProjectBusinessService;
+import com.product.core.config.CoreConst;
+import com.product.core.controller.support.AbstractBaseController;
+import com.product.core.entity.FieldSetEntity;
+import com.product.core.entity.RequestParameterEntity;
+import com.product.core.exception.BaseException;
+import com.product.core.spring.context.SpringMVCContextHolder;
+import com.product.module.sys.version.ApiVersion;
+import com.product.util.BaseUtil;
+import com.product.util.ResultInfo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+
+@RequestMapping("/api/project/business")
+@RestController
+public class ProjectBusinessController extends AbstractBaseController {
+
+	@Autowired
+	ProjectBusinessService projectBusinessService;
+	/**
+	 * 	椤圭洰绔嬮」璇︽儏
+	 * @param request
+	 * @return
+	 */
+	@RequestMapping(value="/find/{version}", method = RequestMethod.POST)
+	@ApiVersion(1)
+	public String find(HttpServletRequest request) {
+		try {
+			//鑾峰彇鍙傛暟
+			FieldSetEntity fse = null;
+			Object bean = request.getAttribute(CoreConst.API_POST_REQUEST_DATA);
+			if (bean != null) {
+				RequestParameterEntity reqp = (RequestParameterEntity) bean;
+				fse = reqp.getFormData();
+			}
+			// 鍒ゆ柇鍙傛暟鏄惁涓虹┖
+			if (bean == null || fse == null) {
+				SpringMVCContextHolder.getSystemLogger().error(SystemCode.SYSTEM_FORM_NODATA.getValue(),
+						SystemCode.SYSTEM_FORM_NODATA.getText());
+				return this.error(SystemCode.SYSTEM_FORM_NODATA.getValue(), SystemCode.SYSTEM_FORM_NODATA.getText());
+			}
+			// 鍒ゆ柇uuid鏄惁涓虹┖
+			if (com.alibaba.druid.util.StringUtils.isEmpty(fse.getString(CmnConst.UUID))) {
+				SpringMVCContextHolder.getSystemLogger().error(SystemCode.SYSTEM_FORM_COUNT.getValue(),
+						SystemCode.SYSTEM_FORM_COUNT.getText());
+				return this.error(SystemCode.SYSTEM_FORM_COUNT.getValue(), SystemCode.SYSTEM_FORM_COUNT.getText());
+			}
+			return ResultInfo.success(projectBusinessService.findProject(fse));
+		} catch (BaseException e) {
+			e.printStackTrace();
+			return error(e);
+		} catch (Exception e) {
+			e.printStackTrace();
+			return error(SystemCode.SYSTEM_FIND_CONTRACT_PROJECT_FAIL.getValue(), SystemCode.SYSTEM_FIND_CONTRACT_PROJECT_FAIL.getText() + e.getMessage());
+		}
+	}
+	/**
+	 * 	椤圭洰绔嬮」淇濆瓨
+	 * @param request
+	 * @return
+	 */
+	@RequestMapping(value="/save/{version}", method = RequestMethod.POST)
+	@ApiVersion(1)
+	public String save(HttpServletRequest request) {
+		try {
+			//鑾峰彇鍙傛暟
+			FieldSetEntity fse = BaseUtil.getFieldSetEntity(request, CmnConst.PRODUCT_PROJECT_SCHEDULE);
+			IProjectBusinessService service = (IProjectBusinessService) getProxyInstance(projectBusinessService);
+
+			boolean succ = service.saveProject(fse);
+			if (succ) {
+				return OK();
+			}
+			return error(SystemCode.SYSTEM_SAVE_PROJECT_FAIL.getValue(), SystemCode.SYSTEM_SAVE_PROJECT_FAIL.getText());
+		} catch (BaseException e) {
+			e.printStackTrace();
+			return error(e);
+		} catch (Exception e) {
+			e.printStackTrace();
+			return error(SystemCode.SYSTEM_SAVE_PROJECT_FAIL.getValue(), SystemCode.SYSTEM_SAVE_PROJECT_FAIL.getText() + e.getMessage());
+		}
+	}
+
+}
diff --git a/src/main/java/com/product/contract/controller/ProjectScheduleController.java b/src/main/java/com/product/contract/controller/ProjectScheduleController.java
new file mode 100644
index 0000000..ce1f4b9
--- /dev/null
+++ b/src/main/java/com/product/contract/controller/ProjectScheduleController.java
@@ -0,0 +1,76 @@
+package com.product.contract.controller;
+
+import com.product.contract.service.ProjectScheduleService;
+import com.product.core.controller.support.AbstractBaseController;
+import com.product.core.entity.FieldSetEntity;
+import com.product.core.exception.BaseException;
+import com.product.module.sys.version.ApiVersion;
+import com.product.util.BaseUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+import com.product.contract.config.CmnConst;
+import com.product.contract.config.SystemCode;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ *	椤圭洰杩涘害 	
+ *
+ */
+@RequestMapping("/api/project-schedule")
+@RestController
+public class ProjectScheduleController extends AbstractBaseController{
+
+	@Autowired
+	ProjectScheduleService projectScheduleService;
+	
+
+	
+	/**
+	 * 	涓汉椤圭洰杩涘害
+	 * @param request
+	 * @return
+	 */
+	@RequestMapping(value="/list/{version}", method = RequestMethod.POST)
+	@ApiVersion(1)
+	public String listProjectSchedule(HttpServletRequest request) {
+		try {
+			//鑾峰彇鍙傛暟
+			FieldSetEntity fse = BaseUtil.getFieldSetEntity(request, CmnConst.PRODUCT_PROJECT_SCHEDULE);
+			return OK_List(projectScheduleService.getList());
+		} catch (BaseException e) {
+			e.printStackTrace();
+			return error(e);
+		} catch (Exception e) {
+			e.printStackTrace();
+			return error(SystemCode.PROJECT_SCHEDULE_OPERATE_FAIL.getValue(), SystemCode.PROJECT_SCHEDULE_OPERATE_FAIL.getText() + e.getMessage());
+		}
+	}
+	
+	/**
+	 * 	涓汉椤圭洰杩涘害淇濆瓨
+	 * @param request
+	 * @return
+	 */
+	@RequestMapping(value="/save/{version}", method = RequestMethod.POST)
+	@ApiVersion(1)
+	public String save(HttpServletRequest request) {
+		try {
+			//鑾峰彇鍙傛暟
+			FieldSetEntity fse = BaseUtil.getFieldSetEntity(request, CmnConst.PRODUCT_PROJECT_SCHEDULE);
+			boolean succ = projectScheduleService.save(fse.getSubDataTable(CmnConst.PRODUCT_PROJECT_SCHEDULE));
+			if (succ) {
+				return OK();
+			}
+			return error(SystemCode.PROJECT_SCHEDULE_SAVE_FAIL.getValue(), SystemCode.PROJECT_SCHEDULE_SAVE_FAIL.getText());
+		} catch (BaseException e) {
+			e.printStackTrace();
+			return error(e);
+		} catch (Exception e) {
+			e.printStackTrace();
+			return error(SystemCode.PROJECT_SCHEDULE_OPERATE_FAIL.getValue(), SystemCode.PROJECT_SCHEDULE_OPERATE_FAIL.getText() + e.getMessage());
+		}
+	}
+}
diff --git a/src/main/java/com/product/contract/service/ProjectBusinessService.java b/src/main/java/com/product/contract/service/ProjectBusinessService.java
new file mode 100644
index 0000000..d18dd2e
--- /dev/null
+++ b/src/main/java/com/product/contract/service/ProjectBusinessService.java
@@ -0,0 +1,65 @@
+package com.product.contract.service;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.product.contract.config.CmnConst;
+import com.product.contract.service.ide.IProjectBusinessService;
+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.transfer.Transactional;
+import com.product.util.BaseUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class ProjectBusinessService extends AbstractBaseService implements IProjectBusinessService {
+
+	@Autowired
+	public BaseDao baseDao;
+
+	@Override
+	public JSONObject findProject(FieldSetEntity fse) {
+		FieldSetEntity fsData = baseDao.getFieldSet(CmnConst.PRODUCT_PROJECT_BUSINESS, fse.getUUID(), false);
+		//灏佽椤圭洰璁″垝鏁版嵁鎺ュ彛
+		JSONObject json = new JSONObject();
+		DataTableEntity planData=baseDao.listTable(CmnConst.PRODUCT_PROJECT_BUSINESS_PLAN,"project_uuid=?",new String[]{fse.getUUID()});
+		for (int i = 0; i <planData.getRows() ; i++) {
+			FieldSetEntity fs = planData.getFieldSetEntity(i);
+			JSONObject jsonObject = BaseUtil.fieldSetEntityToJson(fs);
+			JSONArray projectTask = json.getJSONArray(fs.getString("project_task"));
+			if (projectTask==null){
+				JSONArray objects = new JSONArray();
+				objects.add(jsonObject);
+				json.put(fs.getString("project_task"),objects);
+			}else {
+				projectTask.add(jsonObject);
+			}
+		}
+		JSONObject rejson=BaseUtil.fieldSetEntityToJson(fsData);
+		rejson.put(CmnConst.PRODUCT_PROJECT_BUSINESS_PLAN,json);
+		//灏佽椤圭洰杩涘害鏁版嵁缁撴瀯
+		DataTableEntity scheduleDt =baseDao.listTable("select  project_task_sub,a.*  from product_project_schedule a\n" +
+				"LEFT JOIN product_project_business_plan b  on a.business_sub_uuid =b.uuid\n" +
+				"where b.project_uuid=? order by a.business_sub_uuid,a.reporting_time",new String[]{fse.getUUID()});
+
+		rejson.put(CmnConst.PRODUCT_PROJECT_SCHEDULE,BaseUtil.dataTableEntityToJson(scheduleDt));
+        //灏佽璧勬枡鏁版嵁缁撴瀯
+		DataTableEntity dataList = baseDao.listTable(CmnConst.PRODUCT_PROJECT_MANAGER_DATA_LIST, "project_type=?", new String[]{fsData.getString("project_type")});
+		rejson.put(CmnConst.PRODUCT_PROJECT_MANAGER_DATA_LIST,BaseUtil.dataTableEntityToJson(dataList));
+		return rejson;
+	}
+
+
+	@Transactional
+	@Override
+	public boolean saveProject(FieldSetEntity fse) {
+		boolean b = baseDao.saveFieldSetEntity(fse);
+//		if (b){
+//			DataTableEntity dt = fse.getSubDataTable(CmnConst.PRODUCT_PROJECT_MANAGER_DATA_LIST);
+//			return baseDao.update(dt);
+//		}
+		return b;
+	}
+}
diff --git a/src/main/java/com/product/contract/service/ProjectScheduleService.java b/src/main/java/com/product/contract/service/ProjectScheduleService.java
new file mode 100644
index 0000000..9a0f662
--- /dev/null
+++ b/src/main/java/com/product/contract/service/ProjectScheduleService.java
@@ -0,0 +1,156 @@
+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");
+		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 {
+					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);
+				}
+				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;
+	}
+	/**
+	 * 	椤圭洰鏈綊妗e師鍥犱繚瀛�
+	 * @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;
+	}
+}
diff --git a/src/main/java/com/product/contract/service/ide/IProjectBusinessService.java b/src/main/java/com/product/contract/service/ide/IProjectBusinessService.java
new file mode 100644
index 0000000..e8921b6
--- /dev/null
+++ b/src/main/java/com/product/contract/service/ide/IProjectBusinessService.java
@@ -0,0 +1,11 @@
+package com.product.contract.service.ide;
+
+import com.alibaba.fastjson.JSONObject;
+import com.product.core.entity.FieldSetEntity;
+
+public interface IProjectBusinessService {
+
+	JSONObject findProject(FieldSetEntity fse);
+
+	boolean saveProject(FieldSetEntity fse);
+}

--
Gitblit v1.9.2