package com.product.contract.service; import com.product.common.lang.StringUtils; import com.product.contract.config.CmnConst; import com.product.contract.config.SystemCode; import com.product.contract.service.ide.IContractChangeService; 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.permission.PermissionService; 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.util.BaseUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.Date; /** * Copyright LX * @Title: ContractChangeService * @Project: product-server * @date: 2021-06-28 17:51 * @author: ZhouJie * @Description: 合同变更 */ @Component public class ContractChangeService extends AbstractBaseService implements IContractChangeService { @Autowired public BaseDao baseDao; @Autowired PermissionService permissionService; @Autowired QueryFilterService queryFilterService; @Override @Transactional public String saveContractChange(FieldSetEntity fs) { if(StringUtils.isEmpty(fs.getString(CmnConst.UUID))){ fs.setValue("org_level_uuid", SpringMVCContextHolder.getCurrentUser().getOrg_level_uuid()); fs.setValue("created_by", SpringMVCContextHolder.getCurrentUser().getUser_id()); fs.setValue("created_utc_datetime",new Date()); DataTableEntity lxOaContractInfoSub = fs.getSubDataTable("product_project_contract_info_sub"); fs.removeSubData("product_project_contract_info_sub"); String uuid = baseDao.add(fs); if(!BaseUtil.dataTableIsEmpty(lxOaContractInfoSub)) { for (int i = 0; i < lxOaContractInfoSub.getRows(); i++) { FieldSetEntity fieldSetEntity = lxOaContractInfoSub.getFieldSetEntity(i); fieldSetEntity.setValue("contract_info_uuid", uuid); } baseDao.add(lxOaContractInfoSub); } return uuid; } else { fs.setValue("updated_by", SpringMVCContextHolder.getCurrentUser().getUser_id()); fs.setValue("updated_utc_datetime",new Date()); DataTableEntity lxOaContractInfoSub = fs.getSubDataTable("product_project_contract_info_sub"); fs.removeSubData("product_project_contract_info_sub"); baseDao.update(fs); String uuid = fs.getString(CmnConst.UUID); baseDao.delete("product_project_contract_info_sub", "contract_info_uuid = ?", new String[]{uuid}); if(!BaseUtil.dataTableIsEmpty(lxOaContractInfoSub)) { for (int i = 0; i < lxOaContractInfoSub.getRows(); i++) { FieldSetEntity fieldSetEntity = lxOaContractInfoSub.getFieldSetEntity(i); fieldSetEntity.setValue("contract_info_uuid", uuid); fieldSetEntity.remove("uuid"); } baseDao.add(lxOaContractInfoSub); } return uuid; } } @Override @Transactional public boolean deleteContractChange(FieldSetEntity fs) { String uuid = fs.getUUID(); String[] uuids = uuid.split(","); baseDao.delete(CmnConst.LX_PROJECT_CONTRACT_CHANGE, BaseUtil.buildQuestionMarkFilter(CmnConst.UUID, uuids.length, true), uuids); return baseDao.delete("product_project_contract_info_sub", BaseUtil.buildQuestionMarkFilter("contract_info_uuid", uuids.length, true), uuids); } /** * 合同变更列表 * @param fs * @return */ public DataTableEntity listContractChange(FieldSetEntity fs) { String queryFilter=permissionService.getDataFilter(CmnConst.ORG_LEVEL_UUID); if(StringUtils.isEmpty(queryFilter)) { queryFilter = CmnConst.CREATED_BY + " = " + SpringMVCContextHolder.getCurrentUser().getUser_id(); } if(!BaseUtil.dataTableIsEmpty(fs.getSubDataTable("systemSeniorQueryString"))){ queryFilter = queryFilter +" AND "+ queryFilterService.getQueryFilter(fs); } String filter = fs.getString("filter") + " AND " + queryFilter; DataTableEntity dt = baseDao.listTable(CmnConst.LX_PROJECT_CONTRACT_CHANGE,filter,new Object[]{},null,null,fs.getInteger(CmnConst.PAGESIZE), fs.getInteger(CmnConst.CPAGE)); baseDao.loadPromptData(dt); return dt; } /** * 查询合同变更详情 * @param fs * @return * @throws BaseException */ public FieldSetEntity findContractChange(FieldSetEntity fs) throws BaseException { String uuid = fs.getUUID(); FieldSetEntity fieldSetEntity = baseDao.getFieldSetEntity(CmnConst.LX_PROJECT_CONTRACT_CHANGE,uuid,true); DataTableEntity dataTableEntity = baseDao.listTable("product_project_contract_info_sub", "contract_info_uuid = ?", new String[]{uuid}); if(!BaseUtil.dataTableIsEmpty(dataTableEntity)){ fieldSetEntity.addSubDataTable(dataTableEntity); } return fieldSetEntity; } /** * 合同变更获取详情数据 * @param field * @return * @throws BaseException */ public FieldSetEntity changeObtainingReference(FieldSetEntity field)throws BaseException{ //合同uuid String uuid = field.getUUID(); //如果该合同已经开票 这不能变更 DataTableEntity invoiceData = baseDao.listTable(CmnConst.LX_PROJECT_CONTRACT_INVOICE, " contract_name = ? ", new String[]{uuid}); if(!BaseUtil.dataTableIsEmpty(invoiceData)){ throw new BaseException(SystemCode.SYSTEM_INVOICE_CONTRACT_UNABLE_CHANGE.getValue(), SystemCode.SYSTEM_INVOICE_CONTRACT_UNABLE_CHANGE.getText(),this.getClass(), "public FieldSetEntity changeObtainingReference(FieldSetEntity field)throws BaseException"); } //如果该合同的变更在流程中未结束,暂时无法变更 StringBuffer sql1 = new StringBuffer(); sql1.append(" SELECT * FROM product_project_contract_change a LEFT JOIN ") .append(" product_sys_flow_task b ON a.uuid = b.record_uuid WHERE a.contract_name = ? AND b.finish_type = 1 "); DataTableEntity changeData = baseDao.listTable(sql1.toString(), new String[]{uuid}); if(!BaseUtil.dataTableIsEmpty(changeData)){ throw new BaseException(SystemCode.SYSTEM_AGAIN_CONTRACT_UNABLE_CHANGE.getValue(), SystemCode.SYSTEM_AGAIN_CONTRACT_UNABLE_CHANGE.getText(),this.getClass(), "public FieldSetEntity changeObtainingReference(FieldSetEntity field)throws BaseException"); } //如果该合同变更流程已经结束, 取最新变更数据 StringBuffer sql2 = new StringBuffer(); sql2.append(" SELECT a.*,b.finish_time FROM product_project_contract_change a LEFT JOIN ") .append(" product_sys_flow_task b ON a.uuid = b.record_uuid WHERE a.contract_name = ? AND b.finish_type = 2 ORDER BY b.finish_time DESC "); DataTableEntity contractData = baseDao.listTable(sql2.toString(), new String[]{uuid}); //如果该合同没有变更 获取合同数据 if(BaseUtil.dataTableIsEmpty(contractData)){ return baseDao.getFieldSetEntity("product_project_contract_info", uuid, false); //如果该合同变更流程已经结束, 取最新变更数据 }else { FieldSetEntity fieldSetEntity = contractData.getFieldSetEntity(0); fieldSetEntity.setValue("contract_amount",fieldSetEntity.getString("change_the_amount")); return fieldSetEntity; } } }