Jelajahi Sumber

Merge remote-tracking branch 'origin/matser' into matser

ZhuJiaHao 10 bulan lalu
induk
melakukan
74059b7e13
21 mengubah file dengan 985 tambahan dan 458 penghapusan
  1. 361 357
      ibps-bpmn-root/modules/bpmn-biz/src/main/java/com/lc/ibps/bpmn/repository/BpmInstRepository.java
  2. 3 0
      ibps-bpmn-root/modules/bpmn-biz/src/main/java/com/lc/ibps/bpmn/repository/BpmTaskRepository.java
  3. 6 0
      ibps-bpmn-root/modules/bpmn-biz/src/main/java/com/lc/ibps/bpmn/repository/impl/BpmInstRepositoryImpl.java
  4. 5 0
      ibps-bpmn-root/modules/bpmn-biz/src/main/java/com/lc/ibps/bpmn/repository/impl/BpmTaskRepositoryImpl.java
  5. 11 0
      ibps-bpmn-root/modules/bpmn-biz/src/main/java/com/lc/ibps/bpmn/service/impl/BpmProcInstServiceImpl.java
  6. 6 0
      ibps-bpmnbase-root/modules/bpmn-model/src/main/resources/com/lc/ibps/bpmn/persistence/mapping/BpmInst.map.xml
  7. 9 0
      ibps-bpmnbase-root/modules/bpmn-model/src/main/resources/com/lc/ibps/bpmn/persistence/mapping/BpmTask.map.xml
  8. 1 2
      ibps-common-root/modules/org-biz/src/main/java/com/lc/ibps/org/party/domain/PartyEmployee.java
  9. 13 0
      ibps-common-root/modules/org-biz/src/main/java/com/lc/ibps/org/party/repository/PartyRelRepository.java
  10. 12 0
      ibps-common-root/modules/org-biz/src/main/java/com/lc/ibps/org/party/repository/impl/PartyRelRepositoryImpl.java
  11. 18 0
      ibps-model-root/modules/org-model/src/main/resources/com/lc/ibps/org/party/persistence/mapping/PartyRel.map.xml
  12. 103 8
      ibps-provider-root/modules/provider-bpmn/src/main/java/com/lc/ibps/office/provider/BpmInitiatedProvider.java
  13. 216 0
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/aop/EquipmentDBLogAspect.java
  14. 9 3
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/business/controller/AuditController.java
  15. 3 1
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/business/controller/StatisticController.java
  16. 6 2
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/business/service/StatisticService.java
  17. 113 70
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/business/service/impl/StatisticServiceImpl.java
  18. 72 0
      ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/untils/settingUtil.java
  19. 2 2
      ibps-provider-root/modules/provider-business/src/main/resources/com/lc/ibps/klimsibps/mapping/UpdateDataTableMapper.xml
  20. 11 0
      ibps-provider-root/modules/provider-platform-default/src/main/java/com/lc/ibps/org/provider/PartyEmployeeProvider.java
  21. 5 13
      ibps-provider-root/modules/provider-platform/src/main/java/com/lc/ibps/platform/plan/job/EquipmentMaintenancePlanJob.java

+ 361 - 357
ibps-bpmn-root/modules/bpmn-biz/src/main/java/com/lc/ibps/bpmn/repository/BpmInstRepository.java

@@ -1,357 +1,361 @@
-package com.lc.ibps.bpmn.repository;
-
-import java.util.List;
-
-import com.lc.ibps.api.base.page.Page;
-import com.lc.ibps.api.base.query.QueryFilter;
-import com.lc.ibps.base.framework.repository.IRepository;
-import com.lc.ibps.bpmn.api.cmd.ProcInstCmd;
-import com.lc.ibps.bpmn.api.model.define.IBpmProcDefine;
-import com.lc.ibps.bpmn.api.model.define.IBpmProcExtendDefine;
-import com.lc.ibps.bpmn.api.model.inst.IBpmProcInst;
-import com.lc.ibps.bpmn.domain.BpmInst;
-import com.lc.ibps.bpmn.model.statistics.RunningStatVO;
-import com.lc.ibps.bpmn.persistence.entity.BpmInstPo;
-
-/**
- * 流程实例
 仓库接口
- *
- *<pre> 
- * 开发公司:广州流辰信息技术有限公司
- * 开发人员:luodx
- * 邮箱地址:1198506318@qq.com
- * 创建时间:2016-12-13 09:25:42
- *</pre>
- */
-public interface BpmInstRepository extends IRepository<String, BpmInstPo,BpmInst>{
-	
-	/**
-	 * 构建流程定义标题
-	 * @param bpmDefinition
-	 * @param procInstCmd
-	 * @return 
-	 * String
-	 */
-	String getSubject(IBpmProcDefine<IBpmProcExtendDefine> bpmDefinition, ProcInstCmd procInstCmd,BpmInstPo defaultBpmProcessInstance);
-	
-	/**
-	 * 根据BPMN流程实例获取流程实例数据。
-	 * @param bpmnInstId
-	 * @return 
-	 * DefaultBpmProcessInstance
-	 */
-	BpmInstPo getByInstId(String bpmnInstId);
-	
-	/**
-	 * 
-	 * 根据主键Id获取流程实例,如果实例没有就到结束的流程实例查找
-	 *
-	 * @param procInstId
-	 * @return
-	 */
-	BpmInstPo getBpmInstById(String instId);
-	
-	/**
-	 * 
-	 * 根据主键Id获取结束流程实例历史信息
-	 *
-	 * @param procInstId
-	 * @return
-	 */
-	BpmInstPo getHistoryById(String id);
-	
-	/**
-	 * 
-	 * 根据实例Id获取结束流程实例
-	 *
-	 * @param instId 实例ID
-	 * @return
-	 */
-	BpmInstPo getHistoryByInstId(String instId);
-	
-	/**
-	 * 
-	 * 根据用户ID获取相关流程实例信息 
-	 *
-	 * @param userId 用户ID
-	 * @return
-	 */
-	List<BpmInstPo> findByUserId(String userId);
-	
-	/**
-	 * 
-	 * 根据用户ID和分页信息获取相关流程实例信息
-	 *
-	 * @param userId 用户ID
-	 * @param page 分页
-	 * @return
-	 */
-	List<BpmInstPo> queryByUserId(String userId,Page page);
-	
-	/**
-	 * 
-	 * 根据用户ID和过滤查询条件获取相关流程实例信息
-	 *
-	 * @param userId 用户Id
-	 * @param queryFiler 过滤查询条件
-	 * @return
-	 */
-	List<BpmInstPo> queryByUserId(String userId, QueryFilter queryFiler);
-	
-	/**
-	 * 按用户Id及组列表查找实例
-	 * @param userId
-	 * @param groupList
-	 * @return
-	 */
-	List<BpmInstPo> findByUserIdGroupList(String userId,List<String> groupList);
-	
-	/**
-	 * 按用户Id及组列表查找实例并且分页
-	 * @param userId
-	 * @param groupList
-	 * @param page
-	 * @return
-	 */
-	List<BpmInstPo> queryByUserIdGroupList(String userId,List<String> groupList,Page page);
-	
-	/**
-	 * 按用户Id及组列表查找实例并且分页
-	 * @param userId
-	 * @param groupList
-	 * @param page
-	 * @return
-	 */
-	List<BpmInstPo> queryByUserIdGroupList(String userId,List<String> groupList,QueryFilter queryFilter);
-	
-	/**
-	 * 按人员查找其参与的流程实例
-	 * @param usreId
-	 * @return 
-	 * List&lt;BpmInstPo>
-	 */
-	List<BpmInstPo> findByAttendUserId(String usreId);
-	
-	/**
-	 * 按人员查找其参与的流程实例并分页返回结果
-	 * @param usreId
-	 * @param page
-	 * @return 
-	 * List&lt;BpmInstPo>
-	 */
-	List<BpmInstPo> queryByAttendUserId(String usreId,Page page);
-	
-	/**
-	 * 根据人员查询并返回查询结果。
-	 * @param usreId
-	 * @param queryFilter
-	 * @return 
-	 * List&lt;BpmInstPo>
-	 */
-	List<BpmInstPo> queryByAttendUserId(String usreId,QueryFilter queryFilter);
-	
-	/**
-	 * 根据流程定义获取流程实例列表。
-	 * @param bpmnDefId
-	 * @return 
-	 * List&lt;BpmInstPo>
-	 */
-	List<BpmInstPo> findByBpmnDefKey(String defKey);
-	
-	/**
-	 *  获取我的请求。
-	 * @param userId
-	 * @param queryFilter
-	 * @return  List&lt;BpmInstPo>
-	 */
-	List<BpmInstPo> queryRequest(String userId, QueryFilter queryFilter);
-	
-	Integer queryRequestCount(String userId, QueryFilter queryFilter);
-	
-	/**
-	 *  获取我的办结。
-	 * @param userId
-	 * @param queryFilter
-	 * @return  List&lt;BpmInstPo>
-	 */
-	Integer queryCompletedCount(String userId, QueryFilter queryFilter);
-	
-	/**
-	 *  获取我的办结。
-	 * @param userId
-	 * @param queryFilter
-	 * @return  List&lt;BpmInstPo>
-	 */
-	List<BpmInstPo> queryCompleted(String userId, QueryFilter queryFilter);
-	
-	/**
-	 *  获取我发起的草稿。
-	 * @param userId
-	 * @param queryFilter
-	 * @return  List&lt;BpmInstPo>
-	 */
-	List<BpmInstPo> queryDrafts(String userId,QueryFilter queryFilter);
-	
-	Integer queryDraftsCount(String userId,QueryFilter queryFilter);
-	
-	/**
-	 *  获取已办事宜。
-	 * @param userId
-	 * @param queryFilter
-	 * @return  List&lt;BpmInstPo>
-	 */
-	List<BpmInstPo> queryHandled(String userId, QueryFilter queryFilter);
-	
-	/**
-	 * 根据父ID获取所有的实例子列表。 
-	 * @param parentId	父ID。
-	 * @param includeSelf	是否包括当前实例数据。
-	 * @return 
-	 * List&lt;String>
-	 */
-	List<BpmInstPo> findByParentId(String parentId, boolean includeSelf);
-	
-	/**
-	 * 根据父ID获取所有的实例子列表。 
-	 * @param parentId	父ID。
-	 * @param includeSelf	是否包括当前实例数据。
-	 * @return 
-	 * List&lt;String>
-	 */
-	List<String> findIdsByParentId(String parentId, boolean includeSelf);
-	
-	/**
-	 * 按用户的授权内容去查询列表
-	 * @param queryFilter
-	 * @return
-	 */
-	List<BpmInstPo> query(QueryFilter queryFilter, String curUserId, boolean isSuper);
-	
-	/**
-	 * 按用户的授权内容去统计列表
-	 *
-	 * @param queryFilter
-	 * @return
-	 */
-	List<RunningStatVO> queryRunningStat(QueryFilter queryFilter, String curUserId, boolean isSuper);
-	
-	String cannotDelete(QueryFilter queryFilter, String curUser, String... ids);
-	
-	/**
-	 * 根据流程实例ID查询顶级的流程实例。
-	 * @param instance	
-	 * @return IBpmProcInst
-	 */
-	IBpmProcInst getTopBpmProcInst(String instId);
-	
-	/**
-	 * 根据流程实例查询顶级的流程实例。
-	 * @param instance
-	 * @return IBpmProcInst
-	 */
-	IBpmProcInst getTopBpmProcInst(IBpmProcInst inst);
-	
-	/**
-	 * 根据流程定义ID获取实例列表。
-	 * @param defId
-	 * @return 
-	 * List&lt;BpmInstPo>
-	 */
-	List<BpmInstPo> findByDefId(String defId);
-
-	
-	/**
-	 * 根据业务主键获取历史的流程实例
-	 * @param bizKey
-	 * @return
-	 */
-	public IBpmProcInst getHistoryByBizKey(String bizKey);
-	
-	/**
-	 * 根据业务主键获取正在运行的流程实例
-	 * @param bizKey
-	 * @return
-	 */
-	public IBpmProcInst getInfoByBizKey(String bizKey);
-	
-	/**
-	 * 我审批过且已经办结的事务
-	 * @param userId
-	 * @param queryFilter
-	 * @return 
-	 * List&lt;BpmInstPo>
-	 */
-	public Integer queryEndHandledCount(String userId, QueryFilter queryFilter);
-	
-	/**
-	 * 我审批过且已经办结的事务
-	 * @param userId
-	 * @param queryFilter
-	 * @return 
-	 * List&lt;BpmInstPo>
-	 */
-	public List<BpmInstPo> queryEndHandled(String userId, QueryFilter queryFilter);
-
-	/**
-	 * 
-	 * 根据流程定义key和业务主键获取相关流程实例
-	 *
-	 * @param defKey
-	 * @param bizKey
-	 * @return
-	 */
-	public IBpmProcInst getByDefKeyBizKey(String defKey, String bizKey);
-	
-	/**
-	 * 获得可撤销的任务
-	 * @param userId
-	 * @param queryFilter
-	 * @return 
-	 * List&lt;BpmInstPo>
-	 */
-	public List<BpmInstPo> queryRevoke(String userId, QueryFilter queryFilter);
-	
-	/**
-	 *  获取我的全部已办事宜。
-	 * @param queryFilter
-	 * @return  List&lt;BpmInstPo>
-	 */
-	public Integer queryAllHandledCount(QueryFilter queryFilter);
-	
-	/**
-	 *  获取我的全部已办事宜。
-	 * @param queryFilter
-	 * @return  List&lt;BpmInstPo>
-	 */
-	public List<BpmInstPo> queryAllHandled(QueryFilter queryFilter);
-
-	/**
-	 * 
-	 * 根据流程实例id集合获取act流程实例ID列表
-	 *
-	 * @param instIdList
-	 * @return
-	 */
-	public List<String> findInstIdsByIds(List<String> instIdList);
-
-	/**
-	 * 
-	 * 根据流程键和是否正式获取流程实例。
-	 *
-	 * @param defKey
-	 * @param formalNo
-	 * @return
-	 */
-	public List<BpmInstPo> findByDefKeyFormal(String defKey, String formalNo);
-	
-	/**
-	 * 
-	 * 根据流程定义ID查询数据
-	 *
-	 * @param defKey
-	 * @param formalNo
-	 * @return
-	 */
-	public List<BpmInstPo> findByDefId(List<String> defIds);
-
-}
+package com.lc.ibps.bpmn.repository;
+
+import java.util.List;
+
+import com.lc.ibps.api.base.page.Page;
+import com.lc.ibps.api.base.query.QueryFilter;
+import com.lc.ibps.base.framework.repository.IRepository;
+import com.lc.ibps.bpmn.api.cmd.ProcInstCmd;
+import com.lc.ibps.bpmn.api.model.define.IBpmProcDefine;
+import com.lc.ibps.bpmn.api.model.define.IBpmProcExtendDefine;
+import com.lc.ibps.bpmn.api.model.inst.IBpmProcInst;
+import com.lc.ibps.bpmn.domain.BpmInst;
+import com.lc.ibps.bpmn.model.statistics.RunningStatVO;
+import com.lc.ibps.bpmn.persistence.entity.BpmInstPo;
+
+/**
+ * 流程实例
+ 仓库接口
+ *
+ *<pre> 
+ * 开发公司:广州流辰信息技术有限公司
+ * 开发人员:luodx
+ * 邮箱地址:1198506318@qq.com
+ * 创建时间:2016-12-13 09:25:42
+ *</pre>
+ */
+public interface BpmInstRepository extends IRepository<String, BpmInstPo,BpmInst>{
+	
+	/**
+	 * 构建流程定义标题
+	 * @param bpmDefinition
+	 * @param procInstCmd
+	 * @return 
+	 * String
+	 */
+	String getSubject(IBpmProcDefine<IBpmProcExtendDefine> bpmDefinition, ProcInstCmd procInstCmd,BpmInstPo defaultBpmProcessInstance);
+	
+	/**
+	 * 根据BPMN流程实例获取流程实例数据。
+	 * @param bpmnInstId
+	 * @return 
+	 * DefaultBpmProcessInstance
+	 */
+	BpmInstPo getByInstId(String bpmnInstId);
+	
+	/**
+	 * 
+	 * 根据主键Id获取流程实例,如果实例没有就到结束的流程实例查找
+	 *
+	 * @param procInstId
+	 * @return
+	 */
+	BpmInstPo getBpmInstById(String instId);
+	
+	/**
+	 * 
+	 * 根据主键Id获取结束流程实例历史信息
+	 *
+	 * @param procInstId
+	 * @return
+	 */
+	BpmInstPo getHistoryById(String id);
+	
+	/**
+	 * 
+	 * 根据实例Id获取结束流程实例
+	 *
+	 * @param instId 实例ID
+	 * @return
+	 */
+	BpmInstPo getHistoryByInstId(String instId);
+	
+	/**
+	 * 
+	 * 根据用户ID获取相关流程实例信息 
+	 *
+	 * @param userId 用户ID
+	 * @return
+	 */
+	List<BpmInstPo> findByUserId(String userId);
+	
+	/**
+	 * 
+	 * 根据用户ID和分页信息获取相关流程实例信息
+	 *
+	 * @param userId 用户ID
+	 * @param page 分页
+	 * @return
+	 */
+	List<BpmInstPo> queryByUserId(String userId,Page page);
+	
+	/**
+	 * 
+	 * 根据用户ID和过滤查询条件获取相关流程实例信息
+	 *
+	 * @param userId 用户Id
+	 * @param queryFiler 过滤查询条件
+	 * @return
+	 */
+	List<BpmInstPo> queryByUserId(String userId, QueryFilter queryFiler);
+	
+	/**
+	 * 按用户Id及组列表查找实例
+	 * @param userId
+	 * @param groupList
+	 * @return
+	 */
+	List<BpmInstPo> findByUserIdGroupList(String userId,List<String> groupList);
+	
+	/**
+	 * 按用户Id及组列表查找实例并且分页
+	 * @param userId
+	 * @param groupList
+	 * @param page
+	 * @return
+	 */
+	List<BpmInstPo> queryByUserIdGroupList(String userId,List<String> groupList,Page page);
+	
+	/**
+	 * 按用户Id及组列表查找实例并且分页
+	 * @param userId
+	 * @param groupList
+	 * @param page
+	 * @return
+	 */
+	List<BpmInstPo> queryByUserIdGroupList(String userId,List<String> groupList,QueryFilter queryFilter);
+	
+	/**
+	 * 按人员查找其参与的流程实例
+	 * @param usreId
+	 * @return 
+	 * List&lt;BpmInstPo>
+	 */
+	List<BpmInstPo> findByAttendUserId(String usreId);
+	
+	/**
+	 * 按人员查找其参与的流程实例并分页返回结果
+	 * @param usreId
+	 * @param page
+	 * @return 
+	 * List&lt;BpmInstPo>
+	 */
+	List<BpmInstPo> queryByAttendUserId(String usreId,Page page);
+	
+	/**
+	 * 根据人员查询并返回查询结果。
+	 * @param usreId
+	 * @param queryFilter
+	 * @return 
+	 * List&lt;BpmInstPo>
+	 */
+	List<BpmInstPo> queryByAttendUserId(String usreId,QueryFilter queryFilter);
+	
+	/**
+	 * 根据流程定义获取流程实例列表。
+	 * @param bpmnDefId
+	 * @return 
+	 * List&lt;BpmInstPo>
+	 */
+	List<BpmInstPo> findByBpmnDefKey(String defKey);
+	
+	/**
+	 *  获取我的请求。
+	 * @param userId
+	 * @param queryFilter
+	 * @return  List&lt;BpmInstPo>
+	 */
+	List<BpmInstPo> queryRequest(String userId, QueryFilter queryFilter);
+	
+	Integer queryRequestCount(String userId, QueryFilter queryFilter);
+	
+	/**
+	 *  获取我的办结。
+	 * @param userId
+	 * @param queryFilter
+	 * @return  List&lt;BpmInstPo>
+	 */
+	Integer queryCompletedCount(String userId, QueryFilter queryFilter);
+	
+	/**
+	 *  获取我的办结。
+	 * @param userId
+	 * @param queryFilter
+	 * @return  List&lt;BpmInstPo>
+	 */
+	List<BpmInstPo> queryCompleted(String userId, QueryFilter queryFilter);
+	
+	/**
+	 *  获取我发起的草稿。
+	 * @param userId
+	 * @param queryFilter
+	 * @return  List&lt;BpmInstPo>
+	 */
+	List<BpmInstPo> queryDrafts(String userId,QueryFilter queryFilter);
+	
+	Integer queryDraftsCount(String userId,QueryFilter queryFilter);
+	
+	/**
+	 *  获取已办事宜。
+	 * @param userId
+	 * @param queryFilter
+	 * @return  List&lt;BpmInstPo>
+	 */
+	List<BpmInstPo> queryHandled(String userId, QueryFilter queryFilter);
+	
+	/**
+	 * 根据父ID获取所有的实例子列表。 
+	 * @param parentId	父ID。
+	 * @param includeSelf	是否包括当前实例数据。
+	 * @return 
+	 * List&lt;String>
+	 */
+	List<BpmInstPo> findByParentId(String parentId, boolean includeSelf);
+	
+	/**
+	 * 根据父ID获取所有的实例子列表。 
+	 * @param parentId	父ID。
+	 * @param includeSelf	是否包括当前实例数据。
+	 * @return 
+	 * List&lt;String>
+	 */
+	List<String> findIdsByParentId(String parentId, boolean includeSelf);
+	
+	/**
+	 * 按用户的授权内容去查询列表
+	 * @param queryFilter
+	 * @return
+	 */
+	List<BpmInstPo> query(QueryFilter queryFilter, String curUserId, boolean isSuper);
+	
+	/**
+	 * 按用户的授权内容去统计列表
+	 *
+	 * @param queryFilter
+	 * @return
+	 */
+	List<RunningStatVO> queryRunningStat(QueryFilter queryFilter, String curUserId, boolean isSuper);
+	
+	String cannotDelete(QueryFilter queryFilter, String curUser, String... ids);
+	
+	/**
+	 * 根据流程实例ID查询顶级的流程实例。
+	 * @param instance	
+	 * @return IBpmProcInst
+	 */
+	IBpmProcInst getTopBpmProcInst(String instId);
+	
+	/**
+	 * 根据流程实例查询顶级的流程实例。
+	 * @param instance
+	 * @return IBpmProcInst
+	 */
+	IBpmProcInst getTopBpmProcInst(IBpmProcInst inst);
+	
+	/**
+	 * 根据流程定义ID获取实例列表。
+	 * @param defId
+	 * @return 
+	 * List&lt;BpmInstPo>
+	 */
+	List<BpmInstPo> findByDefId(String defId);
+
+	
+	/**
+	 * 根据业务主键获取历史的流程实例
+	 * @param bizKey
+	 * @return
+	 */
+	public IBpmProcInst getHistoryByBizKey(String bizKey);
+	
+	/**
+	 * 根据业务主键获取正在运行的流程实例
+	 * @param bizKey
+	 * @return
+	 */
+	public IBpmProcInst getInfoByBizKey(String bizKey);
+	
+	/**
+	 * 我审批过且已经办结的事务
+	 * @param userId
+	 * @param queryFilter
+	 * @return 
+	 * List&lt;BpmInstPo>
+	 */
+	public Integer queryEndHandledCount(String userId, QueryFilter queryFilter);
+	
+	/**
+	 * 我审批过且已经办结的事务
+	 * @param userId
+	 * @param queryFilter
+	 * @return 
+	 * List&lt;BpmInstPo>
+	 */
+	public List<BpmInstPo> queryEndHandled(String userId, QueryFilter queryFilter);
+
+	/**
+	 * 
+	 * 根据流程定义key和业务主键获取相关流程实例
+	 *
+	 * @param defKey
+	 * @param bizKey
+	 * @return
+	 */
+	public IBpmProcInst getByDefKeyBizKey(String defKey, String bizKey);
+	
+	/**
+	 * 获得可撤销的任务
+	 * @param userId
+	 * @param queryFilter
+	 * @return 
+	 * List&lt;BpmInstPo>
+	 */
+	public List<BpmInstPo> queryRevoke(String userId, QueryFilter queryFilter);
+	
+	/**
+	 *  获取我的全部已办事宜。
+	 * @param queryFilter
+	 * @return  List&lt;BpmInstPo>
+	 */
+	public Integer queryAllHandledCount(QueryFilter queryFilter);
+	
+	/**
+	 *  获取我的全部已办事宜。
+	 * @param queryFilter
+	 * @return  List&lt;BpmInstPo>
+	 */
+	public List<BpmInstPo> queryAllHandled(QueryFilter queryFilter);
+
+	/**
+	 * 
+	 * 根据流程实例id集合获取act流程实例ID列表
+	 *
+	 * @param instIdList
+	 * @return
+	 */
+	public List<String> findInstIdsByIds(List<String> instIdList);
+
+	/**
+	 * 
+	 * 根据流程键和是否正式获取流程实例。
+	 *
+	 * @param defKey
+	 * @param formalNo
+	 * @return
+	 */
+	public List<BpmInstPo> findByDefKeyFormal(String defKey, String formalNo);
+	
+	/**
+	 * 
+	 * 根据流程定义ID查询数据
+	 *
+	 * @param defKey
+	 * @param formalNo
+	 * @return
+	 */
+	public List<BpmInstPo> findByDefId(List<String> defIds);
+
+
+	public BpmInstPo getById(String id);
+
+}

+ 3 - 0
ibps-bpmn-root/modules/bpmn-biz/src/main/java/com/lc/ibps/bpmn/repository/BpmTaskRepository.java

@@ -263,5 +263,8 @@ public interface BpmTaskRepository extends IRepository<String, BpmTaskPo,BpmTask
 	 * @since 3.2.4
 	 */
 	public Integer queryByShiftCount(QueryFilter queryFilter);
+
+
+	public void removeById(String ids);
 	
 }

+ 6 - 0
ibps-bpmn-root/modules/bpmn-biz/src/main/java/com/lc/ibps/bpmn/repository/impl/BpmInstRepositoryImpl.java

@@ -801,4 +801,10 @@ public class BpmInstRepositoryImpl extends AbstractRepository<String, BpmInstPo,
 		return findByKey("findIdsByDefId", "findIdsByDefId", b().a("defIds", defIds).p());
 	}
 
+	@Override
+	public BpmInstPo  getById(String id) {
+		BpmInstPo po = new BpmInstPo();
+		List<BpmInstPo> poList = findByKey("getById", "getById", b().a("id", id).p());
+		return poList.size() > 0 ? poList.get(0):po;
+	}
 }

+ 5 - 0
ibps-bpmn-root/modules/bpmn-biz/src/main/java/com/lc/ibps/bpmn/repository/impl/BpmTaskRepositoryImpl.java

@@ -515,4 +515,9 @@ public class BpmTaskRepositoryImpl extends AbstractRepository<String, BpmTaskPo,
 		return bpmTaskQueryDao().countByKey(countSqlKey, queryFilter.getParams());
 	}
 
+	@Override
+	public void removeById(String ids) {
+		findByKey("removeById", "removeById",
+				b().a("ids", ids).p());
+	}
 }

+ 11 - 0
ibps-bpmn-root/modules/bpmn-biz/src/main/java/com/lc/ibps/bpmn/service/impl/BpmProcInstServiceImpl.java

@@ -75,6 +75,7 @@ import java.util.Map.Entry;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Future;
+import java.util.stream.Collectors;
 
 /**
  * 流程实例服务类
@@ -122,6 +123,11 @@ public class BpmProcInstServiceImpl implements BpmProcInstService {
 			throw new RuntimeException("流程实例命令对象为空!");
 		}
 
+		BpmInstPo instPo = bpmInstRepository.getById(procInstCmd.getInstId());
+		if(BeanUtils.isNotEmpty(instPo) && "running".equals(instPo.getStatus())){
+			logger.warn("当前数据已提交流程审批,无需重复提交,ID:" + instPo.getId());
+			throw new RuntimeException("当前数据已有对应的流程数据,无需重复提交");
+		}
 		String step = "startProcInst";
 		String stepId = UniqueIdUtil.getId();
 		// 主键从cmd中获取
@@ -785,6 +791,11 @@ public class BpmProcInstServiceImpl implements BpmProcInstService {
 					logger.info(String.format("deleted process instance history with id %s",hisPo.getId()));
 				}
 			}
+//				List<String> taskList = new ArrayList<>();
+//				taskList.add(bizKey);
+//				//执行删除task的数据
+//				List<BpmTaskPo> taskPoList = bpmTaskRepository.findByInst(taskList);
+//				bpmTaskRepository.removeById(taskPoList.stream().map(BpmTaskPo::getId).collect(Collectors.joining(",")));
 		}
 
 	}

+ 6 - 0
ibps-bpmnbase-root/modules/bpmn-model/src/main/resources/com/lc/ibps/bpmn/persistence/mapping/BpmInst.map.xml

@@ -936,5 +936,11 @@
         	#{defId} 
     	</foreach>
 	</select>
+
+	<select id="getById" parameterType="java.util.Map" resultMap="BpmInstPo">
+		SELECT <include refid="columns"/>
+		FROM IBPS_BPM_INST
+		WHERE ID_ = #{id,jdbcType=VARCHAR}
+	</select>
 	
 </mapper>

+ 9 - 0
ibps-bpmnbase-root/modules/bpmn-model/src/main/resources/com/lc/ibps/bpmn/persistence/mapping/BpmTask.map.xml

@@ -106,6 +106,15 @@
 			${limitSql}
 		</if> -->
 	</delete>
+
+	<delete id="removeById" parameterType="java.lang.String">
+		DELETE FROM IBPS_BPM_TASKS
+		WHERE
+		<if test="@o.Ognl@isNotEmpty(ids)">
+			FIND_IN_SET(ID_, #{ids,jdbcType=VARCHAR})
+		</if>
+	</delete>
+
 	
 	<sql id="querySql">
 		SELECT <include refid="queryColumns"/> FROM IBPS_BPM_TASKS 

+ 1 - 2
ibps-common-root/modules/org-biz/src/main/java/com/lc/ibps/org/party/domain/PartyEmployee.java

@@ -1078,8 +1078,7 @@ public class PartyEmployee extends AbstractDomain<String, PartyEmployeePo> {
 			// 设置员工-岗位关系
 			if(positionVo.getIsMainPost()){
 				// 记录主岗位关系
-				savePartyRel(positionVo.getId(), 
-						PartyType.POSITION, userId, PartyType.EMPLOYEE, PartyRelType.MAIN_POST);
+				savePartyRel(positionVo.getId(), PartyType.POSITION, userId, PartyType.EMPLOYEE, PartyRelType.MAIN_POST);
 			}
 			else{
                 partyRelRepository.newInstance().deleteByMSB(positionVo.getId(), userId, PartyRelType.MAIN_POST);

+ 13 - 0
ibps-common-root/modules/org-biz/src/main/java/com/lc/ibps/org/party/repository/PartyRelRepository.java

@@ -19,6 +19,19 @@ import com.lc.ibps.org.party.persistence.entity.PartyRelPo;
  * </pre>
  */
 public interface PartyRelRepository extends IRepository<String, PartyRelPo,PartyRel>{
+
+
+	/**
+	 * 根据用户id查询ibps_party_rel表中是否有主部门信息的数据
+	 *
+	 */
+	public List<PartyRelPo> getBySubIdBiz(String id);
+
+	/**
+	 * 更具ids删除rel表的数据,ids格式(xxx,xxx,xx...)
+	 * @param ids
+	 */
+	public void remoBySubId(String ids);
 	
 	/**
 	 * 

+ 12 - 0
ibps-common-root/modules/org-biz/src/main/java/com/lc/ibps/org/party/repository/impl/PartyRelRepositoryImpl.java

@@ -50,6 +50,18 @@ public class PartyRelRepositoryImpl extends AbstractRepository<String, PartyRelP
 		return CacheKeyConstants.Region.REGION_IBPS_PARTY;
 	}
 
+
+	@Override
+	public List<PartyRelPo> getBySubIdBiz(String id){
+		return findByKey("getBySubIdBiz", "getBySubIdBiz",
+				b().a("subPid", id).p());
+	}
+	@Override
+	public void remoBySubId(String ids){
+		findByKey("remoBySubId", "remoBySubId",
+				b().a("ids", ids).p());
+	}
+
     @Override
 	public List<PartyRelPo> queryPositionRoleRel(String id, Page page) {
     	DefaultQueryFilter queryFilter = new DefaultQueryFilter();

+ 18 - 0
ibps-model-root/modules/org-model/src/main/resources/com/lc/ibps/org/party/persistence/mapping/PartyRel.map.xml

@@ -146,6 +146,14 @@
 		BIZ_ = #{biz,jdbcType=VARCHAR}
 	</delete>
 
+	<delete id="remoBySubId" parameterType="java.util.Map">
+		DELETE FROM IBPS_PARTY_REL
+		WHERE
+		<if test="@o.Ognl@isNotEmpty(ids)">
+		      FIND_IN_SET(ID_, #{ids,jdbcType=VARCHAR})
+		</if>
+	</delete>
+
 	<!-- use getByMainIdSubIdBiz instead -->
 	<select id="getByMSB" parameterType="java.util.Map" resultMap="PartyRel">
 		SELECT <include refid="columns"/>
@@ -178,6 +186,16 @@
 		AND SUB_PID_=#{subPid,jdbcType=VARCHAR}
 		AND BIZ_ =#{biz,jdbcType=VARCHAR}
 	</select>
+
+
+	<select id="getBySubIdBiz" parameterType="java.util.Map" resultMap="PartyRel">
+		SELECT <include refid="columns"/> FROM IBPS_PARTY_REL
+		WHERE
+		SUB_PID_ = #{subPid,jdbcType=VARCHAR}
+		AND MAIN_TYPE_ = 'position'
+		AND BIZ_ = 'mainPost'
+	</select>
+
 	
 	<select id="findByMainPidOrSubPid" parameterType="java.util.Map" resultMap="PartyRel">
 		SELECT <include refid="columns"/> FROM IBPS_PARTY_REL

+ 103 - 8
ibps-provider-root/modules/provider-bpmn/src/main/java/com/lc/ibps/office/provider/BpmInitiatedProvider.java

@@ -1,6 +1,7 @@
 package com.lc.ibps.office.provider;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.Callable;
@@ -9,8 +10,13 @@ import java.util.function.Function;
 
 import javax.annotation.Resource;
 
+import com.alibaba.fastjson.JSONObject;
 import com.lc.ibps.base.core.util.Collections;
 import com.lc.ibps.base.framework.table.ICommonDao;
+import com.lc.ibps.bpmn.service.impl.BpmProcInstServiceImpl;
+import org.codehaus.jackson.map.ObjectMapper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.slf4j.event.Level;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -90,6 +96,8 @@ public class BpmInitiatedProvider extends GenericProvider implements IBpmInitiat
 	private ITypeService typeService;
 	@Autowired
 	private IBpmReceivedService bpmReceivedService;
+
+	private static final Logger logger = LoggerFactory.getLogger(BpmInitiatedProvider.class);
 	
 	@ApiOperation(value = "流程仪表盘", notes = "流程仪表盘")
 	@Override
@@ -1427,6 +1435,18 @@ public class BpmInitiatedProvider extends GenericProvider implements IBpmInitiat
 		try {
 			//构造领域对象和删除数据
 			BpmInst bpmInst = bpmInstRepository.newInstance();
+			for (String item:ids) {
+				BpmInstPo instPo = bpmInstRepository.getById(item);
+				if(BeanUtils.isNotEmpty(instPo) && "draft".equals(instPo.getStatus())){ //首页删除暂存时先判断当前数据是否已经在其他窗口提交了,防止多流程对应同主键
+					logger.warn("当前暂存数据可以进行删除,ID:" + instPo.getId());
+				}else{
+					result.setMessage("当前选择数据中有已提交的数据,请刷新后在操作");
+					logger.warn("当前暂存数据不可以进行删除,ID:" + instPo.getId());
+					result.setState( StateEnum.WARN.getCode());
+					return result;
+					//throw new Exception("当前选择数据中有已提交的数据,请刷新后在操作");
+				}
+			}
 			bpmInst.deleteByIds(ids);
 			result.setMessage(I18nUtil.getMessage("com.lc.ibps.office.provider.BpmInitiatedProvider.removeDraft"));
 		} catch (Exception e) {
@@ -1481,13 +1501,23 @@ public class BpmInitiatedProvider extends GenericProvider implements IBpmInitiat
 				infobox2.setAlias("myTraining");
 				infobox2.setDataText("-1");
 				infobox2.setAccessToken(ContextUtil.getCurrentAccessToken());
-				List<Map<String,Object>> objects =
-						(List<Map<String, Object>>) commonDao.query("SELECT COUNT(1) AS total FROM v_wodepeixun WHERE peixunrenyuan=#{p0} and shi_fou_guo_shen_ NOT IN ('已删除','未发布')",
-								new String[]{currentUserId});
-				int allNum = Integer.parseInt(objects.get(0).get("total").toString());
-				objects =
-						(List<Map<String, Object>>) commonDao.query("SELECT COUNT(1) AS total FROM v_wodepeixun WHERE peixunrenyuan=#{p0} and shi_fou_guo_shen_ NOT IN ('已删除','未发布','已结束')",
-								new String[]{currentUserId});
+				List<Map<String,Object>> objects = new  ArrayList<>();
+				int allNum ;
+				//获取setting配置判断培训版本
+				String setting = ContextUtil.getSetting();
+				ObjectMapper objectMapper = new ObjectMapper();
+				HashMap<String, Object> map =(HashMap) objectMapper.readValue(setting, Map.class);
+				HashMap<String, Object> option = (HashMap)map.get("pxSpectacularsOption");
+				String ver = option.get("version").toString();
+				if(BeanUtils.isNotEmpty(ver) && "1".equals(ver)) {
+					objects=(List<Map<String, Object>>) commonDao.query("SELECT COUNT(1) AS total FROM v_wodepeixun WHERE peixunrenyuan=#{p0} and pei_xun_zhuang_ta NOT IN ('已删除','未发布')",	new String[]{currentUserId});
+					allNum = Integer.parseInt(objects.get(0).get("total").toString());
+					objects =(List<Map<String, Object>>) commonDao.query("SELECT COUNT(1) AS total FROM v_wodepeixun WHERE peixunrenyuan=#{p0} and pei_xun_zhuang_ta NOT IN ('已删除','未发布','已结束')",new String[]{currentUserId});
+				}else {
+					objects = (List<Map<String, Object>>) commonDao.query("SELECT COUNT(1) AS total FROM v_wodepeixun WHERE peixunrenyuan=#{p0} and shi_fou_guo_shen_ NOT IN ('已删除','未发布')",new String[]{currentUserId});
+					allNum = Integer.parseInt(objects.get(0).get("total").toString());
+					objects = (List<Map<String, Object>>) commonDao.query("SELECT COUNT(1) AS total FROM v_wodepeixun WHERE peixunrenyuan=#{p0} and shi_fou_guo_shen_ NOT IN ('已删除','未发布','已结束')",new String[]{currentUserId});
+				}
 				int unNum = Integer.parseInt(objects.get(0).get("total").toString());
 				infobox2.setDataText(String.format("%d,%d,%d",allNum,allNum-unNum,unNum));
 				infobox2.setMessage(String.format("总数:%d,已完成:%d,未完成:%d",allNum,allNum-unNum,unNum));
@@ -1531,10 +1561,64 @@ public class BpmInitiatedProvider extends GenericProvider implements IBpmInitiat
 									"	WHERE di_dian_=#{p0} AND DATE(create_time_)=CURDATE() AND shi_fou_guo_shen_='待处理'", new String[]{(String)object3.get(0).get("id_")});
 					infobox2.setDataText(object4.get(0).get("total").toString());
 				}
+				//恒生医院专用配置-对应任务4792的改造同步 可推送人为空的按部门推送,不为空则推送指定的推送人
+				if(BeanUtils.isNotEmpty(ContextUtil.getSetting())){
+					JSONObject configMap = JSONObject.parseObject(ContextUtil.getSetting());
+					String HSYY = configMap.getString("HSYY");
+					if(BeanUtils.isNotEmpty(HSYY) && HSYY.equals("true")){
+						String sql ="select ID_,NAME_,POSITIONS_ from ibps_party_employee  where id_= '"+currentUserId+"'";
+						Map<String, Object> employeeMap = commonDao.queryOne(sql);
+						String positions = getStringFromMap(employeeMap,"POSITIONS_");
+						String sql2 ="SELECT COUNT(*) as total_count\n" +
+								"FROM t_mjsbwhbyjlby \n" +
+								"WHERE DATE(create_time_) = CURDATE()  \n" +
+								"  AND shi_fou_guo_shen_ = '待处理'\n" +
+								"  AND (\n" +
+								"      (ke_tui_song_ren_ LIKE '%"+currentUserId+"%')\n" +
+								"      OR\n" +
+								"      ((ke_tui_song_ren_ IS NULL OR ke_tui_song_ren_ = '') \n" +
+								"       AND FIND_IN_SET(bian_zhi_bu_men_, '"+positions+"')))";
+						Map<String, Object> mjsbwhbyjlbyMap = commonDao.queryOne(sql2);
+						infobox2.setDataText(getStringFromMap(mjsbwhbyjlbyMap,"total_count"));
+					}
+				}
 				list.add(infobox2);
 			} catch (Exception e) {
 				logger.error(e.getMessage(), e);
 			}
+			//========== 待弃置样品
+			StopWatchUtil.initAndStartLocal(localId, Level.DEBUG, step, "new discard count");
+			try{
+				Infobox infobox5 = new Infobox();
+				infobox5.setIcon("ibps-icon-file-o");
+				infobox5.setColor(Infobox.COLOR_BLUE);
+				infobox5.setDataContent("待弃置样品");
+				infobox5.setUrl("myDiscard");
+				infobox5.setAlias("myDiscard");
+				infobox5.setDataText("-1");
+				infobox5.setAccessToken(ContextUtil.getCurrentAccessToken());
+				//带弃置样品不依据是否检验科最判断查询,依据当前用户的主部门进行判断
+				//1、获取当前用户的主部门,默认取第一个主部门,不排除用户有多个主部门的情况,
+				//   虽然用户有多个主部门时无法登入,需要预防有沙雕瞎鸡儿操作,此处不仅指客户,还有不法分子,emmmm____
+				List<Map<String, Object>> query5 =
+						(List<Map<String, Object>>) commonDao.query("SELECT MAIN_PID_ FROM ibps_party_rel WHERE MAIN_TYPE_ = 'position' AND SUB_PID_ = #{p0} AND BIZ_ = 'mainPost'", new String[]{currentUserId});
+				//2、依据主部门进行数据的查询及统计,只统计截止日期是今天的
+				String sqlDiscarded = "";
+				List<Map<String, Object>> discarded = new ArrayList<>();
+				if(BeanUtils.isNotEmpty(query5) && BeanUtils.isNotEmpty(query5.get(0).get("MAIN_PID_").toString())) {
+					sqlDiscarded = "select count(id_)  as num_ from t_jyhypjlb where bian_zhi_bu_men_ = #{p0} and nao_ji_ye_ > '' "+
+							" and DATE_FORMAT(nao_ji_ye_, '%Y-%m-%d') = DATE_FORMAT(NOW(), '%Y-%m-%d') ";
+					discarded = (List<Map<String, Object>>) commonDao.query(sqlDiscarded ,new String[]{query5.get(0).get("MAIN_PID_").toString()});
+				}else{
+					sqlDiscarded = "select count(id_)  as num_ from t_jyhypjlb where nao_ji_ye_ > '' "+
+							" and DATE_FORMAT(nao_ji_ye_, '%Y-%m-%d') = DATE_FORMAT(NOW(), '%Y-%m-%d') ";
+					discarded = (List<Map<String, Object>>) commonDao.query(sqlDiscarded);
+				}
+				infobox5.setDataText(discarded.get(0).get("num_").toString());
+				list.add(infobox5);
+			}catch (Exception e){
+				logger.error(e.getMessage(), e);
+			}
 			//========== 新建流程
 			StopWatchUtil.initAndStartLocal(localId, Level.DEBUG, step, "new process count");
 			try {
@@ -1802,6 +1886,17 @@ public class BpmInitiatedProvider extends GenericProvider implements IBpmInitiat
 		}
 		return result;
 	}
-	
+	public static String getStringFromMap(Map<String, Object> map, String key) {
+		if (map == null || key == null) {
+			return "";
+		}
+
+		Object value = map.get(key);
+		if (value == null) {
+			return "";
+		}
+
+		return value.toString();
+	}
 	
 }

+ 216 - 0
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/aop/EquipmentDBLogAspect.java

@@ -0,0 +1,216 @@
+package com.lc.ibps.aop;
+
+import cn.hutool.core.date.StopWatch;
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONUtil;
+import com.lc.ibps.base.core.util.BeanUtils;
+import com.lc.ibps.base.framework.table.ICommonDao;
+import com.lc.ibps.base.web.context.ContextUtil;
+import com.lc.ibps.cloud.utils.RequestUtil;
+import com.lc.ibps.sysdata.dao.UpdateDataTableDao;
+import com.lc.ibps.untils.LogAopUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.*;
+
+@Aspect
+@Component
+public class EquipmentDBLogAspect {
+    private static final String TABLE_NAME = "t_business_log";
+    private static final String REMOVE_METHOD = "remove";
+    private static final String SAVE_METHOD = "save";
+    // 创建路径到表名的映射
+    private static final Map<String, String> PATH_TO_TABLE_MAP = new HashMap<>();
+
+    static {
+        // 初始化映射关系
+        PATH_TO_TABLE_MAP.put("equipment/accessoriesDevice", "T_FSSBJPJB");
+        PATH_TO_TABLE_MAP.put("equipment/calibrateResultRecord", "T_JYXTXZJGYZHQRJLB");
+        PATH_TO_TABLE_MAP.put("equipment/calibrationCheckRecord", "T_MJSBJDXZJHZB");
+        PATH_TO_TABLE_MAP.put("equipment/equipmentCard", "T_SBDJ");
+        PATH_TO_TABLE_MAP.put("equipment/maintenanceItem", "T_WHZQJXM");
+        PATH_TO_TABLE_MAP.put("equipment/maintenanceRecord", "T_MJSBWHBYJLBY");
+        PATH_TO_TABLE_MAP.put("equipment/repairRecord", "T_SBWXJLB");
+        PATH_TO_TABLE_MAP.put("equipment/scrappedRecord", "T_SBTYBFJLB");
+    }
+
+    @Resource
+    private ICommonDao commonDao;
+    @Autowired
+    private UpdateDataTableDao updateDataTableDao;
+
+    // 声明环绕通知 定义切点 流程涉及到的接口
+    @Around("execution(* com.lc.ibps.components.equipment.api.*.*(..))")
+    public Object around(ProceedingJoinPoint point) throws Throwable {
+        HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
+        String tableName = getTableNameByURL(request.getRequestURI());
+        StopWatch stopWatch = new StopWatch();
+        stopWatch.start();
+
+        Object result = null;
+        String methodName = point.getSignature().getName();
+        Boolean exceptionFlag = false ;
+        String oldData = "";
+        try {
+            // 在方法执行前保存原始数据
+            if (ifAddLog(methodName) && StringUtils.isNotEmpty(tableName)) {//匹配到了
+                oldData = saveOriginalData(point, methodName,tableName);
+            }
+
+            result = point.proceed();
+
+        } catch (Throwable throwable) {
+            exceptionFlag = true;
+            // 发生异常时记录错误日志
+            Map<String, Object> logData = LogAopUtil.logError(request, point, throwable);
+            updateDataTableDao.insertLog(logData);
+            throw throwable;
+
+        } finally {
+            stopWatch.stop();
+            // 在清理前记录正常日志
+            if (!exceptionFlag && ifAddLog(methodName) && StringUtils.isNotEmpty(tableName)) {
+                Map<String, Object> logData = log(request, point, result, stopWatch,oldData,tableName);
+                updateDataTableDao.insertLog(logData);
+            }
+
+        }
+        return result;
+    }
+    private String saveOriginalData(ProceedingJoinPoint point, String methodName,String tableName) {
+        String oldData ="";
+        String columnName ="id_";
+        StringBuilder whereBuilder = new StringBuilder();
+        if (REMOVE_METHOD.equals(methodName)) {//设备删除传入的参数是id的数组
+            String params = LogAopUtil.filterParam(point.getArgs());
+            JSONArray jsonArray = JSONUtil.parseArray(params);
+            //String tableName ="t_sbdj";
+
+            // 处理空数组的情况
+            if (jsonArray == null || jsonArray.size() == 0) {
+                columnName = columnName + " IN ('')"; // 或者返回空字符串或其他默认值
+                whereBuilder.append(columnName);
+            }
+            // 构建 IN 条件
+            whereBuilder.append(columnName).append(" IN (");
+            for (int i = 0; i < jsonArray.size(); i++) {
+                if (i > 0) {
+                    whereBuilder.append(",");
+                }
+                // 添加单引号包裹的值
+                whereBuilder.append("'").append(jsonArray.getStr(i)).append("'");
+            }
+            whereBuilder.append(")");
+            String WhereStr = whereBuilder.toString();
+            String zbWhereStr = WhereStr.replace("id_", "parent_id_");
+            String query = String.format("SELECT * FROM %s WHERE %s", tableName,WhereStr);
+            List<Map<String,Object>> masterList = commonDao.query(query);
+            //获取子表的数据
+            getChildData(tableName, zbWhereStr,masterList);
+            //拼接主子表的数据
+            if(BeanUtils.isNotEmpty(masterList)){
+                // 使用 JSONArray 并设置日期格式防止时间被转换为毫秒
+                JSONArray jsonArrayResult = new JSONArray(masterList);
+                jsonArrayResult.setDateFormat("yyyy-MM-dd HH:mm:ss");
+                oldData = jsonArrayResult.toString();
+            }
+        }
+        if (SAVE_METHOD.equals(methodName)) {
+            String params = LogAopUtil.filterParam(point.getArgs());
+            Map<String,Object> map = JSONUtil.parseObj(params);
+            Object id = map.get("id");
+
+            if(BeanUtils.isNotEmpty(id)){
+                // 构建条件
+                String zbWhereStr = " parent_id_ = '"+id+"'";
+                String query = String.format("SELECT * FROM %s WHERE id_ = '"+id+"' ", tableName);
+                List<Map<String,Object>> masterList = commonDao.query(query);
+                //获取子表的数据
+                getChildData(tableName, zbWhereStr, masterList);
+                if(BeanUtils.isNotEmpty(masterList)){
+                    // 使用 JSONArray 并设置日期格式防止时间被转换为毫秒
+                    JSONArray jsonArrayResult = new JSONArray(masterList);
+                    jsonArrayResult.setDateFormat("yyyy-MM-dd HH:mm:ss");
+                    oldData = jsonArrayResult.toString();
+                }
+            }
+        }
+        return oldData;
+    }
+
+    private void getChildData(String tableName, String whereStr, List<Map<String, Object>> masterList) {
+        if("T_SBDJ".equals(tableName)){
+            //ids.replace("id_","parent_id_");
+            if(BeanUtils.isNotEmpty(masterList)){
+                for (Map<String, Object> map : masterList) {
+                    map.put("table_name", "T_SBDJ");
+                }
+            }
+            String query = String.format("SELECT * FROM T_FSSBJPJB WHERE %s",whereStr);
+            List<Map<String,Object>> list = commonDao.query(query);
+            if(BeanUtils.isNotEmpty(list)){
+                for (Map<String, Object> map : list) {
+                    map.put("table_name", "T_FSSBJPJB");
+                }
+                masterList.addAll(list);
+            }
+            String query2 = String.format("SELECT * FROM T_WHZQJXM WHERE %s",whereStr);
+            List<Map<String,Object>> list2 = commonDao.query(query2);
+            if(BeanUtils.isNotEmpty(list2)){
+                for (Map<String, Object> map : list2) {
+                    map.put("table_name", "T_WHZQJXM");
+                }
+                masterList.addAll(list2);
+            }
+
+        }
+    }
+
+    /**
+     * 判断是否需要添加日志
+     */
+    public boolean ifAddLog(String methodName) {
+        String[] names = {REMOVE_METHOD, SAVE_METHOD};
+        return Arrays.asList(names).contains(methodName);
+    }
+
+
+    public static String getTableNameByURL(String request) {
+        if (request == null || request.trim().isEmpty()) {
+            return "";
+        }
+
+        // 遍历映射表,检查请求地址是否包含关键路径
+        for (Map.Entry<String, String> entry : PATH_TO_TABLE_MAP.entrySet()) {
+            if (request.contains(entry.getKey())) {
+                return entry.getValue();
+            }
+        }
+
+        return ""; // 未找到匹配项
+    }
+    public static Map<String,Object> log(HttpServletRequest request, ProceedingJoinPoint point,Object result, StopWatch stopWatch,String oldData,String tableName) {
+        Map<String,Object> map = new HashMap<>();
+        map.put("method_", point.getSignature().getName());
+        map.put("params_", LogAopUtil.filterParam(point.getArgs()));
+        map.put("user_id_", ContextUtil.getCurrentUser().getUserId());
+        map.put("user_name_", ContextUtil.getCurrentUser().getFullname());
+        map.put("time_", stopWatch.getTotalTimeMillis());
+        map.put("ip_", RequestUtil.getIpAddr(request));
+        map.put("response_", JSONUtil.toJsonStr(result));
+        map.put("uri_", request.getRequestURI());
+        map.put("type_", "正常日志");
+        map.put("data_", oldData);
+        map.put("table_name", tableName);
+        return map;
+    }
+}

+ 9 - 3
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/business/controller/AuditController.java

@@ -1,13 +1,14 @@
 package com.lc.ibps.business.controller;
 
 import com.lc.ibps.api.base.constants.StateEnum;
+import com.lc.ibps.base.core.util.BeanUtils;
 import com.lc.ibps.base.core.util.I18nUtil;
 import com.lc.ibps.business.service.AuditService;
 import com.lc.ibps.cloud.entity.APIResult;
 import com.lc.ibps.cloud.provider.GenericProvider;
+import com.lc.ibps.untils.settingUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.hibernate.validator.constraints.NotEmpty;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
@@ -30,8 +31,13 @@ public class AuditController extends GenericProvider {
 
         APIResult result = new APIResult<>();
         try {
-           auditService.personnelTrain(ids);
-            //auditService.newPersonnelTrain(ids);
+            String version = settingUtil.getPx();
+            if(BeanUtils.isNotEmpty(version) && "1".equals(version)){
+                //新版培训
+                auditService.newPersonnelTrain(ids);
+                return result;
+            }
+            auditService.personnelTrain(ids);
         } catch (Exception e) {
             setExceptionResult(result, StateEnum.ILLEGAL_REQUEST.getCode(), I18nUtil.getMessage(StateEnum.ILLEGAL_REQUEST.getCode() + ""), e);
         }

+ 3 - 1
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/business/controller/StatisticController.java

@@ -1,6 +1,7 @@
 package com.lc.ibps.business.controller;
 
 import com.lc.ibps.api.base.constants.StateEnum;
+import com.lc.ibps.base.core.util.BeanUtils;
 import com.lc.ibps.base.core.util.I18nUtil;
 import com.lc.ibps.business.dto.EquipmentDashBoardDTO;
 import com.lc.ibps.business.dto.LabsDashBoardDTO;
@@ -10,6 +11,7 @@ import com.lc.ibps.business.service.StaffTrainService;
 import com.lc.ibps.business.service.StatisticService;
 import com.lc.ibps.cloud.entity.APIResult;
 import com.lc.ibps.cloud.provider.GenericProvider;
+import com.lc.ibps.untils.settingUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.hibernate.validator.constraints.NotBlank;
@@ -74,8 +76,8 @@ public class StatisticController extends GenericProvider {
                                                                @RequestParam(name = "version", required = false) String version) {
         APIResult<List<TrainingDashBoardDTO>> result = new APIResult<>();
         try {
+            List<TrainingDashBoardDTO> labsDashBoard = statisticService.getTrainingDashBoard(dept,type,date,typeProportion,version);
             //List<TrainingDashBoardDTO> labsDashBoard = statisticService.getTrainingDashBoard(dept,type,date,typeProportion,version);
-            List<TrainingDashBoardDTO> labsDashBoard = statisticService.getTrainingDashBoard(dept,type,date,typeProportion);
             result.setData(labsDashBoard);
         } catch (Exception e) {
             setExceptionResult(result, StateEnum.ILLEGAL_REQUEST.getCode(), I18nUtil.getMessage(StateEnum.ILLEGAL_REQUEST.getCode() + ""), e);

+ 6 - 2
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/business/service/StatisticService.java

@@ -9,11 +9,15 @@ import java.util.List;
 import java.util.Map;
 
 public interface StatisticService {
+
     List<Map<String, Object>> getRiskReport(String riskId, String type);
+
     List<LabsDashBoardDTO> getLabsDashBoard(String year, String filter);
 
-    //List<TrainingDashBoardDTO> getTrainingDashBoard(String dept, String type, String date,String typeProportion,String version);
-    List<TrainingDashBoardDTO> getTrainingDashBoard(String dept, String type, String date,String typeProportion);
+    List<TrainingDashBoardDTO> getTrainingDashBoard(String dept, String type, String date,String typeProportion,String ve) throws Exception;
+
+    //List<TrainingDashBoardDTO> getTrainingDashBoard(String dept, String type, String date,String typeProportion);
+
     List<EquipmentDashBoardDTO> getEquipmentDashBoard();
 
     Map<String,Object> getTrainingDashBoardByDfx(String dept, String type, String date);

+ 113 - 70
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/business/service/impl/StatisticServiceImpl.java

@@ -17,6 +17,7 @@ import com.lc.ibps.common.api.IDictionaryService;
 import com.lc.ibps.common.cat.persistence.entity.DictionaryPo;
 import com.lc.ibps.org.api.IPartyPositionService;
 import com.lc.ibps.org.party.persistence.entity.PartyPositionPo;
+import com.lc.ibps.untils.settingUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
@@ -68,14 +69,14 @@ public class StatisticServiceImpl implements StatisticService {
     }
 
     @Override
-    //public List<TrainingDashBoardDTO> getTrainingDashBoard(String dept, String types11, String dates,String typeProportion,String version) {
-      public List<TrainingDashBoardDTO> getTrainingDashBoard(String dept, String types11, String dates,String typeProportion) {
+    public List<TrainingDashBoardDTO> getTrainingDashBoard(String dept, String types11, String dates,String typeProportion,String version){
+     // public List<TrainingDashBoardDTO> getTrainingDashBoard(String dept, String types11, String dates,String typeProportion) {
         List<TrainingDashBoardDTO> list = new ArrayList<>();
         TrainingDashBoardDTO dashBoardDTO = new TrainingDashBoardDTO();
 
         // 近一周发布计划
-        //dashBoardDTO.setWeekDtoList(getLastSeven(dept,version));
-        dashBoardDTO.setWeekDtoList(getLastSeven(dept));
+        dashBoardDTO.setWeekDtoList(getLastSeven(dept,version));
+        //dashBoardDTO.setWeekDtoList(getLastSeven(dept));
         //    type       value
         // 周 week  本周 nowWeek  上周 lastWeek  下周 nextWeek
 //        if ("week".equals(type)){
@@ -134,24 +135,24 @@ public class StatisticServiceImpl implements StatisticService {
         }
 
         // 在岗培训计划  自动创建  or 手动创建
-        //dashBoardDTO.setPlanDto(getPlanRate(dept,dateCondition,version));
-        dashBoardDTO.setPlanDto(getPlanRate(dept,dateCondition));
+        dashBoardDTO.setPlanDto(getPlanRate(dept,dateCondition,version));
+        //dashBoardDTO.setPlanDto(getPlanRate(dept,dateCondition));
         // 在岗个人培训次数排名
-        dashBoardDTO.setUserRankList(getUserTrainRank(dept,dateCondition));
-        //dashBoardDTO.setUserRankList(getUserTrainRank(dept,dateCondition,version));
+        //dashBoardDTO.setUserRankList(getUserTrainRank(dept,dateCondition));
+        dashBoardDTO.setUserRankList(getUserTrainRank(dept,dateCondition,version));
 
         // 在岗培训类别占比
-        //dashBoardDTO.setTypeDto(getTypeRate(dept,dateCondition,typeProportion,version));
-        dashBoardDTO.setTypeDto(getTypeRate(dept,dateCondition,typeProportion));
+        dashBoardDTO.setTypeDto(getTypeRate(dept,dateCondition,typeProportion,version));
+        //dashBoardDTO.setTypeDto(getTypeRate(dept,dateCondition,typeProportion));
         // 在岗培训对象占比
-        //dashBoardDTO.setObjectDto(getObjectRate(dept,dateCondition,version));
-        dashBoardDTO.setObjectDto(getObjectRate(dept,dateCondition));
+        dashBoardDTO.setObjectDto(getObjectRate(dept,dateCondition,version));
+        //dashBoardDTO.setObjectDto(getObjectRate(dept,dateCondition));
         //  本年度岗前培训计划
-        //dashBoardDTO.setNdgqpxList(getCurrentYearData(getYearMonth(),dept,year,version));
-        dashBoardDTO.setNdgqpxList(getCurrentYearData(getYearMonth(),dept,year));
+        dashBoardDTO.setNdgqpxList(getCurrentYearData(getYearMonth(),dept,year,version));
+        //dashBoardDTO.setNdgqpxList(getCurrentYearData(getYearMonth(),dept,year));
         //  本年度岗前培训类别占比
-        //dashBoardDTO.setYearPreWorkDto(getYearPre(dept,year,version));
-        dashBoardDTO.setYearPreWorkDto(getYearPre(dept,year));
+        dashBoardDTO.setYearPreWorkDto(getYearPre(dept,year,version));
+        //dashBoardDTO.setYearPreWorkDto(getYearPre(dept,year));
         list.add(dashBoardDTO);
         return list;
     }
@@ -897,23 +898,29 @@ public class StatisticServiceImpl implements StatisticService {
         }
     }
 
-    //public TrainGuardAutoPlanDto getPlanRate(String dept,String dateCondition,String version){
-    public TrainGuardAutoPlanDto getPlanRate(String dept,String dateCondition){
+    public TrainGuardAutoPlanDto getPlanRate(String dept,String dateCondition,String version){
+    //public TrainGuardAutoPlanDto getPlanRate(String dept,String dateCondition){
         TrainGuardAutoPlanDto planDto = new TrainGuardAutoPlanDto();
         String planSql = "";
         String sumSql = "";
         String condition ="";
-//        if(BeanUtils.isNotEmpty(version) && "1".equals(version)){
-//            planSql = "select count(*) as auto from t_lhrypxjlb where ji_hua_wai_jian_ in(select id_ from t_ndrypxjhzb " +
-//                    "where di_dian_='"+getDiDian()+"') %s";
-//            sumSql = "select count(*) as total from t_lhrypxjlb where 1=1 %s ";
-//            condition = String.format(" AND di_dian_ = '%s' and pei_xun_zhuang_ta='已结束' ", getDiDian());
-//        }else{
+        String ve = "";
+        try {
+             ve = settingUtil.getPx();
+        }catch (Exception e){
+            logger.warn("json转换异常");
+        }
+        if(BeanUtils.isNotEmpty(ve) && "1".equals(ve)){
+            planSql = "select count(*) as auto from t_lhrypxjlb where ji_hua_wai_jian_ in(select id_ from t_ndrypxjhzb " +
+                   "where di_dian_='"+getDiDian()+"') %s";
+            sumSql = "select count(*) as total from t_lhrypxjlb where 1=1 %s ";
+           condition = String.format(" AND di_dian_ = '%s' and pei_xun_zhuang_ta='已结束' ", getDiDian());
+        }else{
           planSql = "select count(*) as auto from t_rypxcjb where ji_hua_wai_jian_ in(select id_ from t_ndrypxjhzb " +
                     "where di_dian_='"+getDiDian()+"') %s";
           sumSql = "select count(*) as total from t_rypxcjb where 1=1 %s ";
           condition = String.format(" AND di_dian_ = '%s' and shi_fou_guo_shen_='已结束' ", getDiDian());
-//        }
+        }
         if (BeanUtils.isNotEmpty(dept)){
             condition += String.format(" AND bian_zhi_bu_men_ = '%s' ", dept);
         }
@@ -931,8 +938,8 @@ public class StatisticServiceImpl implements StatisticService {
         return planDto;
     }
 
-    //public List<TrainWeekDto> getLastSeven(String dept,String version){
-        public List<TrainWeekDto> getLastSeven(String dept){
+    public List<TrainWeekDto> getLastSeven(String dept,String version){
+        //public List<TrainWeekDto> getLastSeven(String dept){
         List<TrainWeekDto> weekDtoList = new ArrayList<>();
         List<String> lastWeek = getLastSevenDaysDates();
         for (String dateStr : lastWeek) {
@@ -940,13 +947,19 @@ public class StatisticServiceImpl implements StatisticService {
             weekDto.setDate(dateStr);
             weekDto.setDayName(getDayName(dateStr));
             String sql = "";
-//            if(BeanUtils.isNotEmpty(version) && "1".equals(version)){
-//              sql = "select count(*) value from t_lhrypxjlb where  pei_xun_zhuang_ta='未发布' " +
-//                        " and di_dian_='%s' and date_format(pei_xun_shi_jian_,'%%Y-%%m-%%d')='%s' ";
-//            }else{
+            String ve = "";
+            try {
+                ve = settingUtil.getPx();
+            }catch (Exception e){
+                logger.warn("json转换异常");
+            }
+            if(BeanUtils.isNotEmpty(ve) && "1".equals(ve)){
+              sql = "select count(*) value from t_lhrypxjlb where  pei_xun_zhuang_ta='未发布' " +
+                        " and di_dian_='%s' and date_format(pei_xun_shi_jian_,'%%Y-%%m-%%d')='%s' ";
+            }else{
               sql = "select count(*) value from t_rypxcjb where  shi_fou_guo_shen_='未发布' " +
                         " and di_dian_='%s' and date_format(pei_xun_shi_jian_,'%%Y-%%m-%%d')='%s' ";
-//            }
+            }
 
             if (BeanUtils.isNotEmpty(dept)){
                 sql = sql+" and bian_zhi_bu_men_ = '%s'";
@@ -973,22 +986,28 @@ public class StatisticServiceImpl implements StatisticService {
         return datesStrings;
     }
 
-    public TrainObjectDto getObjectRate(String dept,String dateCondition){
-    //public TrainObjectDto getObjectRate(String dept,String dateCondition,String version){
+    //public TrainObjectDto getObjectRate(String dept,String dateCondition){
+    public TrainObjectDto getObjectRate(String dept,String dateCondition,String version){
         TrainObjectDto objectDto = new TrainObjectDto();
         objectDto.setRemark("在岗培训对象占比");
         List<TrainRateDto> rateDtoList = new ArrayList<>();
         String sql ="";
         String talSql ="";
-//        if(BeanUtils.isNotEmpty(version) && "1".equals(version)){
-//           sql = "select pei_xun_lei_xing_,count(pei_xun_lei_xing_)as nums from t_lhrypxjlb where " +
-//                    " pei_xun_zhuang_ta='已结束' %s group by pei_xun_lei_xing_";
-//           talSql = "SELECT COUNT(*) as total_num from t_lhrypxjlb where  pei_xun_zhuang_ta='已结束' %s ";
-//        }else{
+        String ve = "";
+        try {
+            ve = settingUtil.getPx();
+        }catch (Exception e){
+            logger.warn("json转换异常");
+        }
+        if(BeanUtils.isNotEmpty(ve) && "1".equals(ve)){
+           sql = "select pei_xun_lei_xing_,count(pei_xun_lei_xing_)as nums from t_lhrypxjlb where " +
+                    " pei_xun_zhuang_ta='已结束' %s group by pei_xun_lei_xing_";
+           talSql = "SELECT COUNT(*) as total_num from t_lhrypxjlb where  pei_xun_zhuang_ta='已结束' %s ";
+        }else{
            sql = "select pei_xun_lei_xing_,count(pei_xun_lei_xing_)as nums from t_rypxcjb where " +
                     " shi_fou_guo_shen_='已结束' %s group by pei_xun_lei_xing_";
            talSql = "SELECT COUNT(*) as total_num from t_rypxcjb where  shi_fou_guo_shen_='已结束' %s ";
-//        }
+        }
         dateCondition += String.format(" AND di_dian_ = '%s' ", getDiDian());
         if (BeanUtils.isNotEmpty(dept)){
             dateCondition += String.format(" AND bian_zhi_bu_men_ = '%s' ", dept);
@@ -1010,8 +1029,8 @@ public class StatisticServiceImpl implements StatisticService {
         return objectDto;
     }
 
-    public TrainTypeDto getTypeRate(String dept,String dateCondition,String typeProportion){
-    //public TrainTypeDto getTypeRate(String dept,String dateCondition,String typeProportion,String version){
+    //public TrainTypeDto getTypeRate(String dept,String dateCondition,String typeProportion){
+    public TrainTypeDto getTypeRate(String dept,String dateCondition,String typeProportion,String version){
         TrainTypeDto typeDto = new TrainTypeDto();
         typeDto.setRemark("在岗培训类别占比");
         List<TrainRateDto> rateDtoList = new ArrayList<>();
@@ -1028,15 +1047,21 @@ public class StatisticServiceImpl implements StatisticService {
         }
         String sql = "";
         String talSql = "";
-//        if(BeanUtils.isNotEmpty(version) && "1".equals(version)){
-//           sql = "select pei_xun_lei_bie_,count(pei_xun_lei_bie_)as nums from t_lhrypxjlb where " +
-//                    " pei_xun_zhuang_ta='已结束' %s group by pei_xun_lei_bie_";
-//            talSql = "select COUNT(*) AS total_num from t_lhrypxjlb where  pei_xun_zhuang_ta='已结束' %s ";
-//        }else{
+        String ve = "";
+        try {
+            ve = settingUtil.getPx();
+        }catch (Exception e){
+            logger.warn("json转换异常");
+        }
+        if(BeanUtils.isNotEmpty(ve) && "1".equals(ve)){
+           sql = "select pei_xun_lei_bie_,count(pei_xun_lei_bie_)as nums from t_lhrypxjlb where " +
+                    " pei_xun_zhuang_ta='已结束' %s group by pei_xun_lei_bie_";
+            talSql = "select COUNT(*) AS total_num from t_lhrypxjlb where  pei_xun_zhuang_ta='已结束' %s ";
+        }else{
            sql = "select pei_xun_lei_bie_,count(pei_xun_lei_bie_)as nums from t_rypxcjb where " +
                     " shi_fou_guo_shen_='已结束' %s group by pei_xun_lei_bie_";
             talSql = "select COUNT(*) AS total_num from t_rypxcjb where  shi_fou_guo_shen_='已结束' %s ";
-//        }
+        }
         dateCondition += String.format(" AND di_dian_ = '%s' ", getDiDian());
         if (BeanUtils.isNotEmpty(dept)){
             dateCondition += String.format(" AND bian_zhi_bu_men_ = '%s' ", dept);
@@ -1058,22 +1083,28 @@ public class StatisticServiceImpl implements StatisticService {
         return typeDto;
     }
 
-    public TrainYearPreWorkDto getYearPre(String dept,String year){
-       // public TrainYearPreWorkDto getYearPre(String dept,String year,String version){
+    //public TrainYearPreWorkDto getYearPre(String dept,String year){
+        public TrainYearPreWorkDto getYearPre(String dept,String year,String version){
         TrainYearPreWorkDto preWorkDto = new TrainYearPreWorkDto();
         preWorkDto.setRemark("本年度岗前培训类别占比");
         List<TrainRateDto> rateDtoList = new ArrayList<>();
         String sql = "";
         String talSql ="";
-//        if(BeanUtils.isNotEmpty(version) && "1".equals(version)){
-//           sql = "select pei_xun_lei_bie_,count(pei_xun_lei_bie_)as nums from t_lhrypxjlb where " +
-//                    " pei_xun_zhuang_ta='已结束' %s group by pei_xun_lei_bie_";
-//           talSql = "SELECT count(*) AS total FROM t_lhrypxjlb WHERE pei_xun_zhuang_ta = '已结束' %s ";
-//        }else{
+            String ve = "";
+            try {
+                ve = settingUtil.getPx();
+            }catch (Exception e){
+                logger.warn("json转换异常");
+            }
+        if(BeanUtils.isNotEmpty(ve) && "1".equals(ve)){
+           sql = "select pei_xun_lei_bie_,count(pei_xun_lei_bie_)as nums from t_lhrypxjlb where " +
+                    " pei_xun_zhuang_ta='已结束' %s group by pei_xun_lei_bie_";
+           talSql = "SELECT count(*) AS total FROM t_lhrypxjlb WHERE pei_xun_zhuang_ta = '已结束' %s ";
+        }else{
            sql = "select pei_xun_lei_bie_,count(pei_xun_lei_bie_)as nums from t_rypxcjb where " +
                     " shi_fou_guo_shen_='已结束' %s group by pei_xun_lei_bie_";
            talSql = "SELECT count(*) AS total FROM t_rypxcjb WHERE shi_fou_guo_shen_ = '已结束' %s ";
-//        }
+        }
         String dateCondition = String.format(" AND di_dian_ = '%s' ", getDiDian());
         if (BeanUtils.isNotEmpty(dept)){
             dateCondition += String.format(" AND bian_zhi_bu_men_ = '%s' ", dept);
@@ -1097,14 +1128,20 @@ public class StatisticServiceImpl implements StatisticService {
         return preWorkDto;
     }
 
-    public List<Map<String, Object>> getCurrentYearData(List<String> dateStr, String dept,String year) {
-       // public List<Map<String, Object>> getCurrentYearData(List<String> dateStr, String dept,String year,String version) {
+    //public List<Map<String, Object>> getCurrentYearData(List<String> dateStr, String dept,String year) {
+     public List<Map<String, Object>> getCurrentYearData(List<String> dateStr, String dept,String year,String version) {
         String baseSql ="";
-//        if(BeanUtils.isNotEmpty(version) && "1".equals(version)){
-//            baseSql = "SELECT count(*) AS total FROM t_lhrypxjlb WHERE pei_xun_zhuang_ta = '已结束' and di_dian_='%s'";
-//        }else{
+         String ve = "";
+         try {
+             ve = settingUtil.getPx();
+         }catch (Exception e){
+             logger.warn("json转换异常");
+         }
+        if(BeanUtils.isNotEmpty(ve) && "1".equals(ve)){
+            baseSql = "SELECT count(*) AS total FROM t_lhrypxjlb WHERE pei_xun_zhuang_ta = '已结束' and di_dian_='%s'";
+        }else{
             baseSql = "SELECT count(*) AS total FROM t_rypxcjb WHERE shi_fou_guo_shen_ = '已结束' and di_dian_='%s'";
-//        }
+        }
         baseSql = String.format(baseSql,getDiDian());
         List<Map<String, Object>> list = new ArrayList<>();
         for (String date : dateStr) {
@@ -1124,18 +1161,24 @@ public class StatisticServiceImpl implements StatisticService {
         return list;
     }
 
-    public List<TrainRankDto> getUserTrainRank(String dept,String dateCondition){
-       // public List<TrainRankDto> getUserTrainRank(String dept,String dateCondition,String version){
+    //public List<TrainRankDto> getUserTrainRank(String dept,String dateCondition){
+    public List<TrainRankDto> getUserTrainRank(String dept,String dateCondition,String version){
         String sql = "";
-//        if(BeanUtils.isNotEmpty(version) && "1".equals(version)){
-//            sql = "SELECT a.ren_yuan_id_ userId,e.NAME_ userName,a.rank as count from (select ren_yuan_id_,COUNT(ren_yuan_id_)as rank  from t_qdxxb " +
-//                    "where guan_lian_id_ in(select id_ from t_lhrypxjlb where  pei_xun_zhuang_ta='已结束' %s) " +
-//                    "GROUP BY ren_yuan_id_) a ,ibps_party_employee e WHERE e.id_=a.ren_yuan_id_ ";
-//        }else{
+        String ve = "";
+        try {
+            ve = settingUtil.getPx();
+        }catch (Exception e){
+            logger.warn("json转换异常");
+        }
+        if(BeanUtils.isNotEmpty(ve) && "1".equals(ve)){
+            sql = "SELECT a.ren_yuan_id_ userId,e.NAME_ userName,a.rank as count from (select ren_yuan_id_,COUNT(ren_yuan_id_)as rank  from t_qdxxb " +
+                    "where guan_lian_id_ in(select id_ from t_lhrypxjlb where  pei_xun_zhuang_ta='已结束' %s) " +
+                    "GROUP BY ren_yuan_id_) a ,ibps_party_employee e WHERE e.id_=a.ren_yuan_id_ ";
+        }else{
             sql = "SELECT a.ren_yuan_id_ userId,e.NAME_ userName,a.rank as count from (select ren_yuan_id_,COUNT(ren_yuan_id_)as rank  from t_qdxxb " +
                     "where guan_lian_id_ in(select id_ from t_rypxcjb where  shi_fou_guo_shen_='已结束' %s) " +
                     "GROUP BY ren_yuan_id_) a ,ibps_party_employee e WHERE e.id_=a.ren_yuan_id_ ";
-//        }
+        }
         dateCondition += String.format(" AND di_dian_ = '%s' ", getDiDian());
         if (BeanUtils.isNotEmpty(dept)){
             dateCondition += String.format(" AND bian_zhi_bu_men_ = '%s'", dept);

+ 72 - 0
ibps-provider-root/modules/provider-business/src/main/java/com/lc/ibps/untils/settingUtil.java

@@ -0,0 +1,72 @@
+package com.lc.ibps.untils;
+
+import com.lc.ibps.base.core.util.AppUtil;
+import com.lc.ibps.base.core.util.BeanUtils;
+import com.lc.ibps.base.framework.table.ICommonDao;
+import com.lc.ibps.base.web.context.ContextUtil;
+import com.lc.ibps.bpmn.service.impl.BpmProcInstServiceImpl;
+import org.codehaus.jackson.map.ObjectMapper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 转换setting的工具类,业务模块直接取这边的方法即可拿到最终值
+ * 依据setting配置的层级自行判断转换逻辑
+ */
+public class settingUtil {
+    private static final Logger logger = LoggerFactory.getLogger(BpmProcInstServiceImpl.class);
+    private static ICommonDao<?> commonDao = AppUtil.getBean(ICommonDao.class);
+
+    //获取setting
+    public static HashMap<String, Object> getSetting(){
+        HashMap<String, Object> map = new HashMap<>();
+        try {
+            String setting = ContextUtil.getSetting();
+             map =(HashMap) jsonStringToMap(setting);
+        }catch (Exception e){
+            logger.warn("setting获取异常");
+        }
+        return map;
+    }
+    //获取培训方法
+    public static String getPx(){
+        String version = "";
+        try {
+            HashMap<String, Object> setting = getSetting();
+            HashMap<String, Object> option = (HashMap)setting.get("pxSpectacularsOption");
+            version = option.get("version").toString();
+        }catch (Exception e){
+            logger.warn("version转换异常或没有配置");
+        }
+        return version;
+    }
+    //获取XXX
+    //...
+
+    //转换map方法
+    public static Map<String, Object> jsonStringToMap(String jsonString) {
+        try {
+            ObjectMapper objectMapper = new ObjectMapper();
+            return objectMapper.readValue(jsonString, Map.class);
+        } catch (Exception e) {
+            throw new RuntimeException("JSON转换失败", e);
+        }
+    }
+
+    //1、获取当前用户的主部门,默认取第一个主部门,不排除用户有多个主部门的情况,
+   //   虽然用户有多个主部门时无法登入,需要预防有沙雕瞎鸡儿操作,此处不仅指客户,还有不法分子,emmmm____
+    //获取主部门,取第一个
+    public static String getMianPosition(){
+        String psoition = "";
+        List<Map<String, Object>> query =
+                (List<Map<String, Object>>) commonDao.query("SELECT MAIN_PID_ FROM ibps_party_rel WHERE MAIN_TYPE_ = 'position' AND SUB_PID_ = #{p0} AND BIZ_ = 'mainPost'", new String[]{ContextUtil.getCurrentUserId()});
+       if(BeanUtils.isNotEmpty(query) && BeanUtils.isNotEmpty(query.get(0).get("MAIN_PID_").toString())){
+           psoition = query.get(0).get("MAIN_PID_").toString();
+       }
+        return psoition;
+    }
+}

+ 2 - 2
ibps-provider-root/modules/provider-business/src/main/resources/com/lc/ibps/klimsibps/mapping/UpdateDataTableMapper.xml

@@ -247,10 +247,10 @@
 
     <!--  添加操作日志   -->
     <insert  id="insertLog"  parameterType="java.util.Map">
-        INSERT INTO t_business_log (method_, params_, user_id_, user_name_, create_time_, time_, ip_, response_, uri_ , type_ , error_)
+        INSERT INTO t_business_log (method_, params_, user_id_, user_name_, create_time_, time_, ip_, response_, uri_ , type_ , error_, data_ , table_name)
          values
         (#{map.method_},#{map.params_},#{map.user_id_},#{map.user_name_},now(),
-         #{map.time_},#{map.ip_},#{map.response_},#{map.uri_},#{map.type_},#{map.error_})
+         #{map.time_},#{map.ip_},#{map.response_},#{map.uri_},#{map.type_},#{map.error_},#{map.data_},#{map.table_name})
     </insert >
     <select id="selectByLocation" resultType="java.util.Map" parameterType="java.util.Map">
         select a.*,

+ 11 - 0
ibps-provider-root/modules/provider-platform-default/src/main/java/com/lc/ibps/org/provider/PartyEmployeeProvider.java

@@ -18,6 +18,7 @@ import com.lc.ibps.base.core.util.JacksonUtil;
 import com.lc.ibps.base.core.util.string.StringUtil;
 import com.lc.ibps.base.framework.id.UniqueIdUtil;
 import com.lc.ibps.base.framework.request.signature.annotation.Signature;
+import com.lc.ibps.base.framework.table.ICommonDao;
 import com.lc.ibps.cloud.entity.APIPageList;
 import com.lc.ibps.cloud.entity.APIRequest;
 import com.lc.ibps.cloud.entity.APIRequestParameter;
@@ -105,6 +106,9 @@ public class PartyEmployeeProvider extends GenericProvider implements IPartyEmpl
 	private PartyLevelRepository partyLevelRepository;
 	@Resource
 	private IPartyUserService defaultPartyUserService;
+
+
+	private ICommonDao<?> commonDao = AppUtil.getBean(ICommonDao.class);
 	
 	/**
 	 * 员工列表
@@ -946,6 +950,13 @@ public class PartyEmployeeProvider extends GenericProvider implements IPartyEmpl
 		try{
 			PartyEmployee partyEmployee = partyEmployeeRepository.newInstance(partyEmployeePo);
 			PartyEmlpoyeeValidator.checkNullAndIllegal(partyEmployeePo);
+			//真正创建用户或者修改用户的时候,先判断主部门表当中是否有用户信息,若有,需要先删除,否则修改后用户无法登入
+			List<PartyRelPo> relList = partyRelRepository.getBySubIdBiz(partyEmployee.getId());
+			if(relList.size()>0){
+				//先删除rel表中的数据,防止有多主部门信息
+				String ids = relList.stream().map(PartyRelTbl::getId).collect(Collectors.joining(","));
+				partyRelRepository.remoBySubId(ids);
+			}
 			partyEmployee.updateByCascade(partyEmployeeVo);
 			result.setMessage(I18nUtil.getMessage("com.lc.ibps.org.provider.PartyEmployeeProvider.save.update"));
 			result.addVariable("id", partyEmployeePo.getId());

+ 5 - 13
ibps-provider-root/modules/provider-platform/src/main/java/com/lc/ibps/platform/plan/job/EquipmentMaintenancePlanJob.java

@@ -404,9 +404,10 @@ public class EquipmentMaintenancePlanJob  extends AbstractJob {
             if("深圳恒生医院".equals(getSetting())){
                 futureDate = futureDate2 ;
                 str = "一个月";
-                eqMap.put("dueDate", dueDate.plusMonths(1).toString());
+                eqMap.put("dueDate", chuChangRiQi);
             }else{
-                eqMap.put("dueDate", dueDate.plusYears(1).toString());
+                //eqMap.put("dueDate", dueDate.plusYears(1).toString());
+                eqMap.put("dueDate", chuChangRiQi);
             }
             msgInnerList.add(eqMap);
 
@@ -449,7 +450,7 @@ public class EquipmentMaintenancePlanJob  extends AbstractJob {
                         calendarPo.setCreateBy("1");
                         calendarPo.setType("EQUIP_OVERDUE");
                         calendarDao.create(calendarPo);
-                        sendMessage(msgInnerList,zhanghao);
+                        sendMessage(msgInnerList,zhanghao,calendarPo.getContent());
                         logger.warn("设备到期提醒"+yuanSheBeiBian +":" + sheBeiMingCheng);
                     }
 
@@ -457,20 +458,11 @@ public class EquipmentMaintenancePlanJob  extends AbstractJob {
             }
         }
     }
-    private void sendMessage(List<Map<String, Object>> list,String userIDs){
+    private void sendMessage(List<Map<String, Object>> list,String userIDs,String neiRong){
         if(BeanUtils.isNotEmpty(list) && BeanUtils.isNotEmpty(userIDs)){
             //转换接收人
             List<String> receiver = Arrays.asList(userIDs.split(","));
             String title = "设备使用到期预提醒";
-            String neiRong ="以下设备即将过期:<br>";
-            for (Map<String,Object> item : list) {
-                //拼接内容
-                if(neiRong.equals("以下设备即将过期:<br>")){
-                    neiRong = neiRong + "设备名称:" + item.get("she_bei_ming_cheng_").toString() + "-到期日期:" + item.get("dueDate").toString();
-                }else{
-                    neiRong = neiRong + "<br>" + "设备名称:" + item.get("she_bei_ming_cheng_").toString() + "-到期日期:" + item.get("dueDate").toString();
-                }
-            }
             MessageQueueProductorUtil.send("EquipmentMaintenancePlanJob", "system" , "inner", receiver,null , title, neiRong, null, null, null);
         }
     }