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