1821349743@qq.com
2023-02-20 061e05291a5048f75bf7c617052966ca6bef62d5
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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
package com.product.badge.service;
 
import com.product.badge.config.BadgeCode;
import com.product.badge.config.CmnConst;
import com.product.badge.service.idel.IBadgeBorrowService;
import com.product.common.lang.StringUtils;
import com.product.core.cache.DataPoolCacheImpl;
import com.product.core.dao.BaseDao;
import com.product.core.entity.DataTableEntity;
import com.product.core.entity.FieldSetEntity;
import com.product.core.exception.BaseException;
import com.product.core.service.support.AbstractBaseService;
import com.product.core.service.support.QueryFilterService;
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.Date;
 
/**
 * @Date: 2021-06-03 08:37
 * @Description: 证章借用
 */
@Service
public class BadgeBorrowService extends AbstractBaseService implements IBadgeBorrowService {
    @Autowired
    public BaseDao baseDao;
    @Autowired
    public QueryFilterService queryFilterService;
 
    /**
     * 借用
     * @param fse
     * @return
     */
    @Transactional
    @Override
    public String borrow(FieldSetEntity fse) {
        SystemUser curUser = SpringMVCContextHolder.getCurrentUser();
        if (StringUtils.isEmpty(fse.getUUID())) {
            // 新增
            BaseUtil.createCreatorAndCreationTime(curUser, fse);
        } else {
            // 修改
            BaseUtil.updatedRegeneratorAndUpdateTime(curUser, fse);
        }
        fse.setValue(CmnConst.FIELD_ORG_LEVEL_UUID, SpringMVCContextHolder.getCurrentUser().getOrg_level_uuid());
        fse.setValue(CmnConst.FIELD_DEPT_UUID, SpringMVCContextHolder.getCurrentUser().getDept_uuid());
        FieldSetEntity tempFse;
        DataTableEntity dte = fse.getSubDataTable(CmnConst.TABLE_PRODUCT_OA_BADGE_BORROW_DETAIL);
        fse.removeSubData(CmnConst.TABLE_PRODUCT_OA_BADGE_BORROW_DETAIL);
        DataTableEntity subDte = new DataTableEntity();
        FieldSetEntity subFse;
        String[] arr;
        for (int i = 0;i < dte.getRows();i++) {
            tempFse = dte.getFieldSetEntity(i);
            arr = tempFse.getString(CmnConst.FIELD_BADGE_UUID).split(",");
            for (String badgeUUID : arr) {
                subFse = tempFse.clones();
                subFse.setValue(CmnConst.FIELD_BADGE_UUID, badgeUUID);
                subDte.addFieldSetEntity(subFse);
            }
        }
        fse.addSubDataTable(subDte);
        baseDao.saveFieldSetEntity(fse);
        return fse.getUUID();
    }
 
    /**
     * 借用-获取借用详情
     * @param fse
     * @return
     */
    public FieldSetEntity findBadgeBorrowInfo(FieldSetEntity fse) {
        FieldSetEntity recordFse = baseDao.getFieldSetEntity(CmnConst.TABLE_PRODUCT_OA_BADGE_BORROW_RECORD, fse.getUUID(), false);
        StringBuilder sql = new StringBuilder(128);
        sql.append("select badge_level,badge_type,GROUP_CONCAT(badge_uuid) badge_uuid")
                .append("\nfrom product_oa_badge_borrow_detail")
                .append("\nwhere record_uuid=?")
                .append("\ngroup by badge_level,badge_type");
        DataTableEntity detailDte = baseDao.listTable(sql.toString(), new Object[]{fse.getUUID()});
        recordFse.addSubDataTable(detailDte);
        return recordFse;
    }
 
    /**
     * 归还-列表
     * @param fse
     * @return
     */
    public DataTableEntity getGiveBackList(FieldSetEntity fse) {
        StringBuilder sql = new StringBuilder(128);
        sql.append("select * from product_oa_badge_borrow_record r")
                .append("\ninner join (")
                .append("\n    select distinct record_uuid from product_oa_badge_borrow_detail")
                .append("\n    where return_date is null")
                .append("\n) d on r.uuid=d.record_uuid");
        int pageSize = fse.getInteger(CmnConst.PAGE_SIZE) == null ? Integer.MAX_VALUE : fse.getInteger(CmnConst.PAGE_SIZE);
        int curPage = fse.getInteger(CmnConst.CUR_PAGE) == null ? 1 : fse.getInteger(CmnConst.CUR_PAGE);
        DataTableEntity dte = baseDao.listTable(sql.toString(), new Object[]{}, pageSize, curPage);
        baseDao.loadPromptData(dte);
        return dte;
    }
 
    /**
     * 归还-部分归还-获取借用列表详情
     * @param fse
     * @return
     */
    public FieldSetEntity partGiveBackFind(FieldSetEntity fse) {
        String recordUUID = fse.getUUID();
        DataTableEntity detailDte = baseDao.listTable(CmnConst.TABLE_PRODUCT_OA_BADGE_BORROW_DETAIL, "return_date is null and record_uuid=?", new Object[]{recordUUID});
        baseDao.loadPromptData(detailDte);
        FieldSetEntity recordFse = baseDao.getFieldSetEntity(CmnConst.TABLE_PRODUCT_OA_BADGE_BORROW_RECORD, recordUUID, false);
        baseDao.loadPromptData(recordFse);
        recordFse.addSubDataTable(detailDte);
        return recordFse;
    }
 
    /**
     * 归还
     * @param fse
     */
    public void giveBack(FieldSetEntity fse) {
        String uuids = fse.getUUID();
        if (StringUtils.isEmpty(uuids)) {
            return;
        }
        SystemUser curUser = SpringMVCContextHolder.getCurrentUser();
        String tableName = fse.getTableName();
        DataTableEntity dte = null;
        if (CmnConst.TABLE_PRODUCT_OA_BADGE_BORROW_RECORD.equalsIgnoreCase(tableName)) {
            // 归还所有
            dte = baseDao.listTable(CmnConst.TABLE_PRODUCT_OA_BADGE_BORROW_DETAIL, "record_uuid=? and return_date is null", new Object[]{uuids});
        }
        if (CmnConst.TABLE_PRODUCT_OA_BADGE_BORROW_DETAIL.equalsIgnoreCase(tableName)) {
            // 部分归还
            String[] uuidArr = uuids.split(",");
            String filter = BaseUtil.buildQuestionMarkFilter(CmnConst.FIELD_UUID, uuidArr.length, true);
            dte = baseDao.listTable(CmnConst.TABLE_PRODUCT_OA_BADGE_BORROW_DETAIL, filter, uuidArr);
        }
        if (!BaseUtil.dataTableIsEmpty(dte)) {
            FieldSetEntity tempFse;
            for (int i = 0; i < dte.getRows(); i++) {
                tempFse = dte.getFieldSetEntity(i);
                tempFse.setValue(CmnConst.FIELD_BADGE_BORROW_RETURN_DATE, new Date());
                tempFse.setValue(CmnConst.FIELD_BADGE_BORROW_RETURN_BY, curUser.getUser_id());
                baseDao.saveFieldSetEntity(tempFse);
            }
        }
    }
 
    /**
     * 证章借用看板
     * @param fse
     * @return
     */
    public DataTableEntity borrowBoard(FieldSetEntity fse) {
        StringBuilder sql = new StringBuilder();
        sql.append("\nselect d.table_uuid,d.uuid,table_name,c.org_level_name org_level_uuid,badge_name,type_name,cp.dict_label badge_type,holder,ifnull(badge_status,'未借出') badge_status,borrow_by,borrow_time,return_date,useful_life ");
        sql.append("\nfrom ( ");
        sql.append("\n    select '725928d8-a0ed-4f68-9e1d-87f66d899df0' table_uuid,'product_oa_badge_awards' table_name,org_level_uuid,badge_level,badge_type,badge_name,uuid,'获奖信息证章' type_name,holder,'永久' useful_life from product_oa_badge_awards ");
        sql.append("\n    union all ");
        sql.append("\n    select '66d5e271-41bc-48c3-a0f5-6d696c70a036' table_uuid,'product_oa_badge_company' table_name,org_level_uuid,badge_level,badge_type,badge_name,uuid,'公司证章' type_name,holder,'永久' useful_life from product_oa_badge_company ");
        sql.append("\n    union all ");
        sql.append("\n    select '6468cd40-c9c9-41ff-b819-d670e3af9cee' table_uuid,'product_oa_badge_company_qualification' table_name,org_level_uuid,badge_level,badge_type,badge_name,uuid,'公司资质证章' type_name,holder,useful_life from product_oa_badge_company_qualification ");
        sql.append("\n    union all ");
        sql.append("\n    select 'a743e548-7b49-4f45-a072-acc03b873bdd' table_uuid,'product_oa_badge_constructor' table_name,org_level_uuid,badge_level,badge_type,badge_name,uuid,'建造师证章' type_name,holder,'永久' useful_life from product_oa_badge_constructor ");
        sql.append("\n    union all ");
        sql.append("\n    select 'c07d0bcd-3e2d-43b9-9df0-ae60c6d57577' table_uuid,'product_oa_badge_cost_officer' table_name,org_level_uuid,badge_level,badge_type,badge_name,uuid,'造价人员证章' type_name,holder,useful_life from product_oa_badge_cost_officer ");
        sql.append("\n    union all ");
        sql.append("\n    select '3d6d8e93-f347-4a07-abb0-c6ec7ccf907b' table_uuid,'product_oa_badge_finance_manage' table_name,org_level_uuid,badge_level,badge_type,badge_name,uuid,'财务管理证章' type_name,holder,'永久' useful_life from product_oa_badge_finance_manage ");
        sql.append("\n    union all ");
        sql.append("\n    select '4cca65f6-dc58-443a-abb1-222524930d4c' table_uuid,'product_oa_badge_manager' table_name,org_level_uuid,badge_level,badge_type,badge_name,uuid,'管理人员证章' type_name,holder,useful_life from product_oa_badge_manager ");
        sql.append("\n    union all ");
        sql.append("\n    select 'a980ba45-e286-4e5d-ba39-a28d7a0de3dc' table_uuid,'product_oa_badge_safety_officer' table_name,org_level_uuid,badge_level,badge_type,badge_name,uuid,'安全人员证章' type_name,holder,'永久' useful_life from product_oa_badge_safety_officer ");
        sql.append("\n    union all ");
        sql.append("\n    select '53dc61c1-70d3-493b-b271-b886f723e50d' table_uuid,'product_oa_badge_scene_manage' table_name,org_level_uuid,badge_level,badge_type,badge_name,uuid,'现场管理证章' type_name,holder,'永久' useful_life from product_oa_badge_scene_manage ");
        sql.append("\n    union all ");
        sql.append("\n    select '0761488e-d10f-4c25-8b57-469114d9b7b4' table_uuid,'product_oa_badge_scene_officer' table_name,org_level_uuid,badge_level,badge_type,badge_name,uuid,'现场工人证章' type_name,holder,'永久' useful_life from product_oa_badge_scene_officer ");
        sql.append("\n) d ");
        sql.append("\nleft join ( ");
        sql.append("\n    select b.* from ( ");
        sql.append("\n        select s.uuid,u.user_name borrow_by,m.created_utc_datetime borrow_time,s.return_by,s.return_date,badge_uuid, ");
        sql.append("\n                    case when s.return_by is null or s.return_by='' then '借出' else '归还' END badge_status ");
        sql.append("\n        from product_oa_badge_borrow_record m ");
        sql.append("\n        left join product_oa_badge_borrow_detail s on m.uuid=s.record_uuid ");
        sql.append("\n        inner join product_sys_users u on u.user_id=m.created_by ");
        sql.append("\n    ) b ");
        sql.append("\n    inner join ( ");
        sql.append("\n        select uuid,max(created_utc_datetime) last_borrow_time ");
        sql.append("\n        from ( ");
        sql.append("\n            select s.uuid,m.created_utc_datetime ");
        sql.append("\n            from product_oa_badge_borrow_record m ");
        sql.append("\n            left join product_oa_badge_borrow_detail s ");
        sql.append("\n            on m.uuid=s.record_uuid ");
        sql.append("\n        ) b ");
        sql.append("\n        group by uuid ");
        sql.append("\n    ) t ");
        sql.append("\n    on b.uuid=t.uuid and b.borrow_time=t.last_borrow_time ");
        sql.append("\n) b ");
        sql.append("\non d.uuid=b.badge_uuid ");
        sql.append("\ninner join ( ");
        sql.append("\n    select * FROM product_sys_dict where dict_name='badge_common_type' ");
        sql.append("\n) cp on d.badge_type=cp.dict_value ");
        sql.append("\ninner join product_sys_org_levels c on c.uuid=d.org_level_uuid ");
 
        String queryFilter = queryFilterService.getQueryFilter(fse);
        if (!StringUtils.isEmpty(queryFilter)) {
            sql.append("\nwhere ").append(queryFilter);
        }
 
        int pageSize = fse.getInteger(CmnConst.PAGE_SIZE) == null ? Integer.MAX_VALUE : fse.getInteger(CmnConst.PAGE_SIZE);
        int curPage = fse.getInteger(CmnConst.CUR_PAGE) == null ? 1 : fse.getInteger(CmnConst.CUR_PAGE);
        DataTableEntity dte = baseDao.listTable(sql.toString(), new Object[]{}, pageSize, curPage);
        dte.getMeta().addAliasTable(CmnConst.TABLE_PRODUCT_OA_BADGE_BORROW_RECORD,"m");
        dte.getMeta().addAliasTable(CmnConst.TABLE_PRODUCT_OA_BADGE_BORROW_DETAIL, "s");
        dte.getMeta().addAliasField(CmnConst.TABLE_PRODUCT_OA_BADGE_BORROW_RECORD + ".created_utc_datetime","borrow_time");
        baseDao.loadPromptData(dte);
        return dte;
    }
 
    /**
     * 证章借还记录
     * @param fse
     * @return
     */
    public DataTableEntity getBadgeBorrowAndReturnRecord(FieldSetEntity fse) {
        String tableUUID = fse.getString(CmnConst.FIELD_TABLE_UUID);
        DataTableEntity tableCacheDte = DataPoolCacheImpl.getInstance().getCacheData(CmnConst.CACHE_TABLE, new String[]{tableUUID});
        if (BaseUtil.dataTableIsEmpty(tableCacheDte)) {
            throw new BaseException(BadgeCode.BADGE_GET_BORROW_AND_RETURN_TABLE_NAME_FAIL.getValue(), BadgeCode.BADGE_GET_BORROW_AND_RETURN_TABLE_NAME_FAIL.getText());
        }
        FieldSetEntity tableCacheFse = tableCacheDte.getFieldSetEntity(0);
        String tableName = tableCacheFse.getString(CmnConst.FIELD_TABLE_NAME);
        String badgeUUID = fse.getUUID();
        StringBuilder sql = new StringBuilder(512);
        sql.append("\nselect b.*,org_level_uuid,badge_name,badge_level,badge_type,holder from ( ");
        sql.append("\n    select s.uuid,m.created_by borrow_by,m.created_utc_datetime borrow_time,s.return_by,s.return_date,badge_uuid ");
        sql.append("\n    from product_oa_badge_borrow_record m ");
        sql.append("\n    left join product_oa_badge_borrow_detail s ");
        sql.append("\n    on m.uuid=s.record_uuid ");
        sql.append("\n) b ");
        sql.append("\ninner join ").append(tableName).append(" d ");
        sql.append("\non b.badge_uuid=d.uuid ");
        sql.append("\nwhere d.uuid=?");
 
        int pageSize = fse.getInteger(CmnConst.PAGE_SIZE) == null ? Integer.MAX_VALUE : fse.getInteger(CmnConst.PAGE_SIZE);
        int curPage = fse.getInteger(CmnConst.CUR_PAGE) == null ? 1 : fse.getInteger(CmnConst.CUR_PAGE);
        DataTableEntity dte = baseDao.listTable(sql.toString(), new Object[]{badgeUUID}, pageSize, curPage);
        dte.getMeta().addAliasTable(CmnConst.TABLE_PRODUCT_OA_BADGE_BORROW_RECORD, "m");
        dte.getMeta().addAliasTable(CmnConst.TABLE_PRODUCT_OA_BADGE_BORROW_DETAIL, "s");
        dte.getMeta().addAliasField(CmnConst.TABLE_PRODUCT_OA_BADGE_BORROW_RECORD + ".created_by","borrow_by");
        dte.getMeta().addAliasField(CmnConst.TABLE_PRODUCT_OA_BADGE_BORROW_RECORD + ".created_utc_datetime","borrow_time");
        baseDao.loadPromptData(dte);
        return dte;
    }
}