18756
2024-08-22 33dbf637c8527e9f8d66a454ee711b7f7aee7102
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
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<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;
    }
 
 
}