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; } }