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,type from (");
|
sql.append("\n select uuid,name,created_utc_datetime,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,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,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<String> 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;
|
}
|
|
|
}
|