ソースを参照

LY 合成器修改

ly 1 年間 前
コミット
0e53df385b
26 ファイル変更376 行追加66 行削除
  1. 17 15
      master/src/main/java/com/ruoyi/framework/task/byx/ApprovalBYXTask.java
  2. 9 7
      master/src/main/java/com/ruoyi/framework/task/byx/PlantproglistBYXTask.java
  3. 6 0
      master/src/main/java/com/ruoyi/project/approve/controller/TApproveController.java
  4. 5 1
      master/src/main/java/com/ruoyi/project/common/controller/CBPSHomeDataController.java
  5. 6 0
      master/src/main/java/com/ruoyi/project/ehs/controller/TApproveDangerController.java
  6. 6 1
      master/src/main/java/com/ruoyi/project/plant/controller/TStaffmgrController.java
  7. 4 0
      master/src/main/java/com/ruoyi/project/training/controller/TTrainingController.java
  8. 53 0
      master/src/main/java/com/ruoyi/project/training/controller/TTrainingMatrixController.java
  9. 11 0
      master/src/main/java/com/ruoyi/project/training/domain/TTraining.java
  10. 1 0
      master/src/main/resources/mybatis/system/TAlarmPrincipalMapper.xml
  11. 2 0
      master/src/main/resources/mybatis/training/TTrainingMapper.xml
  12. 2 2
      master/src/main/resources/mybatis/training/TTrainingrecordsMapper.xml
  13. 2 2
      master/src/main/resources/mybatis/training/TWorkcertificateCbpsMapper.xml
  14. 18 1
      ui/src/api/training/matrix.js
  15. 1 1
      ui/src/views/approve/approveDetail/semsWeekCheck-detail.vue
  16. 11 1
      ui/src/views/approve/myapprove/index.vue
  17. 10 0
      ui/src/views/approve/unfinishedApprove/index.vue
  18. 0 3
      ui/src/views/components/PlantProgList/index.vue
  19. 32 7
      ui/src/views/dashboard/hcq/BrithChart.vue
  20. 46 7
      ui/src/views/dashboard/hcq/PieChart.vue
  21. 5 0
      ui/src/views/dashboard/hcq/RaddarChart.vue
  22. 7 7
      ui/src/views/dashboard/hcq/workcertificateChart.vue
  23. 11 4
      ui/src/views/ehs/rcfile/index.vue
  24. 36 1
      ui/src/views/hcqhome.vue
  25. 54 5
      ui/src/views/training/matrix/index.vue
  26. 21 1
      ui/src/views/training/training/index.vue

+ 17 - 15
master/src/main/java/com/ruoyi/framework/task/byx/ApprovalBYXTask.java

@@ -89,9 +89,9 @@ public class ApprovalBYXTask extends BaseController {
     /**
      * 下次回顾日期预警
      */
-    public void NextTask() {
+    public void NextTask(Long deptId) {
         TSafetyapproval safeParam = new TSafetyapproval();
-        safeParam.setDeptId(10010l);
+        safeParam.setDeptId(deptId);
         List<TSafetyapproval> safetyapprovals = safetyapprovalService.selectList(safeParam);
         TFireapproval FireParam = new TFireapproval();
         List<TFireapproval> fireapprovals = fireapprovalService.selectList(FireParam);
@@ -128,6 +128,7 @@ public class ApprovalBYXTask extends BaseController {
             TAlarmPrincipal alarmPrincipal = new TAlarmPrincipal();
             //预警类型对应负责人
             alarmPrincipal.setTypeId(AlarmtypeId);
+            alarmPrincipal.setDeptId(deptId);
             List<TAlarmPrincipal> alarmPrincipals = alarmPrincipalService.selectList(alarmPrincipal);
             String firstwarningContent = "";
             String secondwarningContent = "";
@@ -147,7 +148,7 @@ public class ApprovalBYXTask extends BaseController {
             for (String t : safetyOwners) {
                 SysUser param = new SysUser();
                 param.setStaffId(t);
-                param.setDeptId(10010l);
+                param.setDeptId(deptId);
                 SysUser user = this.userMapper.selectUserSingle(param);
                 if (user != null) {
                     safetyUserList.add(user);
@@ -155,7 +156,7 @@ public class ApprovalBYXTask extends BaseController {
             }
             for (SysUser o : safetyUserList) {
                 TSafetyapproval param = new TSafetyapproval();
-                param.setDeptId(10010l);
+                param.setDeptId(deptId);
                 param.setReviewer(o.getStaffId());
                 List<TSafetyapproval> safetyapprovalList = safetyapprovalService.selectList(param);
                 for (TSafetyapproval t : safetyapprovalList) {
@@ -186,7 +187,7 @@ public class ApprovalBYXTask extends BaseController {
             for (String t : fireOwners) {
                 SysUser param = new SysUser();
                 param.setStaffId(t);
-                param.setDeptId(10010l);
+                param.setDeptId(deptId);
                 SysUser user = this.userMapper.selectUserSingle(param);
                 if (user != null) {
                     fireUserList.add(user);
@@ -194,7 +195,7 @@ public class ApprovalBYXTask extends BaseController {
             }
             for (SysUser o : fireUserList) {
                 TFireapproval param = new TFireapproval();
-                param.setDeptId(10010l);
+                param.setDeptId(deptId);
                 param.setReviewer(o.getStaffId());
                 List<TFireapproval> fireapprovalList = fireapprovalService.selectList(param);
                 for (TFireapproval t : fireapprovalList) {
@@ -225,7 +226,7 @@ public class ApprovalBYXTask extends BaseController {
             for (String t : environOwners) {
                 SysUser param = new SysUser();
                 param.setStaffId(t);
-                param.setDeptId(10010l);
+                param.setDeptId(deptId);
                 SysUser user = this.userMapper.selectUserSingle(param);
                 if (user != null) {
                     environUserList.add(user);
@@ -233,7 +234,7 @@ public class ApprovalBYXTask extends BaseController {
             }
             for (SysUser o : environUserList) {
                 TEnvironapproval param = new TEnvironapproval();
-                param.setDeptId(10010l);
+                param.setDeptId(deptId);
                 param.setReviewer(o.getStaffId());
                 List<TEnvironapproval> environapprovalList = environapprovalService.selectList(param);
                 for (TEnvironapproval t : environapprovalList) {
@@ -257,15 +258,15 @@ public class ApprovalBYXTask extends BaseController {
                 levelSendEmail(firstwarningContent, secondwarningContent, thirdwarningContent, alarmPrincipals.get(0), "环保批文清单", "environapproval", "(证书编号,批文名称,下次回顾日期)", AlarmtypeId.toString() , o);
             }
         }
-        this.ValidityTask();
+        this.ValidityTask(deptId);
     }
 
     /**
      * 证书有效期
      */
-    public void ValidityTask() {
+    public void ValidityTask(Long deptId) {
         TSafetyapproval safeParam = new TSafetyapproval();
-        safeParam.setDeptId(10010l);
+        safeParam.setDeptId(deptId);
         List<TSafetyapproval> safetyapprovals = safetyapprovalService.selectList(safeParam);
         TFireapproval FireParam = new TFireapproval();
         List<TFireapproval> fireapprovals = fireapprovalService.selectList(FireParam);
@@ -310,6 +311,7 @@ public class ApprovalBYXTask extends BaseController {
             TAlarmPrincipal alarmPrincipal = new TAlarmPrincipal();
             //预警类型对应负责人
             alarmPrincipal.setTypeId(AlarmtypeId);
+            alarmPrincipal.setDeptId(deptId);
             List<TAlarmPrincipal> alarmPrincipals = alarmPrincipalService.selectList(alarmPrincipal);
             String firstwarningContent = "";
             String secondwarningContent = "";
@@ -329,7 +331,7 @@ public class ApprovalBYXTask extends BaseController {
             for (String t : safetyOwners) {
                 SysUser param = new SysUser();
                 param.setStaffId(t);
-                param.setDeptId(10010l);
+                param.setDeptId(deptId);
                 SysUser user = this.userMapper.selectUserSingle(param);
                 if (user != null) {
                     safetyUserList.add(user);
@@ -337,7 +339,7 @@ public class ApprovalBYXTask extends BaseController {
             }
             for (SysUser o : safetyUserList) {
                 TSafetyapproval param = new TSafetyapproval();
-                param.setDeptId(10010l);
+                param.setDeptId(deptId);
                 param.setReviewer(o.getStaffId());
                 List<TSafetyapproval> safetyapprovalList = safetyapprovalService.selectList(param);
                 for (TSafetyapproval t : safetyapprovalList) {
@@ -368,7 +370,7 @@ public class ApprovalBYXTask extends BaseController {
             for (String t : environOwners) {
                 SysUser param = new SysUser();
                 param.setStaffId(t);
-                param.setDeptId(10010l);
+                param.setDeptId(deptId);
                 SysUser user = this.userMapper.selectUserSingle(param);
                 if (user != null) {
                     environUserList.add(user);
@@ -376,7 +378,7 @@ public class ApprovalBYXTask extends BaseController {
             }
             for (SysUser o : environUserList) {
                 TEnvironapproval param = new TEnvironapproval();
-                param.setDeptId(10010l);
+                param.setDeptId(deptId);
                 param.setReviewer(o.getStaffId());
                 List<TEnvironapproval> environapprovalList = environapprovalService.selectList(param);
             for (TEnvironapproval t : environapprovalList) {

+ 9 - 7
master/src/main/java/com/ruoyi/framework/task/byx/PlantproglistBYXTask.java

@@ -74,11 +74,11 @@ public class PlantproglistBYXTask extends BaseController {
     /**
      * 下次回顾日期预警
      */
-    public void ReviewTask() {
+    public void ReviewTask(Long deptId) {
 
         TAlarmtype alarmtype = alarmtypeService.selectTAlarmtypeById(AlarmtypeId);
         TPlantproglist query = new TPlantproglist();
-        query.setDeptId(10010l);
+        query.setDeptId(deptId);
         List<TPlantproglist> plantproglist = plantproglistService.selectList(query);
         HashSet<String> responsibilitys = new HashSet<>(); //责任人集合
         for (TPlantproglist t : plantproglist
@@ -105,6 +105,7 @@ public class PlantproglistBYXTask extends BaseController {
             TAlarmPrincipal alarmPrincipal = new TAlarmPrincipal();
             //预警类型对应负责人
             alarmPrincipal.setTypeId(AlarmtypeId);
+            alarmPrincipal.setDeptId(deptId);
             List<TAlarmPrincipal> alarmPrincipals = alarmPrincipalService.selectList(alarmPrincipal);
             System.out.println(JSON.toJSONString(alarmPrincipals));
 
@@ -123,7 +124,7 @@ public class PlantproglistBYXTask extends BaseController {
             for (String t : responsibilitys) {
                 SysUser param = new SysUser();
                 param.setNickName(t);
-                param.setDeptId(10010l);
+                param.setDeptId(deptId);
                 SysUser user = this.userMapper.selectUserSingle(param);
                 if (user != null) {
                     userList.add(user);
@@ -164,15 +165,15 @@ public class PlantproglistBYXTask extends BaseController {
                 levelSendEmail(firstwarningContent, secondwarningContent, thirdwarningContent, alarmPrincipals.get(0), "装置程序清单", "plantproglist", "(文件编号,文件名称,下次回顾日期)", AlarmtypeId.toString(), o);
             }
         }
-        this.EditTask();
+        this.EditTask(deptId);
     }
 
     /**
      * 下次修改日期预警
      */
-    public void EditTask() {
+    public void EditTask(Long deptId) {
         TPlantproglist query = new TPlantproglist();
-        query.setDeptId(10010l);
+        query.setDeptId(deptId);
         List<TPlantproglist> plantproglist = plantproglistService.selectList(query);
         HashSet<String> responsibilitys = new HashSet<>(); //责任人集合
         for (TPlantproglist t : plantproglist
@@ -201,6 +202,7 @@ public class PlantproglistBYXTask extends BaseController {
             TAlarmPrincipal alarmPrincipal = new TAlarmPrincipal();
             //预警类型对应负责人
             alarmPrincipal.setTypeId(AlarmtypeId);
+            alarmPrincipal.setDeptId(deptId);
             List<TAlarmPrincipal> alarmPrincipals = alarmPrincipalService.selectList(alarmPrincipal);
             //查询用户表赋值邮箱
             for (TAlarmPrincipal t : alarmPrincipals) {
@@ -216,7 +218,7 @@ public class PlantproglistBYXTask extends BaseController {
             for (String t : responsibilitys) {
                 SysUser param = new SysUser();
                 param.setNickName(t);
-                param.setDeptId(10010l);
+                param.setDeptId(deptId);
                 SysUser user = this.userMapper.selectUserSingle(param);
                 if (user != null) {
                     userList.add(user);

+ 6 - 0
master/src/main/java/com/ruoyi/project/approve/controller/TApproveController.java

@@ -231,6 +231,12 @@ public class TApproveController extends BaseController {
                         TSaiApply approve = tSaiApplyService.selectTSaiApplyById(Long.parseLong(pi.getBusinessKey()));
                         devProcess.setApproveObject(approve);
                         devProcess.setApNo(approve.getApNo());
+                    }else if (pi.getProcessDefinitionName().equals("每周安全排查报告")) {
+                        TSpecWeekcheck t = tSpecWeekcheckService.selectTSpecWeekcheckById(Long.parseLong(pi.getBusinessKey()));
+                        SysUser user = sysUserService.selectUserById(Long.valueOf(t.getCreaterCode()));
+                        devProcess.setApNo(t.getId().toString());
+                        devProcess.setApName(user.getNickName());
+                        devProcess.setApproveObject(t);
                     }
                 } catch (Exception e) {
                     logger.error(e.toString());

+ 5 - 1
master/src/main/java/com/ruoyi/project/common/controller/CBPSHomeDataController.java

@@ -177,11 +177,15 @@ public class CBPSHomeDataController extends BaseController {
         List<TTraining> list1 = tTrainingService.selectTTrainingList(tTraining);
         tTraining.setIsfinish(0l);
         List<TTraining> list0 = tTrainingService.selectTTrainingList(tTraining);
+        tTraining.setNonParticipants("未参培");
+        List<TTraining> list2 = tTrainingService.selectTTrainingList(tTraining);
         HashMap<String, Object> result = new HashMap<>();
         result.put("count1", list1.size());
         result.put("count1Name", "已完成");
-        result.put("count0", list0.size());
+        result.put("count0", list0.size() - list2.size());
         result.put("count0Name", "未完成");
+        result.put("count2", list2.size());
+        result.put("count2Name", "未参培");
         return AjaxResult.success(result);
     }
 

+ 6 - 0
master/src/main/java/com/ruoyi/project/ehs/controller/TApproveDangerController.java

@@ -307,6 +307,12 @@ public class TApproveDangerController extends BaseController {
                         TSaiApply approve = tSaiApplyService.selectTSaiApplyById(Long.parseLong(pi.getBusinessKey()));
                         devProcess.setApproveObject(approve);
                         devProcess.setApNo(approve.getApNo());
+                    }else if (pi.getProcessDefinitionName().equals("每周安全排查报告")) {
+                        TSpecWeekcheck t = tSpecWeekcheckService.selectTSpecWeekcheckById(Long.parseLong(pi.getBusinessKey()));
+                        SysUser user = sysUserService.selectUserById(Long.valueOf(t.getCreaterCode()));
+                        devProcess.setApNo(t.getId().toString());
+                        devProcess.setApName(user.getNickName());
+                        devProcess.setApproveObject(t);
                     }
                 } catch (Exception e) {
                     logger.error(e.toString());

+ 6 - 1
master/src/main/java/com/ruoyi/project/plant/controller/TStaffmgrController.java

@@ -303,7 +303,12 @@ public class TStaffmgrController extends BaseController
                             if (t.getStartDate() != null) {
                                 if (sdf.format(t.getStartDate()).equals(sdf.format(new Date()))) {
                                     if (t.getTrainingDuration() != null) {
-                                        time = time + Double.parseDouble(t.getTrainingDuration());
+                                        try {
+                                            time = time + Double.parseDouble(t.getTrainingDuration());
+                                        }catch (Exception e) {
+                                            logger.error("转double出错",JSON.toJSONString(e));
+                                        }
+
                                     }
                                 }
                             }

+ 4 - 0
master/src/main/java/com/ruoyi/project/training/controller/TTrainingController.java

@@ -112,6 +112,10 @@ public class TTrainingController extends BaseController {
                 }
             }
             t.setHaveTraining(t.getPositionNum() + mustTraining - i);
+            //培训未结束 参加培训人员为0
+            if (t.getCourseEnddate() == null) {
+                t.setHaveTraining(0);
+            }
         }
         return getDataTable(list);
     }

+ 53 - 0
master/src/main/java/com/ruoyi/project/training/controller/TTrainingMatrixController.java

@@ -1,11 +1,15 @@
 package com.ruoyi.project.training.controller;
 
 import java.util.ArrayList;
+import java.util.Calendar;
 import java.util.List;
 
 import com.ruoyi.project.system.domain.SysDictData;
 import com.ruoyi.project.system.service.ISysDictTypeService;
+import com.ruoyi.project.training.domain.TTrainingCompanylevel;
 import com.ruoyi.project.training.domain.TTrainingRegular;
+import com.ruoyi.project.training.service.ITTrainingCompanylevelService;
+import com.ruoyi.project.training.service.ITTrainingRegularService;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -41,6 +45,10 @@ public class TTrainingMatrixController extends BaseController
     @Autowired
     private ISysDictTypeService iSysDictTypeService;
 
+    @Autowired
+    private ITTrainingRegularService tTrainingRegularService;
+    @Autowired
+    private ITTrainingCompanylevelService tTrainingCompanylevelService;
     /**
      * 查询培训矩阵列表
      */
@@ -135,6 +143,51 @@ public class TTrainingMatrixController extends BaseController
         return toAjax(tTrainingMatrixService.insertTTrainingMatrix(tTrainingMatrix));
     }
 
+    /**
+     * 批量添加装置培训
+     */
+    @PreAuthorize("@ss.hasPermi('training:matrix:add')")
+    @Log(title = "批量添加装置培训", businessType = BusinessType.INSERT)
+    @GetMapping("batchAddTraining/{ids}")
+    public AjaxResult batchAddTraining(@PathVariable Long[] ids)
+    {
+        for (int i = 0; i < ids.length; i++) {
+            TTrainingMatrix tm = tTrainingMatrixService.selectTTrainingMatrixById(ids[i]);
+            TTrainingRegular tr = new TTrainingRegular();
+            tr.setDeptId(tm.getDeptId());
+            tr.setActualpostId(tm.getActualpostId());
+            tr.setCourseCode(tm.getCourseCode());
+            tr.setItem(tm.getItem());
+            tr.setHour(tm.getHour());
+            tr.setInvolvedMoc("false");
+            Calendar cal = Calendar.getInstance();
+            tr.setYear(String.valueOf(cal.get(Calendar.YEAR)));
+            int doInsert = tTrainingRegularService.insertTTrainingRegular(tr);
+        }
+        return AjaxResult.success();
+    }
+
+    /**
+     * 批量添加装置培训
+     */
+    @PreAuthorize("@ss.hasPermi('training:matrix:add')")
+    @Log(title = "批量添加公司培训", businessType = BusinessType.INSERT)
+    @GetMapping("batchAddCompany/{ids}")
+    public AjaxResult batchAddCompany(@PathVariable Long[] ids)
+    {
+        for (int i = 0; i < ids.length; i++) {
+            TTrainingMatrix tm = tTrainingMatrixService.selectTTrainingMatrixById(ids[i]);
+            TTrainingCompanylevel tr = new TTrainingCompanylevel();
+            tr.setDeptId(tm.getDeptId());
+            tr.setCourseCode(tm.getCourseCode());
+            tr.setItem(tm.getItem());
+            Calendar cal = Calendar.getInstance();
+            int doInsert = tTrainingCompanylevelService.insertTTrainingCompanylevel(tr);
+        }
+        return AjaxResult.success();
+    }
+
+
     /**
      * 修改培训矩阵
      */

+ 11 - 0
master/src/main/java/com/ruoyi/project/training/domain/TTraining.java

@@ -130,6 +130,9 @@ public class TTraining extends BaseEntity
     /** 未参会人员名单 */
     private String nonParticipants;
 
+    /** 未参培情况 */
+    private Integer isNon;
+
     /** 图片地址 */
     private String picUrl;
 
@@ -384,6 +387,14 @@ public class TTraining extends BaseEntity
 
     public void settTrainingNons(List<TTrainingNon> tTrainingNons) { this.tTrainingNons = tTrainingNons; }
 
+    public Integer getIsNon() {
+        return isNon;
+    }
+
+    public void setIsNon(Integer isNon) {
+        this.isNon = isNon;
+    }
+
     @Override
     public String toString() {
         return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

+ 1 - 0
master/src/main/resources/mybatis/system/TAlarmPrincipalMapper.xml

@@ -42,6 +42,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <include refid="selectTAlarmPrincipalVo"/>
         <where>
             <if test="typeId != null  and typeId != ''"> and type_id = #{typeId}</if>
+            <if test="deptId != null  and deptId != ''"> and d.dept_id = #{deptId}</if>
             and d.del_flag = 0
         </where>
         <!-- 数据范围过滤 -->

+ 2 - 0
master/src/main/resources/mybatis/training/TTrainingMapper.xml

@@ -98,6 +98,8 @@
             <if test="trainingType != null and trainingType != ''">and training_type = #{trainingType}</if>
             <if test="startDate != null ">and course_startdate <![CDATA[>=]]> #{startDate}</if>
             <if test="endDate != null">and course_startdate <![CDATA[<=]]>#{endDate}</if>
+            <if test=" nonParticipants!= null">and NON_PARTICIPANTS is not null</if>
+            <if test=" isNon == 1">and NON_PARTICIPANTS is not null</if>
             and d.del_flag = 0
         </where>
         <!-- 数据范围过滤 -->

+ 2 - 2
master/src/main/resources/mybatis/training/TTrainingrecordsMapper.xml

@@ -224,11 +224,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <select id="queryNeedDeleteIds" resultType="String">
         SELECT b.EMPLOYEEID from t_trainingrecords b where b.del_flag = 0
             minus
-        SELECT a.STAFFID FROM "T_STAFFMGR" a where  a.del_flag = 0 and unit in (10,18,20,30)
+        SELECT a.STAFFID FROM "T_STAFFMGR" a where  a.del_flag = 0 and unit in (10,20,30)
     </select>
 
     <select id="queryNeedInsertIds" resultType="String">
-        SELECT a.STAFFID FROM "T_STAFFMGR" a where  a.del_flag = 0 and unit in (10,18,20,30)
+        SELECT a.STAFFID FROM "T_STAFFMGR" a where  a.del_flag = 0 and unit in (10,20,30)
             minus
         SELECT b.EMPLOYEEID from t_trainingrecords b where b.del_flag = 0
     </select>

+ 2 - 2
master/src/main/resources/mybatis/training/TWorkcertificateCbpsMapper.xml

@@ -318,7 +318,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
 
     <select id="queryNeedInsertIds" resultType="String">
-        SELECT a.STAFFID FROM "T_STAFFMGR" a where DEPT_ID = 10012 and a.del_flag = 0
+        SELECT a.STAFFID FROM "T_STAFFMGR" a where DEPT_ID = 10012 and a.del_flag = 0 and a.unit = 30
             minus
         SELECT b.EMPLOYEEID from T_WORKCERTIFICATE_CBPS b where b.del_flag = 0
     </select>
@@ -326,7 +326,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <select id="queryNeedDeleteIds" resultType="String">
         SELECT b.EMPLOYEEID from T_WORKCERTIFICATE_CBPS b where b.del_flag = 0
             minus
-        SELECT a.STAFFID FROM "T_STAFFMGR" a where DEPT_ID = 10012 and a.del_flag = 0
+        SELECT a.STAFFID FROM "T_STAFFMGR" a where DEPT_ID = 10012 and a.del_flag = 0 and a.unit = 30
     </select>
 
 

+ 18 - 1
ui/src/api/training/matrix.js

@@ -26,6 +26,23 @@ export function addMatrix(data) {
   })
 }
 
+// 批量新增装置培训计划
+export function batchAddTraining(id) {
+  return request({
+    url: '/training/matrix/batchAddTraining/' + id,
+    method: 'get'
+  })
+}
+
+// 批量新增装置培训计划
+export function batchAddCompany(id) {
+  return request({
+    url: '/training/matrix/batchAddCompany/' + id,
+    method: 'get'
+  })
+}
+
+
 // 修改培训矩阵
 export function updateMatrix(data) {
   return request({
@@ -50,4 +67,4 @@ export function exportMatrix(query) {
     method: 'get',
     params: query
   })
-}
+}

+ 1 - 1
ui/src/views/approve/approveDetail/semsWeekCheck-detail.vue

@@ -168,7 +168,7 @@ export default {
       });
       getWeekcheck(id).then(response => {
         this.dataForm = response.data;
-        if (!this.dataForm.safeDirSug) {
+        if (!this.dataForm.safeDirSug && !this.taskForm.taskId == '') {
           this.dataForm.safeDirSug = '同意'
         }
       });

+ 11 - 1
ui/src/views/approve/myapprove/index.vue

@@ -57,6 +57,8 @@
     <offlinevalve-detail v-if="offlinevalveDetailVisible" ref="offlinevalveDetail" @refreshDataList="getList"></offlinevalve-detail>
     <safetychange-detail v-if="safetychangeDetailVisible" ref="safetychangeDetail" @refreshDataList="getList"></safetychange-detail>
     <sai-apply-detail v-if="saiApplyVisible" ref="saiApplyDetail" @refreshDataList="getList"></sai-apply-detail>
+    <sems-week-check-detail v-if="semsWeekcheckDetailVisible" ref="semsWeekcheckDetail" @refreshDataList="getList"></sems-week-check-detail>
+
   </div>
 </template>
 
@@ -76,10 +78,12 @@
   import OfflinevalveDetail from "@/views/approve/approveDetail/offlinevalve-detail";
   import SafetychangeDetail from "@/views/approve/approveDetail/safetychange-detail";
   import SaiApplyDetail from "@/views/approve/approveDetail/sai-apply-detail";
+  import SemsWeekCheckDetail from "@/views/approve/approveDetail/semsWeekCheck-detail";
 
   export default {
     name: "Myapprove",
     components: {
+      SemsWeekCheckDetail,
       SaiApplyDetail,
       SafetychangeDetail,
       OfflinevalveDetail,
@@ -99,6 +103,7 @@
         offlinevalveDetailVisible:false,
         safetychangeDetailVisible:false,
         saiApplyVisible:false,
+        semsWeekcheckDetailVisible: false,
         // 选中数组
         ids: [],
         // 非单个禁用
@@ -243,7 +248,12 @@
           this.$nextTick(() => {
             this.$refs.saiApplyDetail.init(row.approveObject.saiApplyId, row.taskId, row.processId, row.taskName)
           })
-        } else {
+        } else if (row.processName == "每周安全排查报告") {
+          this.semsWeekcheckDetailVisible = true
+          this.$nextTick(() => {
+            this.$refs.semsWeekcheckDetail.init(row.approveObject.id, row.taskId, row.processId, row.taskName)
+          })
+        }else {
           this.approveInfo = row;
           this.infoTaskName = row.taskName;
           this.infoprocessName = row.processName;

+ 10 - 0
ui/src/views/approve/unfinishedApprove/index.vue

@@ -67,6 +67,8 @@
     <offlinevalve-detail v-if="offlinevalveDetailVisible" ref="offlinevalveDetail" @refreshDataList="getList"></offlinevalve-detail>
     <safetychange-detail v-if="safetychangeDetailVisible" ref="safetychangeDetail" @refreshDataList="getList"></safetychange-detail>
     <sai-apply-detail v-if="saiApplyVisible" ref="saiApplyDetail" @refreshDataList="getList"></sai-apply-detail>
+    <sems-week-check-detail v-if="semsWeekcheckDetailVisible" ref="semsWeekcheckDetail" @refreshDataList="getList"></sems-week-check-detail>
+
   </div>
 </template>
 
@@ -87,10 +89,12 @@
   import SafetychangeDetail from "@/views/approve/approveDetail/safetychange-detail";
   import SaiApplyDetail from "@/views/approve/approveDetail/sai-apply-detail";
   import {delTag} from "@/api/invoice/tag";
+  import SemsWeekCheckDetail from "@/views/approve/approveDetail/semsWeekCheck-detail";
 
   export default {
     name: "Myapprove",
     components: {
+      SemsWeekCheckDetail,
       SaiApplyDetail,
       SafetychangeDetail,
       OfflinevalveDetail,
@@ -110,6 +114,7 @@
         offlinevalveDetailVisible:false,
         safetychangeDetailVisible:false,
         saiApplyVisible:false,
+        semsWeekcheckDetailVisible: false,
         // 选中数组
         ids: [],
         // 非单个禁用
@@ -266,6 +271,11 @@
           this.$nextTick(() => {
             this.$refs.saiApplyDetail.init(row.approveObject.saiApplyId, row.taskId, row.processId, row.taskName)
           })
+        }else if (row.processName == "每周安全排查报告") {
+          this.semsWeekcheckDetailVisible = true
+          this.$nextTick(() => {
+            this.$refs.semsWeekcheckDetail.init(row.approveObject.id, row.taskId, row.processId, row.taskName)
+          })
         } else {
           this.approveInfo = row;
           this.infoTaskName = row.taskName;

+ 0 - 3
ui/src/views/components/PlantProgList/index.vue

@@ -685,9 +685,6 @@ export default {
         filedate: [
           {required: true, message: this.$t('修订日期') + this.$t('不能为空'), trigger: "blur"}
         ],
-        reviewdate: [
-          {required: true, message: this.$t('回顾日期') + this.$t('不能为空'), trigger: "blur"}
-        ],
         nextreviewdate: [
           {required: true, message: this.$t('下次回顾日期') + this.$t('不能为空'), trigger: "blur"}
         ],

+ 32 - 7
ui/src/views/dashboard/hcq/BrithChart.vue

@@ -27,7 +27,8 @@ export default {
   data() {
     return {
       chart: null,
-      dataOut: []
+      dataOut: [],
+      total: null,
     }
   },
   mounted() {
@@ -37,9 +38,22 @@ export default {
           {value: res.data.count1, name: res.data.count1Name},
           {value: res.data.count0, name: res.data.count0Name},
         ]
+        this.total = res.data.count1 + res.data.count0
         this.initChart()
       })
     })
+    this.chart = echarts.init(this.$el, 'macarons')
+    //饼状图点击事件
+    this.chart.on('click', (param) =>{  //这里使用箭头函数代替function,this指向VueComponent
+      let index;
+      //当前扇区的dataIndex
+      index = param.name;
+      //自己的操作,这里是点击跳转路由,并携带参数
+        /*跳转路由*/
+        this.$router.push({
+          path: '/training/newstaff/tnNew',
+        })
+    });
   },
   beforeDestroy() {
     if (!this.chart) {
@@ -50,8 +64,6 @@ export default {
   },
   methods: {
     initChart() {
-      this.chart = echarts.init(this.$el, 'macarons')
-
       this.chart.setOption({
         tooltip: {
           trigger: 'item',
@@ -61,11 +73,18 @@ export default {
           '#87CA8B',
           '#FBD44A'
         ],
-        title:
+        title: [
           {
-            text: '',
-          }
-        ,
+            text: '总人数',
+            x: 'center',
+            top: '35%',
+          },
+          {
+            text: this.total,
+            x: 'center',
+            top: '50%',
+          },
+        ],
         legend: {
           orient: 'vertical',
           left: 'left',
@@ -83,6 +102,12 @@ export default {
             name: '',
             type: 'pie',
             selectedMode: 'single',
+            radius: ['50%', '80%'],
+            itemStyle: {
+              borderRadius: 10,
+              borderColor: '#fff',
+              borderWidth: 2
+            },
             label: {
               position: 'outside',
               fontSize: 10,

+ 46 - 7
ui/src/views/dashboard/hcq/PieChart.vue

@@ -29,19 +29,44 @@ export default {
       chart: null,
       trainData:[],
       dataOut: [],
-      trainingType:[]
+      trainingType:[],
+      trainTotal: null,
     }
   },
   mounted() {
     this.$nextTick(() => {
       trainCount().then(res=>{
+        this.trainTotal = res.data.count1 + res.data.count0 + res.data.count2
         this.dataOut = [
           {value: res.data.count1, name: res.data.count1Name},
           {value: res.data.count0, name: res.data.count0Name},
+          {value: res.data.count2, name: res.data.count2Name},
         ]
         this.initChart()
       })
     })
+    this.chart = echarts.init(this.$el, 'macarons')
+    //饼状图点击事件
+    this.chart.on('click', (param) =>{  //这里使用箭头函数代替function,this指向VueComponent
+      let index;
+      //当前扇区的dataIndex
+      index = param.name;
+      //自己的操作,这里是点击跳转路由,并携带参数
+      if (index == '未参培') {
+          /*跳转路由*/
+          this.$router.push({
+            path: '/training/tracking/training',
+            query: {
+              status: index,
+            }
+          })
+      }else {
+        /*跳转路由*/
+        this.$router.push({
+          path: '/training/tracking/training',
+        })
+      }
+    });
   },
   beforeDestroy() {
     if (!this.chart) {
@@ -52,9 +77,20 @@ export default {
   },
   methods: {
     initChart() {
-      this.chart = echarts.init(this.$el, 'macarons')
-
+      var total = this.trainTotal
       this.chart.setOption({
+        title: [
+          {
+            text: '总数',
+            x: 'center',
+            top: '35%',
+          },
+          {
+            text: this.trainTotal,
+            x: 'center',
+            top: '50%',
+          },
+        ],
         tooltip: {
           trigger: 'item',
           formatter: '{a} <br/>{b} : {c} ({d}%)'
@@ -73,16 +109,19 @@ export default {
             padding:[0,0]
           },
           selectedMode: true,
-          data:['已完成','未完成']
+          data:['已完成','未完成','未参培']
         },
         series: [
           {
             name: '',
             type: 'pie',
             selectedMode: 'single',
-            label: {
-              position: 'outside',
-              fontSize: 10,
+            radius: ['50%', '80%'],
+            avoidLabelOverlap: false,
+            itemStyle: {
+              borderRadius: 10,
+              borderColor: '#fff',
+              borderWidth: 2
             },
             animationEasing: 'cubicInOut',
             animationDuration: 1300,

+ 5 - 0
ui/src/views/dashboard/hcq/RaddarChart.vue

@@ -107,6 +107,11 @@ export default {
             type: 'pie',
             selectedMode: 'single',
             radius: ['20%', '80%'],
+            itemStyle: {
+              borderRadius: 10,
+              borderColor: '#fff',
+              borderWidth: 2
+            },
             label: {
               position: 'outside',
               fontSize: 10,

+ 7 - 7
ui/src/views/dashboard/hcq/workcertificateChart.vue

@@ -66,13 +66,13 @@ export default {
         {
           xAxis: {
             data: [
-              '压力容器',
-              '压力管道',
-              '技术工人\n上岗证',
-              '班组长安全\n培训',
-              '制冷与空调',
-              '建筑物消防员\n职业资格证',
-              '专职安全\n管理人员',
+              '压力\n容器',
+              '压力\n管道',
+              '技术\n工人\n上岗证',
+              '班组长\n安全\n培训',
+              '制冷与\n空调',
+              '消防员\n证',
+              '安全\n管理',
               'TDS'
             ],
             axisTick: {

+ 11 - 4
ui/src/views/ehs/rcfile/index.vue

@@ -140,8 +140,8 @@
         </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">确 定</el-button>
-        <el-button @click="cancel">取 消</el-button>
+        <el-button type="primary" @click="submitFile">确 定</el-button>
+        <el-button @click="doc.open = false">返 回</el-button>
       </div>
     </el-dialog>
     <!-- 添加或修改RC附件对话框 -->
@@ -331,6 +331,9 @@ export default {
       this.getTreeselect();
       this.form.parentId = 0
       this.doc.open = true;
+      this.$nextTick(() => {
+        this.$refs.doc.clearFiles()
+      })
       this.doc.title = "添加RC附件";
     },
     /** 修改按钮操作 */
@@ -367,6 +370,10 @@ export default {
         }
       });
     },
+    submitFile(){
+      this.doc.open = false;
+      this.getList();
+    },
     // 文件下载处理
     handleDownload(row) {
       var name = row.fileName;
@@ -401,8 +408,8 @@ export default {
       this.doc.isUploading = false;
       this.$alert(response.msg, this.$t('导入结果'), { dangerouslyUseHTMLString: true });
       this.form.id = this.doc.pId;
-      addFile(this.form)
-      this.getFileList()
+      // addFile(this.form)
+      this.$refs.upload.clearFiles();
       this.getList()
     },
     handleSee (row){

+ 36 - 1
ui/src/views/hcqhome.vue

@@ -18,6 +18,15 @@
         <div>
           <div class="card-head">
             <span class="card-name">装置年度培训完成情况</span>
+            <el-dropdown style="float: right ;cursor: pointer" placement="bottom" trigger="click" class="card-time">
+              <span class="el-dropdown-link">
+                年份 2023
+                <i class="el-icon-date"></i>
+              </span>
+              <el-dropdown-menu slot="dropdown">
+              <el-dropdown-item @click.native="chooseYear(this.searchFormField.year)">{{this.searchFormField.year}}</el-dropdown-item>
+            </el-dropdown-menu>
+            </el-dropdown>
           </div>
         </div>
         <div class="chart-wrapper">
@@ -33,6 +42,15 @@
         <div>
           <div class="card-head">
             <span class="card-name">{{ $t('新员工培训完成率') }}</span>
+            <el-dropdown style="float: right ;cursor: pointer" placement="bottom" trigger="click" class="card-time">
+              <span class="el-dropdown-link">
+                年份 2023
+                <i class="el-icon-date"></i>
+              </span>
+              <el-dropdown-menu slot="dropdown">
+                <el-dropdown-item @click.native="chooseYear(this.searchFormField.year)">{{this.searchFormField.year}}</el-dropdown-item>
+              </el-dropdown-menu>
+            </el-dropdown>
           </div>
         </div>
         <div class="chart-wrapper">
@@ -107,12 +125,29 @@ export default {
   },
   data() {
     return {
-      lineChartData: lineChartData.newVisitis
+      lineChartData: lineChartData.newVisitis,
+      // 获取当前年份
+      searchFormField: {
+        year: this.getNowTime(),
+      },
     }
   },
   methods: {
+    /** 获取当前年份 */
+    getNowTime() {
+      var now = new Date();
+      var year = now.getFullYear(); //得到年份
+      var defaultDate = `${year}`;
+      defaultDate = `${year}`
+      return defaultDate;
+      this.$set(this.searchFormField, "year", defaultDate);
+    },
     handleSetLineChartData(type) {
       this.lineChartData = lineChartData[type]
+    },
+    //变换年份
+    chooseYear (index) {
+
     }
   }
 }

+ 54 - 5
ui/src/views/training/matrix/index.vue

@@ -56,7 +56,8 @@
           v-hasPermi="['training:matrix:remove']"
         >{{ $t('删除') }}</el-button>
       </el-col>
-      <!--<el-col :span="1.5">
+
+      <el-col :span="1.5">
           <el-button
                   type="info"
                   icon="el-icon-upload2"
@@ -64,7 +65,7 @@
                   @click="handleImport"
                   v-hasPermi="['training:matrix:edit']"
           >导入</el-button>
-      </el-col>-->
+      </el-col>
       <el-col :span="1.5">
         <el-button
           type="warning"
@@ -73,6 +74,26 @@
           @click="handleExport"
           v-hasPermi="['training:matrix:export']"
         >{{ $t('导出') }}</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="multiple"
+          @click="handleBatchTraining"
+          v-hasPermi="['training:matrix:add']"
+        >添加到装置计划</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="multiple"
+          @click="handleBatchCompany"
+          v-hasPermi="['training:matrix:add']"
+        >添加到公司培训</el-button>
       </el-col>
 	  <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
@@ -253,11 +274,12 @@
 </template>
 
 <script>
-import { listMatrix, getMatrix, delMatrix, addMatrix, updateMatrix, exportMatrix, importTemplate} from "@/api/training/matrix";
+import { listMatrix,batchAddCompany,batchAddTraining, getMatrix, delMatrix, addMatrix, updateMatrix, exportMatrix, importTemplate} from "@/api/training/matrix";
 import { treeselect } from "@/api/system/dept";
 import { getToken } from "@/utils/auth";
 import Treeselect from "@riophae/vue-treeselect";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import {batchStatus} from "@/api/training/newstaff/firstplan";
 
 export default {
   name: "Matrix",
@@ -331,7 +353,7 @@ export default {
       // 查询参数
       queryParams: {
         pageNum: 1,
-        pageSize: 20,
+        pageSize: 50,
         trainingLevel: null
       },
       // 表单参数
@@ -674,7 +696,34 @@ export default {
       // 提交上传文件
       submitFileForm() {
           this.$refs.upload.submit();
-      }
+      },
+    /** 批量按钮操作 */
+    handleBatchTraining(row) {
+      const ids = row.id || this.ids;
+      this.$confirm('是否确认添加?', "警告", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function() {
+        return batchAddTraining(ids);
+      }).then(() => {
+        this.getList();
+        this.msgSuccess("操作成功");
+      })
+    },
+    handleBatchCompany(row){
+      const ids = row.id || this.ids;
+      this.$confirm('是否确认添加?', "警告", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function() {
+        return batchAddCompany(ids);
+      }).then(() => {
+        this.getList();
+        this.msgSuccess("操作成功");
+      })
+    }
   }
 };
 </script>

+ 21 - 1
ui/src/views/training/training/index.vue

@@ -39,6 +39,20 @@
           />
         </el-select>
       </el-form-item>
+        <el-form-item :label="$t('未参培情况')" prop="isNon" label-width="50">
+            <el-select v-model="queryParams.isNon" @change="handleQuery"    :placeholder="$t('请选择') + $t('是否未参培')" clearable size="small">
+              <el-option
+                key="0"
+                label="全部"
+                value="0"
+              />
+              <el-option
+                key="1"
+                label="未参培"
+                value="1"
+              />
+            </el-select>
+        </el-form-item>
       <el-form-item :label="$t('培训开始日期')" label-width="60">
         <el-date-picker
           v-model="chooseDate"
@@ -669,7 +683,8 @@ export default {
         isfinish: null,
         startDate: null,
         endDate: null,
-        trainingType: null
+        trainingType: null,
+        isNon: null,
       },
       trainingId: null,
       //地址
@@ -747,6 +762,11 @@ export default {
     },
    },
   created() {
+    const queryName = this.$route.query && this.$route.query.status;
+    if (queryName == '未参培'){
+      this.queryParams.isNon = "1"
+    }
+
     this.getStaffmar();
     this.getStaffmarAll();
     //设置表格高度对应屏幕高度