Jelajahi Sumber

报工不合格提醒

DLC 1 tahun lalu
induk
melakukan
fa9f2472ba

+ 12 - 0
bs-common/src/main/java/com/rongwei/safecommon/utils/SaveConstans.java

@@ -192,6 +192,10 @@ public class SaveConstans {
          * 作业延期提醒
          */
         public static final String PROCESSDELAY_REMIND = "processdelay";
+        /**
+         * 报工不合格提醒
+         */
+        public static final String REPORTUNQUALIFY_REMIND = "reportunqualify";
     }
 
     public static class NotifyTitle {
@@ -313,6 +317,10 @@ public class SaveConstans {
          * 特种设备提醒
          */
         public static final String SPECIALEQUIPMENT_TITLE="特种设备提醒";
+        /**
+         * 报工不合格提醒
+         */
+        public static final String REPORTUNQUALIFY_TITLE="订单作业报工不合格";
     }
 
     public static class NotifyContent {
@@ -433,6 +441,10 @@ public class SaveConstans {
          * 特种设备提醒内容
          */
         public static final String SPECIALEQUIPMENT_CONTENT="设备类型:【%s】,设备编号:【%s】,设备名称:【%s】,年检日期:【%s】";
+        /**
+         * 报工不合格提醒
+         */
+        public static final String REPORTUNQUALIFY_CONTENT = "报工检验不合格,请及时调整计划,详情参见邮件提醒";
     }
 
     /**

+ 12 - 0
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/dao/ApsProductionOrderDao.java

@@ -51,6 +51,18 @@ public interface ApsProductionOrderDao extends BaseMapper<ApsProductionOrderDo>
             "\tleft join aps_blank_order b on b.DELETED='0' and b.ID=p.BLANKID\n" +
             "\twhere e.DELETED='0' and (p.PROCESSSTATUS='30' or p.PROCESSSTATUS='40') and (e.WORKSTATUS='待开工' or e.WORKSTATUS='加工中') and TIMESTAMPDIFF(DAY,DATE_FORMAT(NOW(),'%Y-%m-%d'),DATE_FORMAT(e.PLANENDDATE,'%Y-%m-%d'))<0)")
     List<ApsProductionOrderDo> getProcessDelay();
+
+    @Select("select po.ID,po.ORDERNO,po.CUSTOMNAME,po.ORDERDATE,b.ID as AUDITORID,o.OUTPUTNUMBER as AUDITOR,p.PROCESS as CUSTOMORDERNO,o.INSEPCTIONLEVEL as CUSTOMORDERTYPE,\n" +
+            "\to.MAJORDESC as REMARK,o.MINORDESC as OTHERPRECAUTION,po.CREATEUSERID,u.ACCOUNT as CREATEUSERNAME,u.EMAIL as MODIFYUSERNAME\n" +
+            "from aps_report_output o\n" +
+            "left join aps_report_records r on r.DELETED='0' and r.ID=o.MAINID\n" +
+            "left join aps_process_operation p on r.PROCESSOPERATIONID=p.ID and p.DELETED='0'\n" +
+            "left join aps_blank_order b on b.DELETED='0' and p.BLANKID=b.ID\n" +
+            "left join aps_production_order po on po.DELETED='0' and b.PRODUCTIONORDERID=po.ID\n" +
+            "left join sys_user u on po.CREATEUSERID=u.ID and u.DELETED='0'\n" +
+            "where o.DELETED='0' and o.QUALIFIED='否' and TIMESTAMPDIFF(DAY,DATE_FORMAT(r.CHECKDATE,'%Y-%m-%d'),DATE_FORMAT(NOW(),'%Y-%m-%d'))=1\n" +
+            "order by po.ORDERNO,b.ID")
+    List<ApsProductionOrderDo> getReportUnqualify();
 }
 
 

+ 2 - 0
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/ApsProductionOrderService.java

@@ -28,4 +28,6 @@ public interface ApsProductionOrderService extends IService<ApsProductionOrderDo
     void processDelay();
 
     R deleteOrder(DeleteOrderVo req);
+
+    void reportUnqualify();
 }

+ 59 - 4
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsProductionOrderServiceImpl.java

@@ -12,6 +12,7 @@ import com.rongwei.bscommon.sys.utils.ApsUtils;
 import com.rongwei.bsentity.domain.*;
 import com.rongwei.bsentity.vo.*;
 import com.rongwei.rwadmincommon.system.vo.SysUserVo;
+import com.rongwei.rwcommon.base.BaseDo;
 import com.rongwei.rwcommon.base.R;
 import com.rongwei.rwcommon.utils.StringUtils;
 import com.rongwei.rwcommon.vo.MailDo;
@@ -24,12 +25,10 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.Arrays;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
 import java.util.stream.Collectors;
 
+import static com.rongwei.safecommon.utils.SaveConstans.DatePattern.DATE_PATTERN_YMD;
 import static com.rongwei.safecommon.utils.SaveConstans.NotifyContent.*;
 import static com.rongwei.safecommon.utils.SaveConstans.NotifyTitle.*;
 import static com.rongwei.safecommon.utils.SaveConstans.NotifyType.*;
@@ -431,6 +430,62 @@ public class ApsProductionOrderServiceImpl extends ServiceImpl<ApsProductionOrde
         }
     }
 
+    /*
+    报工不合格提醒
+     */
+    @Override
+    public void reportUnqualify() {
+        log.info("报工不合格提醒开始");
+        List<ApsProductionOrderDo> apsProductionOrderDos = this.baseMapper.getReportUnqualify();
+        if (apsProductionOrderDos.isEmpty()) {
+            return;
+        }
+        //所有的坯料计划id
+        List<String> blankIds = apsProductionOrderDos.stream().map(ApsProductionOrderDo::getAuditorid).distinct().collect(Collectors.toList());
+        //坯料输出成品
+        List<ApsProcessOutputProductDo> apsProcessOutputProductDos = apsProcessOutputProductService.list(new LambdaQueryWrapper<ApsProcessOutputProductDo>()
+                .in(ApsProcessOutputProductDo::getBlankid, blankIds)
+                .eq(BaseDo::getDeleted, "0")
+                .orderByDesc(ApsProcessOutputProductDo::getModifydate));
+
+        //按照订单分组
+        Map<String, List<ApsProductionOrderDo>> orderList = apsProductionOrderDos.stream().collect(Collectors.groupingBy(e -> e.getId()));
+        final String[] content = {""};
+        orderList.forEach((k, olist) -> {
+            //系统通知(移动端和PC端个人工作台)
+            CXCommonUtils.sendNotify(REPORTUNQUALIFY_TITLE, REPORTUNQUALIFY_CONTENT, null, Arrays.asList(olist.get(0).getCreateuserid().split(",")), k, REPORTUNQUALIFY_REMIND, false);
+
+            //邮件内容
+            content[0] = "<div>报工检验不合格,请及时调整计划</div>" +
+                    "<div>客户【" + olist.get(0).getCustomname() + "】【" + DateUtil.format(olist.get(0).getOrderdate(), DATE_PATTERN_YMD) + "】的订单【" + olist.get(0).getOrderno() + "】</div>";
+            //按照坯料计划分组
+            Map<String, List<ApsProductionOrderDo>> blankList = olist.stream().collect(Collectors.groupingBy(o -> o.getAuditorid()));
+            blankList.forEach((b, blist) -> {
+                List<ApsProcessOutputProductDo> apsProcessOutputProductDoList = apsProcessOutputProductDos.stream().filter(out -> out.getBlankid().equals(b)).collect(Collectors.toList());
+                for (ApsProcessOutputProductDo apsProcessOutputProductDo : apsProcessOutputProductDoList) {
+                    content[0] += "<div>产品【" + apsProcessOutputProductDo.getProductname() + "】</div>";
+                }
+            });
+
+            for (ApsProductionOrderDo apsProductionOrderDo : olist) {
+                content[0] += "<div>批次号【" + apsProductionOrderDo.getAuditor() + "】工序【" + apsProductionOrderDo.getCustomorderno() + "】检验等级【" + apsProductionOrderDo.getCustomordertype() + "】</div>";
+                content[0] += "<div>主要缺陷【" + (apsProductionOrderDo.getRemark() == null ? "" : apsProductionOrderDo.getRemark()) + "】</div>";
+                content[0] += "<div>次要缺陷【" + (apsProductionOrderDo.getOtherprecaution() == null ? "" : apsProductionOrderDo.getOtherprecaution()) + "】</div>";
+            }
+
+            //邮件提醒
+            if (StringUtils.isNotEmpty(olist.get(0).getModifyusername())) {
+                MailDo mailDo = new MailDo();
+                mailDo.setReceiveEmail(olist.get(0).getModifyusername().split(","));
+                mailDo.setNeedTransReceive(false);
+                mailDo.setCcEmail(new String[]{});
+                mailDo.setSubject(REPORTUNQUALIFY_TITLE);
+                mailDo.setContent(content[0]);
+                autoCommonFeginClient.sendHtmlMail(mailDo);
+            }
+        });
+    }
+
 }
 
 

+ 8 - 0
cx-aps/cx-aps-server/src/main/java/com/rongwei/bsserver/controller/ApsProductionOrderController.java

@@ -98,4 +98,12 @@ public class ApsProductionOrderController {
     public R deleteOrder(@RequestBody DeleteOrderVo req){
         return apsProductionOrderService.deleteOrder(req);
     }
+
+    /*
+    报工不合格提醒
+     */
+    @PostMapping("/reportUnqualify")
+    public void reportUnqualify() {
+        apsProductionOrderService.reportUnqualify();
+    }
 }