package com.product.administration.service; import com.alibaba.fastjson.JSONObject; import com.product.admin.service.PublicService; import com.product.administration.controller.CooperateModelController; import com.product.common.lang.StringUtils; import com.product.core.dao.BaseDao; import com.product.core.entity.DataTableEntity; import com.product.core.entity.FieldSetEntity; import com.product.core.service.support.AbstractBaseService; import com.product.core.spring.context.SpringMVCContextHolder; import com.product.core.transfer.Transactional; import com.product.module.sys.entity.SystemUser; import com.product.util.BaseUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; /** * Copyright © 6c * * @Date: 2022-03-17 17:37 * @Author: 6c * @Description: */ @Service public class CooperateModelService extends AbstractBaseService implements CooperateModelController.ICooperateModelService { @Autowired public BaseDao baseDao; @Autowired PublicService publicService; /** * 列表-模板 * * @param fse type 0-个人模板,1-共享模板,2-公共模板 * @return */ public DataTableEntity listModel(FieldSetEntity fse) { String curUserID = SpringMVCContextHolder.getCurrentUserId(); StringBuilder sql = new StringBuilder(256); sql.append("\nselect uuid,name,date_format(created_utc_datetime,'%Y-%m-%d %H:%i:%s') created_utc_datetime,created_by,type from ("); sql.append("\n select uuid,name,created_utc_datetime,created_by,0 type from product_oa_cooperates_template where created_by=? and created_by<>1"); sql.append("\n union all"); sql.append("\n select uuid,name,created_utc_datetime,created_by,1 type from product_oa_cooperates_template where find_in_set(?,share_user)>0 and created_by<>1 and created_by<>?"); sql.append("\n union all"); sql.append("\n select uuid,name,created_utc_datetime,created_by,2 type from product_oa_cooperates_template where created_by=1"); sql.append("\n) t"); sql.append("\norder by created_utc_datetime desc"); return baseDao.listTable(sql.toString(), new Object[]{curUserID, curUserID, curUserID}); } /** * 查询模板详情 * * @param fse * @return */ @Transactional @Override public void saveTemplateInfo(FieldSetEntity fse) { if (!StringUtils.isEmpty(fse.getUUID())) { delete("product_oa_cooperate_flow_node_template", "master_uuid=?", new String[]{fse.getUUID()}); } publicService.saveFieldSetEntity(fse); } /** * 查询模板详情 * * @param fse * @return */ public FieldSetEntity findTemplateInfo(FieldSetEntity fse) { fse = getBaseDao().getFieldSetEntity(fse.getTableName(), fse.getUUID(), false); StringBuilder sql = new StringBuilder(); sql.append(" SELECT "); sql.append(" case when grade=1 then receiver else concat(tricode,'-',receiver) end as `code`, "); sql.append(" receiver,"); sql.append(" sender , grade,"); sql.append(" uuid() `key`,user_id id, "); sql.append(" tricode, "); sql.append(" b.user_name label "); sql.append(" FROM "); sql.append(" product_oa_cooperate_flow_node_template a "); sql.append(" JOIN product_sys_users b ON a.receiver=b.user_id "); sql.append(" WHERE "); sql.append(" master_uuid =? "); sql.append(" ORDER BY "); sql.append(" grade "); DataTableEntity subData = getBaseDao().listTable(sql.toString(), new Object[]{fse.getUUID()}); if (!DataTableEntity.isEmpty(subData)) { SystemUser currentUser = SpringMVCContextHolder.getCurrentUser(); AtomicBoolean flag = new AtomicBoolean(false); AtomicReference sponsorUser = new AtomicReference<>(); AtomicBoolean gradeTop = new AtomicBoolean(false); fse.setValue("document_process", BaseUtil.dataTableToTreeData(subData, "code", "tricode", f -> { JSONObject jsonObject = f[0]; //层级 String grade = jsonObject.getString("grade"); //接收人 String receiver = jsonObject.getString("receiver"); if ("1".equals(grade)) { gradeTop.set(true); } if ("1".equals(grade) && !receiver.equals(currentUser.getUser_id())) { flag.set(true); sponsorUser.set(receiver); } if (flag.get()) { //模板发起人不是当前人 if ("1".equals(grade)) { receiver = currentUser.getUser_id() + ""; jsonObject.put("receiver", currentUser.getUser_id()); jsonObject.put("label", currentUser.getUser_name()); jsonObject.put("sender", currentUser.getUser_id()); } String tricode = jsonObject.getString("tricode"); if (!StringUtils.isEmpty(tricode)) { // 层级 2 if (tricode.indexOf("-") == -1) { jsonObject.put("sender", currentUser.getUser_id()); } tricode = currentUser.getUser_id() + tricode.substring(sponsorUser.get().length()); jsonObject.put("tricode", tricode); } jsonObject.put("code", "1".equals(grade) ? receiver : tricode + "-" + receiver); } }, true)); if (!gradeTop.get()) { fse.remove("document_process"); } } return fse; } }