Jelajahi Sumber

Merge remote-tracking branch 'origin/master'

[user3] 3 tahun lalu
induk
melakukan
bb8f2276e5

+ 9 - 0
src/main/java/com/jeeplus/modules/projectrecord/entity/ProjectRecords.java

@@ -137,6 +137,7 @@ public class ProjectRecords extends ActEntity<ProjectRecords> {
 
 
 	private String details;   //开票-非项目开票详情
+	private String planAttachmentId;   //项目计划附件id
 
 
 	public ProjectRecords() {
@@ -804,4 +805,12 @@ public class ProjectRecords extends ActEntity<ProjectRecords> {
 	public void setDetails(String details) {
 		this.details = details;
 	}
+
+	public String getPlanAttachmentId() {
+		return planAttachmentId;
+	}
+
+	public void setPlanAttachmentId(String planAttachmentId) {
+		this.planAttachmentId = planAttachmentId;
+	}
 }

+ 87 - 0
src/main/java/com/jeeplus/modules/projectrecord/service/ProjectPlanService.java

@@ -2,15 +2,22 @@ package com.jeeplus.modules.projectrecord.service;
 
 
 import com.jeeplus.common.service.CrudService;
+import com.jeeplus.common.utils.MyBeanUtils;
+import com.jeeplus.common.utils.ResponseUtil;
 import com.jeeplus.common.utils.StringUtils;
+import com.jeeplus.common.utils.excel.ExportExcel;
+import com.jeeplus.modules.projectAccessory.dao.ProjectTemplateDao;
+import com.jeeplus.modules.projectAccessory.entity.ProjectTemplateInfo;
 import com.jeeplus.modules.projectrecord.dao.ProjectPlanDao;
 import com.jeeplus.modules.projectrecord.entity.ProjectPlanInfo;
 import com.jeeplus.modules.projectrecord.entity.ProjectRecords;
 import com.jeeplus.modules.ruralprojectrecords.entity.RuralProjectRecords;
 import com.jeeplus.modules.ruralprojectrecords.service.RuralProjectRecordsService;
 import com.jeeplus.modules.sys.entity.User;
+import com.jeeplus.modules.sys.entity.Workattachment;
 import com.jeeplus.modules.sys.service.WorkattachmentService;
 import com.jeeplus.modules.sys.utils.UserUtils;
+import com.jeeplus.modules.utils.SftpClientUtil;
 import com.jeeplus.modules.workclientinfo.dao.WorkClientAttachmentDao;
 import com.jeeplus.modules.workclientinfo.entity.WorkClientAttachment;
 import com.jeeplus.modules.workprojectnotify.service.WorkProjectNotifyService;
@@ -18,7 +25,9 @@ import com.jeeplus.modules.workprojectnotify.util.UtilNotify;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
 
+import java.io.File;
 import java.text.DateFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
@@ -36,6 +45,8 @@ public class ProjectPlanService extends CrudService<ProjectPlanDao, ProjectPlanI
     private WorkProjectNotifyService workProjectNotifyService;
     @Autowired
     private RuralProjectRecordsService ruralProjectRecordsService;
+    @Autowired
+    private ProjectTemplateDao projectTemplateDao;
 
 
     public List<ProjectPlanInfo> getProjectPlanList(ProjectPlanInfo projectPlanInfo){
@@ -54,6 +65,12 @@ public class ProjectPlanService extends CrudService<ProjectPlanDao, ProjectPlanI
 
     @Transactional(readOnly = false)
     public void saveProjectPlanInfo(ProjectRecords projectRecords) throws ParseException {
+        ProjectRecords projectRecord = ruralProjectRecordsService.getProjectRecords(projectRecords.getId());
+        projectRecord.setWorkAttachments(getWorkAttachment(projectRecord.getId()));
+
+        //项目计划生成excel文件并保存到项目档案信息中
+        //查询其他资料对应附件结构信息
+        ProjectTemplateInfo templateInfo = projectTemplateDao.getProjectTemplateInfoByName("咨询企业作业计划书或咨询实施规划及细则");
 
         Set masterIdSet = new HashSet();
         //项目计划信息
@@ -170,6 +187,9 @@ public class ProjectPlanService extends CrudService<ProjectPlanDao, ProjectPlanI
                 workClientAttachment.setAttachmentUser(UserUtils.getUser().getId());
                 if (StringUtils.isBlank(workClientAttachment.getId()) || "null".equals(workClientAttachment.getId())){
                     workattachmentService.insertOnWorkClientAttachment(workClientAttachment);
+                    workClientAttachment.setAttachmentId(templateInfo.getId());
+                    workClientAttachment.setProjectId(projectRecord.getId());
+                    workattachmentService.insertOnWorkClientAttachment(workClientAttachment);
                 }else{
                     workattachmentService.updateOnWorkClientAttachment(workClientAttachment);
                 }
@@ -177,6 +197,73 @@ public class ProjectPlanService extends CrudService<ProjectPlanDao, ProjectPlanI
                 workClientAttachmentDao.delete(workClientAttachment);
             }
         }
+
+
+
+        try {
+            MyBeanUtils.copyBeanNotNull2Bean(projectRecords, projectRecord);//将编辑表单中的非NULL值覆盖数据库记录中的值
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        try {
+            //文件名称
+            String fileName = "项目计划.xlsx";
+            String path = null;
+            if(System.getProperty("os.name").toLowerCase().contains("win")){
+                path = "D:/attachment-file/"+fileName;;
+            }else{
+                path = "/attachment-file/"+fileName;;
+            }
+            ProjectPlanInfo projectPlanInfo = new ProjectPlanInfo();
+            projectPlanInfo.setProjectId(projectRecord.getId());
+            //获取项目计划信息
+            List<ProjectPlanInfo> projectPlanList = this.getProjectPlanList(projectPlanInfo);
+            new ExportExcel("项目计划", ProjectPlanInfo.class).setDataList(projectPlanList).writeFile(path).dispose();
+            //本地项目计划信息生成file文件
+            File file = new File(path);
+            //File转MultipartFile文件
+            SftpClientUtil sftpClientUtil = new SftpClientUtil();
+            MultipartFile mFile = sftpClientUtil.transformFile(file);
+            //文件上传oss
+            String uploadPath = null;
+            try {
+                uploadPath = ResponseUtil.uploadOss(mFile, "reportRecord");
+            } catch (Exception e) {
+                e.printStackTrace();
+            }finally {
+                //删除本地文件
+                if (!file.isDirectory()) {
+                    file.delete();
+                }
+            }
+            if(StringUtils.isNotBlank(uploadPath)){
+                //将备考表添加到附件中
+                Workattachment workattachment = new Workattachment();
+                workattachment.setAttachmentId(templateInfo.getId());
+                workattachment.setProjectId(projectRecord.getId());
+                workattachment.setUrl(uploadPath);
+                workattachment.setType("xlsx");
+                workattachment.setAttachmentFlag("131");
+                workattachment.setAttachmentName("项目计划.xlsx");
+                workattachment.setAttachmentUser(UserUtils.getUser().getId());
+                workattachmentService.insertOnWorkAttachment(workattachment);
+
+                //判定上传的文件是否和已保存的附件id一样。不一样则将老数据删除
+                if (StringUtils.isNotBlank(projectRecord.getPlanAttachmentId()) && StringUtils.isNotBlank(workattachment.getId())) {
+                    if(!projectRecord.getPlanAttachmentId().equals(workattachment.getId())){
+                        workattachmentService.deleteById(projectRecord.getPlanAttachmentId());
+                    }
+                }
+                projectRecord.setPlanAttachmentId(workattachment.getId());
+                //修改项目计划附件id信息
+                ruralProjectRecordsService.updatePlanInfo(projectRecord);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+
+
     }
 
 }

+ 6 - 0
src/main/java/com/jeeplus/modules/ruralprojectrecords/dao/RuralProjectRecordsDao.java

@@ -198,4 +198,10 @@ public interface RuralProjectRecordsDao extends CrudDao<RuralProjectRecords> {
     //批量修改项目归档状态
     void updateProjectRecordState(@Param("idList") List<String> idList);
 
+    /**
+     * 修改项目计划附件id信息
+     * @param projectRecord
+     * @return
+     */
+    Integer updatePlanInfo(ProjectRecords projectRecord);
 }

+ 8 - 0
src/main/java/com/jeeplus/modules/ruralprojectrecords/service/RuralProjectRecordsService.java

@@ -2274,4 +2274,12 @@ public class RuralProjectRecordsService extends CrudService<RuralProjectRecordsD
 			dao.updateProjectReportedState(idList);
 		}
 	}
+
+	/**
+	 * 修改项目计划附件id信息
+	 * @param projectRecord
+	 */
+	public void updatePlanInfo(ProjectRecords projectRecord){
+		dao.updatePlanInfo(projectRecord);
+	}
 }

+ 23 - 0
src/main/java/com/jeeplus/modules/sys/service/WorkattachmentService.java

@@ -655,4 +655,27 @@ public class WorkattachmentService extends CrudService<WorkattachmentDao, Workat
 	public void deleteById(String id) {
 		dao.deleteById(id);
 	}
+
+
+
+	//删除附件
+	//阿里云文件地址http://gangwan-app.oss-cn-hangzhou.aliyuncs.com/attachment-file/workBidingDocument/3fcf03e37b3ba0fd5c7821998e392395.doc
+	//其中阿里云删除接口所需的参数 key 指的是 attachment-file/workBidingDocument/3fcf03e37b3ba0fd5c7821998e392395.doc
+	@Transactional(readOnly = false)
+	public void deleteFilesFromAliyun(Workattachment workattachment,String url) {
+		if(workattachment != null){
+			dao.deleteByUrl(workattachment);
+		}
+		if (StringUtils.isNotBlank(url)) {
+			try {
+				int index = url.indexOf(".com");
+				String 	path = URLDecoder.decode(url.substring(index + 4, url.length()), "UTF-8");
+				BOSClientUtil bosClientUtil = new BOSClientUtil();
+				bosClientUtil.deleteObject(path);
+			}catch (Exception e){
+				logger.error("Exception e:"+e);
+			}
+		}
+
+	}
 }

+ 35 - 0
src/main/java/com/jeeplus/modules/sys/web/WorkattachmentController.java

@@ -352,6 +352,41 @@ public class WorkattachmentController extends BaseController {
     }
 
 
+	/**
+	 * 删除多个附件文件
+	 * @param id
+	 * @param type
+	 * @param url
+	 * @param model
+	 * @return
+	 */
+	@RequestMapping("/deleteFilesFromAliyun")
+	@ResponseBody
+	public HashMap<Object, Object> deleteFilesFromAliyun(String id,String type,String url,Model model){
+		if(StringUtils.isNotBlank(id)) {
+			Workattachment workattachment = workattachmentService.get(id);
+			if("1".equals(uploadMode) || "2".equals(uploadMode)) {
+				workattachmentService.deleteFilesFromAliyun(workattachment, workattachment == null ? url : workattachment.getUrl());
+			}else{
+				SftpClientUtil sftpClientUtil=new SftpClientUtil();
+				try {
+					if(null != workattachment){
+						sftpClientUtil.delete(workattachment.getUrl());
+					}else{
+						sftpClientUtil.delete(url);
+					}
 
+					if(workattachment != null){
+						workattachmentService.delete(workattachment);
+					}
+				} catch (Exception e) {
+					e.printStackTrace();
+				}
+			}
+		}
+		HashMap<Object, Object> map = Maps.newHashMap();
+		map.put("str","success");
+		return map;
+	}
 
 }

+ 7 - 0
src/main/resources/mappings/modules/ruralprojectrecords/RuralProjectRecordsDao.xml

@@ -112,6 +112,7 @@
 	<select id="getProjectRecords" resultType="ProjectRecords" >
 		SELECT
 			<include refid="projectRecordsColumns"/>
+		,a.plan_attachment_id as "planAttachmentId"
         ,su.name AS "createBy.name"
         ,o.top_company AS "office.name"
         FROM rural_project_records a
@@ -1765,4 +1766,10 @@
 			#{item}
 		</foreach> ;
 	</update>
+
+	<update id="updatePlanInfo">
+		update rural_project_records set
+		plan_attachment_id = #{planAttachmentId}
+		where id = #{id}
+	</update>
 </mapper>

+ 1 - 1
src/main/webapp/webpage/modules/projectrecord/plan/projectPlanConsultingForm.jsp

@@ -422,7 +422,7 @@
                                         <c:if test="${workClientAttachment.collectFlag != 1}">
                                             <a href="javascript:void(0)" onclick="collectingAccessory(this,'${ctx}/projectAccessory/projectAccessory/saveCollectAccessory','${workClientAttachment.url}','${workClientAttachment.createBy.id}','${workClientAttachment.fileSize}')" class="op-btn op-btn-delete" style="background-color: #FFB800"><i class="layui-icon layui-icon-rate"></i>&nbsp;收藏</a>
                                         </c:if>
-                                        <a href="javascript:void(0)" onclick="deleteFileFromAliyun(this,'${ctx}/sys/workattachment/deleteFileFromAliyun?url=${workClientAttachment.url}&id=${workClientAttachment.id}&type=2','addFile')" class="op-btn op-btn-delete" ><i class="fa fa-trash"></i>&nbsp;删除</a>
+                                        <a href="javascript:void(0)" onclick="deleteFileFromAliyun(this,'${ctx}/sys/workattachment/deleteFilesFromAliyun?url=${workClientAttachment.url}&id=${workClientAttachment.id}&type=2','addFile')" class="op-btn op-btn-delete" ><i class="fa fa-trash"></i>&nbsp;删除</a>
 
 
                                     </div>

+ 1 - 1
src/main/webapp/webpage/modules/projectrecord/plan/projectPlanCostForm.jsp

@@ -423,7 +423,7 @@
                                         <c:if test="${workClientAttachment.collectFlag != 1}">
                                             <a href="javascript:void(0)" onclick="collectingAccessory(this,'${ctx}/projectAccessory/projectAccessory/saveCollectAccessory','${workClientAttachment.url}','${workClientAttachment.createBy.id}','${workClientAttachment.fileSize}')" class="op-btn op-btn-delete" style="background-color: #FFB800"><i class="layui-icon layui-icon-rate"></i>&nbsp;收藏</a>
                                         </c:if>
-                                        <a href="javascript:void(0)" onclick="deleteFileFromAliyun(this,'${ctx}/sys/workattachment/deleteFileFromAliyun?url=${workClientAttachment.url}&id=${workClientAttachment.id}&type=2','addFile')" class="op-btn op-btn-delete" ><i class="fa fa-trash"></i>&nbsp;删除</a>
+                                        <a href="javascript:void(0)" onclick="deleteFileFromAliyun(this,'${ctx}/sys/workattachment/deleteFilesFromAliyun?url=${workClientAttachment.url}&id=${workClientAttachment.id}&type=2','addFile')" class="op-btn op-btn-delete" ><i class="fa fa-trash"></i>&nbsp;删除</a>
 
                                     </div>
                                 </td>

File diff ditekan karena terlalu besar
+ 8 - 0
src/main/webapp/webpage/modules/ruralprojectrecords/view/projectPlanView.jsp