Эх сурвалжийг харах

不重复提醒小程序端,受控文件下载修正

baihe 3 жил өмнө
parent
commit
6d601eb9f3

+ 21 - 13
application-facade/src/main/java/com/factory/controller/web/FileBlobController.java

@@ -1,5 +1,24 @@
 package com.factory.controller.web;
 
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectOutputStream;
+import java.io.OutputStream;
+import java.nio.charset.StandardCharsets;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.poi.ss.usermodel.Workbook;
+import org.springframework.beans.factory.annotation.Autowired;
+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.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
 import com.factory.base.entity.aggregates.ResponseBean;
 import com.factory.base.util.res.ResponseBeanBuilder;
 import com.factory.web.entity.fa.FirstArticleTitle;
@@ -15,20 +34,9 @@ import com.factory.web.service.impl.FileEntry;
 import com.factory.web.service.impl.FileResultInfo;
 import com.factory.web.service.pm.OnsiteTitleBlobService;
 import com.factory.web.service.pm.PreventMistakeService;
+
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.apache.poi.ss.usermodel.Workbook;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.ObjectOutputStream;
-import java.io.OutputStream;
-import java.nio.charset.StandardCharsets;
 
 
 @Api(tags = "本特勒 - 附件上传下载")
@@ -51,7 +59,7 @@ public class FileBlobController {
 
     @PostMapping("/addFile")
     @ApiOperation(value = "上传附件-附件参数名称file")
-    public ResponseBean addFile(@RequestParam("file") MultipartFile file) throws IOException {
+    public ResponseBean<FileResultInfo> addFile(@RequestParam("file") MultipartFile file) throws IOException {
         FileEntry fileEntry = FileEntry.builder().file(file.getBytes())
                 .fileNm(file.getOriginalFilename()).build();
         fileService.save(fileEntry);

+ 6 - 0
application-facade/src/main/java/com/factory/web/entity/pm/res/PmPlanRes.java

@@ -49,6 +49,12 @@ public class PmPlanRes implements Serializable {
 
     @ApiModelProperty(value = "表头信息")
     private OnsiteTitle onsiteTitle;
+    
+    @ApiModelProperty(value = "上一个版本", example = "2021-06-06",hidden = true)
+    private LocalDate prevEffectiveDate;
+    
+    @ApiModelProperty(value = "上一个版本ID",hidden = true)
+    private Long prevPlanId;
 
     @ApiModelProperty(value = "工作站及巡检内容")
     private List<OnsiteWorkshop> onsiteWorkshopList;

+ 79 - 42
application-facade/src/main/java/com/factory/web/service/impl/FileServiceImpl.java

@@ -1,12 +1,43 @@
 package com.factory.web.service.impl;
 
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.time.LocalDate;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+import javax.imageio.ImageIO;
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.Drawing;
+import org.apache.poi.ss.usermodel.HorizontalAlignment;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.xssf.streaming.SXSSFWorkbook;
+import org.apache.poi.xssf.usermodel.XSSFCellStyle;
+import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.factory.base.entity.aggregates.ResponseBean;
-import com.factory.base.entity.constant.SystemConstant;
 import com.factory.user.service.UserInfoService;
 import com.factory.web.entity.excel.Utility;
 import com.factory.web.entity.pm.OnsiteApprovalPlan;
 import com.factory.web.entity.pm.OnsiteCalendar;
+import com.factory.web.entity.pm.OnsiteItem;
+import com.factory.web.entity.pm.OnsiteWorkshop;
 import com.factory.web.entity.pm.req.SearchPmCheckRecordListReq;
 import com.factory.web.entity.pm.req.SearchPmPlanReq;
 import com.factory.web.entity.pm.res.PmCheckRecordItemListRes;
@@ -16,24 +47,6 @@ import com.factory.web.entity.pm.res.PmPlanRes;
 import com.factory.web.mapper.FileMapper;
 import com.factory.web.service.FileService;
 import com.factory.web.service.pm.PreventMistakeService;
-import org.apache.poi.hssf.usermodel.HSSFWorkbook;
-import org.apache.poi.ss.usermodel.*;
-import org.apache.poi.ss.util.CellRangeAddress;
-import org.apache.poi.xssf.streaming.SXSSFWorkbook;
-import org.apache.poi.xssf.usermodel.XSSFCellStyle;
-import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import javax.imageio.ImageIO;
-import javax.servlet.http.HttpServletRequest;
-import java.awt.image.BufferedImage;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.util.*;
 
 @Service
 @Transactional(rollbackFor = Exception.class)
@@ -53,6 +66,7 @@ public class FileServiceImpl extends ServiceImpl<FileMapper, FileEntry> implemen
         HashMap<Integer, String> nmMap = new HashMap<>();
         SearchPmPlanReq req = SearchPmPlanReq.builder().bentelerPlanId(param.getBentelerPlanId()).build();
         PmPlanRes plan = preventMistakeService.getPmPlan(req);
+        
         ResponseBean<List<PmCheckRecordListRes>> checks = preventMistakeService.getPmCheckRecordList(param);
         ResponseBean<List<OnsiteApprovalPlan>> approve = preventMistakeService.getPmPlanApprovalList(req);
         Workbook wb = new SXSSFWorkbook(500);
@@ -66,20 +80,34 @@ public class FileServiceImpl extends ServiceImpl<FileMapper, FileEntry> implemen
         	bufferImg = ImageIO.read(inb);
         	inb.close();
         }
-        String[] data = getOnsiteTitle1Data();
+        //设置版本 生效时间和上一个版本生效时间
+        String[] data = getOnsiteTitle1Data(plan.getBentelerPlanId(),plan.getEffectiveDate(),plan.getPrevEffectiveDate());
+        
         createOnsiteTitle1(wb, sheet, cellStyle, 0, data, bufferImg);
+        //设置公司名称和计划名称
         data = getOnsiteTitle2Data(plan);
         createOnsiteTitle2(sheet, cellStyle, 1, data);
+        //设置点检人年月信息
         data = getOnsiteTitle3Data(plan, param, iscontroll);
         createOnsiteTitle3(sheet, cellStyle, 2, data);
+        
+        //设置op和点检信息头信息
         createItemInfoTitle(sheet, cellStyle, 3);
+        
+        //设置op点检项
         List<String[]> dsl = getItemInfoDate(plan, checks.getData(), param, iscontroll, nmMap);
         int rowindex = createItemInfo(sheet, cellStyle, 4, dsl);
+       
+        //对应日期点检人信息
         data = getOperaterTitleData(nmMap);
         createOperaterTitle(sheet, cellStyle, rowindex + 1, data);
+        //备注信息
         data = getOnsiteTitle4Data();
         createOnsiteTitle4(sheet, cellStyleLeft, rowindex + 2, data);
+        
+        //设置创建人审批人信息
         data = getOnsiteTitle5Data(plan, approve.getData());
+        
         createOnsiteTitle5(sheet, cellStyle, rowindex + 3, data);
         return wb;
     }
@@ -88,8 +116,25 @@ public class FileServiceImpl extends ServiceImpl<FileMapper, FileEntry> implemen
     private List<String[]> getItemInfoDate(PmPlanRes plan, List<PmCheckRecordListRes> check, SearchPmCheckRecordListReq param, boolean iscontroll, HashMap<Integer, String> nmMap) {
         List<String[]> rs = new ArrayList<>();
         if (iscontroll) {
-            String[] datas = inidata();
-            rs.add(datas);
+            plan.getOnsiteCalendarList().forEach(cal->{
+//            	String userNm = getUserName(cal.getUserId());
+            	String[] datas = null;
+            	List<OnsiteWorkshop> wl = plan.getOnsiteWorkshopList();
+            	for (OnsiteWorkshop res : wl) {
+                    for (OnsiteItem item : res.getOnsiteItemList()) {
+                    	if(!item.getTypeFlag().equals(cal.getTypeFlag())) {
+                    		continue;
+                    	}
+                        datas = inidata();
+                        datas[0] = cal.getTypeFlag() == 0 ? "日" : cal.getTypeFlag() == 1 ? "周" : "月";
+                        datas[1] = res.getWsName();
+                        datas[2] = item.getItemContent();
+                        
+                        rs.add(datas);
+                    }
+
+                }
+            });
         } else {
             Optional<OnsiteCalendar> cal = plan.getOnsiteCalendarList().stream().filter(s -> s.getTypeFlag().equals(param.getTypeFlag())).findFirst();
             String userNm = getUserName(!cal.isPresent() ? null : cal.get().getUserId());
@@ -125,14 +170,7 @@ public class FileServiceImpl extends ServiceImpl<FileMapper, FileEntry> implemen
     }
 
     private String getUserName(Long userid) {
-        String userNm = SystemConstant.EMPTY_STRING;
-        if (userid != null) {
-            String name = userInfoService.getNameById(userid);
-            if (name != null) {
-                userNm = name;
-            }
-        }
-        return userNm;
+       return userInfoService.getNameInfoById(userid);
     }
 
     private String[] getOnsiteTitle5Data(PmPlanRes plan, List<OnsiteApprovalPlan> approvals) {
@@ -165,18 +203,19 @@ public class FileServiceImpl extends ServiceImpl<FileMapper, FileEntry> implemen
     }
 
     private String[] getOnsiteTitle3Data(PmPlanRes plan, SearchPmCheckRecordListReq param, boolean iscontroll) {
-        Optional<OnsiteCalendar> cal = plan.getOnsiteCalendarList().stream().filter(s -> s.getTypeFlag().equals(param.getTypeFlag())).findFirst();
+    	List<OnsiteCalendar> list = plan.getOnsiteCalendarList();
+    	list = list.stream().filter(s -> (iscontroll||s.getTypeFlag().equals(param.getTypeFlag()))).collect(Collectors.toList());
+        String userName = list.stream().map(s->getUserName(s.getUserId())).collect(Collectors.joining(","));
+        String shift = list.stream().map(s->s.getShift()).findFirst().orElse("");
         String[] dates = param.getYearMonth().split("\\-");
-        String setter = String.format("Setter/Jumper:%s", "");
+        String setter = String.format("Setter/Jumper:%s", userName);
         if (iscontroll) {
         	dates[0]="";
         	dates[1]="";
-        }else {
-        	setter = String.format("Setter/Jumper:%s", getUserName(!cal.isPresent() ? null : cal.get().getUserId()));
         }
         return new String[]{
                 String.format("Production line:%s", plan.getOnsiteTitle() != null ? plan.getOnsiteTitle().getProductionLine() : ""),
-                String.format("Shift:%s", !cal.isPresent() ? "" : cal.get().getShift()),
+                String.format("Shift:%s", shift),
                 setter,
                 String.format("Year:%s", dates[0]),
                 String.format("Month:%s", dates[1])
@@ -185,9 +224,7 @@ public class FileServiceImpl extends ServiceImpl<FileMapper, FileEntry> implemen
 
     private String[] getOnsiteTitle2Data(PmPlanRes plan) {
         String[] data;
-        data = new String[]{companyName,
-                plan.getBentelerPlanName()
-        };
+        data = new String[]{companyName,plan.getBentelerPlanName()};
         return data;
     }
 
@@ -334,15 +371,15 @@ public class FileServiceImpl extends ServiceImpl<FileMapper, FileEntry> implemen
      *
      * @return
      */
-    private String[] getOnsiteTitle1Data() {
+    private String[] getOnsiteTitle1Data(Long planId,LocalDate effectDate,LocalDate prevEffectDate) {
         String[] data = new String[]{
                 "Benteler Automotive (shenyang) Co. , Ltd",
                 "Pokayoke Checking Sheet for Production",
                 "模板编号: T.0702.Eng.022.An.02\n" +
-                        "发布日期: 2020-10-26\n" +
-                        "模板版本: 11\n" +
+                        "发布日期: "+(effectDate==null?"2020-10-26":effectDate.toString())+"\n" +
+                        "模板版本: "+planId+"\n" +
                         "部门:工程部\n" +
-                        "上一版本: 2019-11-01"
+                        "上一版本: "+(prevEffectDate==null?"2019-11-01":prevEffectDate.toString())
         };
         return data;
     }

+ 7 - 2
application-facade/src/main/java/com/factory/web/service/impl/pm/PreventMistakeServiceImpl.java

@@ -369,8 +369,13 @@ public class PreventMistakeServiceImpl extends ServiceImpl<PreventMistakeMapper,
 		pmPlanRes.setPlanType(plan.getPlanType());
 		pmPlanRes.setEffectiveDate(plan.getEffectiveDate());
 		pmPlanRes.setCreatedUserId(plan.getCreatedUserId());
+		pmPlanRes.setPrevPlanId(plan.getPrevId());
+		if(plan.getPrevId()!=null) {
+			BentelerPlan prevpPan = planService.getById(req.getBentelerPlanId());
+			pmPlanRes.setPrevEffectiveDate(prevpPan.getEffectiveDate());
+		}
 		List<OnsiteCalendar> onsiteCalendarList = onsiteCalendarService.list(Wrappers.<OnsiteCalendar>lambdaQuery()
-                .eq(OnsiteCalendar::getBentelerPlanId, plan.getId()));
+                .eq(OnsiteCalendar::getBentelerPlanId, plan.getId()).orderByAsc(OnsiteCalendar::getTypeFlag));
         pmPlanRes.setOnsiteCalendarList(onsiteCalendarList);
 
         try {
@@ -656,7 +661,7 @@ public class PreventMistakeServiceImpl extends ServiceImpl<PreventMistakeMapper,
     @Override
     public ResponseBean<List<OnsiteApprovalPlan>> getPmPlanApprovalList(SearchPmPlanReq req) {
         List<OnsiteApprovalPlan> onsiteApprovalPlanList = onsiteApprovalPlanService.list(Wrappers.<OnsiteApprovalPlan>lambdaQuery()
-                .eq(OnsiteApprovalPlan::getBentelerPlanId, req.getBentelerPlanId()));
+                .eq(OnsiteApprovalPlan::getBentelerPlanId, req.getBentelerPlanId()).orderByAsc(OnsiteApprovalPlan::getApprovalLevel));
         return ResponseBeanBuilder.ok(onsiteApprovalPlanList, Function.identity());
     }
 

+ 7 - 2
application-facade/src/main/java/com/factory/wx/service/impl/WxServiceImpl.java

@@ -3,10 +3,10 @@ package com.factory.wx.service.impl;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
@@ -172,11 +172,16 @@ public class WxServiceImpl implements WxService {
         } else {
             dataMap.put("thing4", ValEntry.builder().value("智云工厂系统").build());
         }
+        Set<String> openIdSet = new HashSet<>();
 		for(Long userId:list) {
 			try {
 				String openId = wxMapper
 						.selectOne(Wrappers.<UsUserWechat>lambdaQuery().eq(UsUserWechat::getUserId, userId))
 						.getOpenid();
+				if(!openIdSet.add(openId)) {
+					log.warn("下发微信消息,接收人userId:{}的openId重复",sendMsgReq.getToUserId());
+					continue;
+				}
 				if (null != openId && !openId.isEmpty()) {
 					AppEntry appEntry = AppEntry.builder().appId(appid).secret(appsecret).build();
 					TemplateEntry tpl = TemplateEntry.builder().template_id(templateId).touser(openId).page(page)

+ 2 - 2
application-facade/src/main/resources/mapper/FirstArticleMapper.xml

@@ -513,8 +513,8 @@
         FROM 
         	benteler_plan bp
 			join onsite_approval_plan oap on bp.id = oap.benteler_plan_id AND oap.approval_level = 2 AND oap.`status` = 1
-			join join first_article_calendar fac on bp.id = fac.benteler_plan_id
-			join join first_article_task fat on fac.id = fat.first_article_calendar_id and TO_DAYS(fat.task_time) = TO_DAYS(NOW())
+			join first_article_calendar fac on bp.id = fac.benteler_plan_id
+			join first_article_task fat on fac.id = fat.first_article_calendar_id and TO_DAYS(fat.task_time) = TO_DAYS(NOW())
         where bp.`status` = 4 and bp.id = #{req.bentelerPlanId}
         <if test="req.typeFlag !=null">
             AND fat.type_flag = #{req.typeFlag}

+ 1 - 1
application-task/src/main/java/com/factory/init/FirstTaskJob.java

@@ -75,7 +75,7 @@ public class FirstTaskJob implements Job {
             List<FirstCalendar> cals = firstTaskService.getCalenderFirstForType(0,now);
             FirstTask task = new FirstTask();
             task.setTask_time(now);
-            for(int typeFlag=0;typeFlag<=2;typeFlag++) {
+            for(int typeFlag=0;typeFlag<=1;typeFlag++) {//2中断在pad手动建立
             	cals = firstTaskService.getCalenderFirstForType(typeFlag,now);
             	num +=cals.size();
             	for (FirstCalendar cal : cals) {

+ 7 - 0
application-task/src/main/java/com/factory/service/impl/MsgServiceImpl.java

@@ -4,8 +4,10 @@ import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -116,9 +118,14 @@ public class MsgServiceImpl implements MsgService {
             dataMap.put("time3", ValEntry.builder().value(TimeUtils.getDayString(LocalDateTime.now())).build());
         }
         dataMap.put("thing4", new ValEntry("智云工厂系统"));
+        Set<String> openIdSet = new HashSet<>();
 		for(Long userId:list) {
 			try {
 				String openId = userMapper.getOpenIdByUserId(userId);
+				if(!openIdSet.add(openId)) {
+					log.warn("下发微信消息,接收人userId:{}的openId重复",sendMsgReq.getToUserId());
+					continue;
+				}
 				if (null != openId && !openId.isEmpty()) {
 					AppEntry appEntry = AppEntry.builder().appId(appid).secret(appsecret).build();
 					TemplateEntry tpl = TemplateEntry.builder().template_id(templateId).touser(openId)

+ 1 - 1
common-user/src/main/java/com/factory/user/service/UserInfoService.java

@@ -14,7 +14,7 @@ import java.util.List;
 
 public interface UserInfoService extends IService<UserInfo> {
 
-    String getNameById(Long id);
+    String getNameInfoById(Long id);
 
     List<UserInfo> getListByNameOrNo(String word);
 

+ 2 - 2
common-user/src/main/java/com/factory/user/service/impl/UserInfoServiceImpl.java

@@ -45,14 +45,14 @@ public class UserInfoServiceImpl extends ServiceImpl<UserInfoMapper, UserInfo> i
     private DictMapper dictMapper;
 
     @Override
-    public String getNameById(Long id) {
+    public String getNameInfoById(Long id) {
         String name = SystemConstant.EMPTY_STRING;
         if (id == null) {
             return name;
         }
         UserInfo userInfo = getById(id);
         if (userInfo != null) {
-            name = StringUtils.isBlank(userInfo.getName())?userInfo.getUsername():userInfo.getName();
+            name = StringUtils.isBlank(userInfo.getName())?userInfo.getUsername():(userInfo.getUsername()+"("+userInfo.getName()+")");
         }
         return name;
     }