feat(oa): 实现业务单据后端自动生成编号功能

- 在出差申请服务中集成RemoteCodeRuleService远程服务
- 在售后管理服务中集成RemoteCodeRuleService远程服务
- 在工时填报服务中集成RemoteCodeRuleService远程服务
dev
Yangk 2 weeks ago
parent 3ce1754e32
commit 10aa754afc

@ -26,6 +26,7 @@ import org.apache.dubbo.config.annotation.DubboReference;
import org.apache.seata.spring.annotation.GlobalTransactional; import org.apache.seata.spring.annotation.GlobalTransactional;
import org.dromara.common.core.enums.BusinessStatusEnum; import org.dromara.common.core.enums.BusinessStatusEnum;
import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.exception.ServiceException;
import org.dromara.system.api.RemoteCodeRuleService;
import org.dromara.workflow.api.RemoteWorkflowService; import org.dromara.workflow.api.RemoteWorkflowService;
import org.dromara.workflow.api.domain.RemoteStartProcess; import org.dromara.workflow.api.domain.RemoteStartProcess;
import org.dromara.workflow.api.event.ProcessEvent; import org.dromara.workflow.api.event.ProcessEvent;
@ -50,6 +51,9 @@ public class CrmBusinessTripApplyServiceImpl implements ICrmBusinessTripApplySer
@DubboReference(timeout = 30000) @DubboReference(timeout = 30000)
private RemoteWorkflowService remoteWorkflowService; private RemoteWorkflowService remoteWorkflowService;
@DubboReference()
private RemoteCodeRuleService remoteCodeRuleService;
/** /**
* *
* *
@ -144,6 +148,11 @@ public class CrmBusinessTripApplyServiceImpl implements ICrmBusinessTripApplySer
public Boolean insertByBo(CrmBusinessTripApplyBo bo) { public Boolean insertByBo(CrmBusinessTripApplyBo bo) {
CrmBusinessTripApply add = MapstructUtils.convert(bo, CrmBusinessTripApply.class); CrmBusinessTripApply add = MapstructUtils.convert(bo, CrmBusinessTripApply.class);
validEntityBeforeSave(add); validEntityBeforeSave(add);
// 自动生成申请单号
if (StringUtils.isBlank(add.getApplyCode())) {
String applyCode = remoteCodeRuleService.selectCodeRuleCode("1017");
add.setApplyCode(applyCode);
}
boolean flag = baseMapper.insert(add) > 0; boolean flag = baseMapper.insert(add) > 0;
if (flag) { if (flag) {
bo.setTripId(add.getTripId()); bo.setTripId(add.getTripId());

@ -106,7 +106,7 @@ public class ErpAfterSalesBo extends BaseEntity {
/** /**
* ID * ID
*/ */
@NotBlank(message = "客户干系人ID关联客户联系人表不能为空", groups = { AddGroup.class, EditGroup.class }) // @NotBlank(message = "客户干系人ID关联客户联系人表不能为空", groups = { AddGroup.class, EditGroup.class })
private String stakeholderId; private String stakeholderId;
/** /**

@ -37,7 +37,6 @@ public class ErpTimesheetInfoBo extends BaseEntity {
/** /**
* *
*/ */
@NotBlank(message = "工时填报编号不能为空", groups = { AddGroup.class, EditGroup.class })
private String timesheetCode; private String timesheetCode;
/** /**
@ -118,5 +117,4 @@ public class ErpTimesheetInfoBo extends BaseEntity {
*/ */
private RemoteFlowInstanceBizExt bizExt; private RemoteFlowInstanceBizExt bizExt;
} }

@ -9,9 +9,9 @@ import org.dromara.common.core.enums.BusinessStatusEnum;
import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.toolkit.JoinWrappers; import com.github.yulichang.toolkit.JoinWrappers;
import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@ -25,6 +25,7 @@ import org.dromara.oa.erp.domain.vo.ErpAfterSalesLaborCostsVo;
import org.dromara.oa.erp.domain.vo.ErpAfterSalesMaterialCostsVo; import org.dromara.oa.erp.domain.vo.ErpAfterSalesMaterialCostsVo;
import org.dromara.oa.erp.service.IErpAfterSalesLaborCostsService; import org.dromara.oa.erp.service.IErpAfterSalesLaborCostsService;
import org.dromara.oa.erp.service.IErpAfterSalesMaterialCostsService; import org.dromara.oa.erp.service.IErpAfterSalesMaterialCostsService;
import org.dromara.system.api.RemoteCodeRuleService;
import org.dromara.workflow.api.RemoteWorkflowService; import org.dromara.workflow.api.RemoteWorkflowService;
import org.dromara.workflow.api.domain.RemoteStartProcess; import org.dromara.workflow.api.domain.RemoteStartProcess;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -38,8 +39,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.springframework.context.event.EventListener; import org.springframework.context.event.EventListener;
import org.dromara.workflow.api.event.ProcessEvent; import org.dromara.workflow.api.event.ProcessEvent;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -61,6 +60,9 @@ public class ErpAfterSalesServiceImpl implements IErpAfterSalesService {
@DubboReference(timeout = 30000) @DubboReference(timeout = 30000)
private RemoteWorkflowService remoteWorkflowService; private RemoteWorkflowService remoteWorkflowService;
@DubboReference()
private RemoteCodeRuleService remoteCodeRuleService;
private final IErpAfterSalesLaborCostsService laborCostsService; private final IErpAfterSalesLaborCostsService laborCostsService;
private final IErpAfterSalesMaterialCostsService materialCostsService; private final IErpAfterSalesMaterialCostsService materialCostsService;
@ -71,22 +73,22 @@ public class ErpAfterSalesServiceImpl implements IErpAfterSalesService {
* @return * @return
*/ */
@Override @Override
public ErpAfterSalesVo queryById(Long afterSalesId){ public ErpAfterSalesVo queryById(Long afterSalesId) {
ErpAfterSalesVo vo = baseMapper.selectVoById(afterSalesId); ErpAfterSalesVo vo = baseMapper.selectVoById(afterSalesId);
if (vo != null) { if (vo != null) {
List<ErpAfterSalesLaborCosts> laborEntities = laborCostsService.list( List<ErpAfterSalesLaborCosts> laborEntities = laborCostsService.list(
new LambdaQueryWrapper<ErpAfterSalesLaborCosts>() new LambdaQueryWrapper<ErpAfterSalesLaborCosts>()
.eq(ErpAfterSalesLaborCosts::getAfterSalesId, afterSalesId) .eq(ErpAfterSalesLaborCosts::getAfterSalesId, afterSalesId));
); List<ErpAfterSalesLaborCostsVo> laborVos = MapstructUtils.convert(laborEntities,
List<ErpAfterSalesLaborCostsVo> laborVos = MapstructUtils.convert(laborEntities, ErpAfterSalesLaborCostsVo.class); ErpAfterSalesLaborCostsVo.class);
vo.setLaborCostsList(laborVos); vo.setLaborCostsList(laborVos);
List<ErpAfterSalesMaterialCosts> materialEntities = materialCostsService.list( List<ErpAfterSalesMaterialCosts> materialEntities = materialCostsService.list(
new LambdaQueryWrapper<ErpAfterSalesMaterialCosts>() new LambdaQueryWrapper<ErpAfterSalesMaterialCosts>()
.eq(ErpAfterSalesMaterialCosts::getAfterSalesId, afterSalesId) .eq(ErpAfterSalesMaterialCosts::getAfterSalesId, afterSalesId));
); List<ErpAfterSalesMaterialCostsVo> materialVos = MapstructUtils.convert(materialEntities,
List<ErpAfterSalesMaterialCostsVo> materialVos = MapstructUtils.convert(materialEntities, ErpAfterSalesMaterialCostsVo.class); ErpAfterSalesMaterialCostsVo.class);
vo.setMaterialCostsList(materialVos); vo.setMaterialCostsList(materialVos);
} }
return vo; return vo;
@ -102,7 +104,8 @@ public class ErpAfterSalesServiceImpl implements IErpAfterSalesService {
@Override @Override
public TableDataInfo<ErpAfterSalesVo> queryPageList(ErpAfterSalesBo bo, PageQuery pageQuery) { public TableDataInfo<ErpAfterSalesVo> queryPageList(ErpAfterSalesBo bo, PageQuery pageQuery) {
MPJLambdaWrapper<ErpAfterSales> lqw = buildQueryWrapper(bo); MPJLambdaWrapper<ErpAfterSales> lqw = buildQueryWrapper(bo);
// Page<ErpAfterSalesVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); // Page<ErpAfterSalesVo> result = baseMapper.selectVoPage(pageQuery.build(),
// lqw);
Page<ErpAfterSalesVo> result = baseMapper.selectCustomVoPage(pageQuery.build(), lqw); Page<ErpAfterSalesVo> result = baseMapper.selectCustomVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result); return TableDataInfo.build(result);
} }
@ -116,7 +119,7 @@ public class ErpAfterSalesServiceImpl implements IErpAfterSalesService {
@Override @Override
public List<ErpAfterSalesVo> queryList(ErpAfterSalesBo bo) { public List<ErpAfterSalesVo> queryList(ErpAfterSalesBo bo) {
MPJLambdaWrapper<ErpAfterSales> lqw = buildQueryWrapper(bo); MPJLambdaWrapper<ErpAfterSales> lqw = buildQueryWrapper(bo);
// return baseMapper.selectVoList(lqw); // return baseMapper.selectVoList(lqw);
return baseMapper.selectCustomVoList(lqw); return baseMapper.selectCustomVoList(lqw);
} }
@ -125,31 +128,39 @@ public class ErpAfterSalesServiceImpl implements IErpAfterSalesService {
MPJLambdaWrapper<ErpAfterSales> lqw = JoinWrappers.lambda(ErpAfterSales.class) MPJLambdaWrapper<ErpAfterSales> lqw = JoinWrappers.lambda(ErpAfterSales.class)
.selectAll(ErpAfterSales.class) .selectAll(ErpAfterSales.class)
.eq(ErpAfterSales::getDelFlag, "0") .eq(ErpAfterSales::getDelFlag, "0")
.eq(StringUtils.isNotBlank(bo.getAfterSalesCode()), ErpAfterSales::getAfterSalesCode, bo.getAfterSalesCode()) .eq(StringUtils.isNotBlank(bo.getAfterSalesCode()), ErpAfterSales::getAfterSalesCode,
.eq(StringUtils.isNotBlank(bo.getAfterSalesSubject()), ErpAfterSales::getAfterSalesSubject, bo.getAfterSalesSubject()) bo.getAfterSalesCode())
.eq(StringUtils.isNotBlank(bo.getAfterSalesSubject()), ErpAfterSales::getAfterSalesSubject,
bo.getAfterSalesSubject())
.eq(bo.getProjectId() != null, ErpAfterSales::getProjectId, bo.getProjectId()) .eq(bo.getProjectId() != null, ErpAfterSales::getProjectId, bo.getProjectId())
.eq(StringUtils.isNotBlank(bo.getProjectCode()), ErpAfterSales::getProjectCode, bo.getProjectCode()) .eq(StringUtils.isNotBlank(bo.getProjectCode()), ErpAfterSales::getProjectCode, bo.getProjectCode())
.like(StringUtils.isNotBlank(bo.getProjectName()), ErpAfterSales::getProjectName, bo.getProjectName()) .like(StringUtils.isNotBlank(bo.getProjectName()), ErpAfterSales::getProjectName, bo.getProjectName())
.eq(bo.getCustomerId() != null, ErpAfterSales::getCustomerId, bo.getCustomerId()) .eq(bo.getCustomerId() != null, ErpAfterSales::getCustomerId, bo.getCustomerId())
.like(StringUtils.isNotBlank(bo.getCustomerName()), ErpAfterSales::getCustomerName, bo.getCustomerName()) .like(StringUtils.isNotBlank(bo.getCustomerName()), ErpAfterSales::getCustomerName,
.eq(StringUtils.isNotBlank(bo.getContactPerson()), ErpAfterSales::getContactPerson, bo.getContactPerson()) bo.getCustomerName())
.eq(StringUtils.isNotBlank(bo.getContactPerson()), ErpAfterSales::getContactPerson,
bo.getContactPerson())
.eq(StringUtils.isNotBlank(bo.getContactPhone()), ErpAfterSales::getContactPhone, bo.getContactPhone()) .eq(StringUtils.isNotBlank(bo.getContactPhone()), ErpAfterSales::getContactPhone, bo.getContactPhone())
.eq(bo.getAfterSalesDate() != null, ErpAfterSales::getAfterSalesDate, bo.getAfterSalesDate()) .eq(bo.getAfterSalesDate() != null, ErpAfterSales::getAfterSalesDate, bo.getAfterSalesDate())
.eq(bo.getContractId() != null, ErpAfterSales::getContractId, bo.getContractId()) .eq(bo.getContractId() != null, ErpAfterSales::getContractId, bo.getContractId())
.eq(StringUtils.isNotBlank(bo.getContractCode()), ErpAfterSales::getContractCode, bo.getContractCode()) .eq(StringUtils.isNotBlank(bo.getContractCode()), ErpAfterSales::getContractCode, bo.getContractCode())
.eq(StringUtils.isNotBlank(bo.getAfterSalesType()), ErpAfterSales::getAfterSalesType, bo.getAfterSalesType()) .eq(StringUtils.isNotBlank(bo.getAfterSalesType()), ErpAfterSales::getAfterSalesType,
.eq(StringUtils.isNotBlank(bo.getStakeholderId()), ErpAfterSales::getStakeholderId, bo.getStakeholderId()) bo.getAfterSalesType())
.eq(StringUtils.isNotBlank(bo.getStakeholderId()), ErpAfterSales::getStakeholderId,
bo.getStakeholderId())
.eq(StringUtils.isNotBlank(bo.getHandlerId()), ErpAfterSales::getHandlerId, bo.getHandlerId()) .eq(StringUtils.isNotBlank(bo.getHandlerId()), ErpAfterSales::getHandlerId, bo.getHandlerId())
.eq(StringUtils.isNotBlank(bo.getProblemDescription()), ErpAfterSales::getProblemDescription, bo.getProblemDescription()) .eq(StringUtils.isNotBlank(bo.getProblemDescription()), ErpAfterSales::getProblemDescription,
bo.getProblemDescription())
.eq(bo.getTotalWorkHours() != null, ErpAfterSales::getTotalWorkHours, bo.getTotalWorkHours()) .eq(bo.getTotalWorkHours() != null, ErpAfterSales::getTotalWorkHours, bo.getTotalWorkHours())
.eq(bo.getTotalCost() != null, ErpAfterSales::getTotalCost, bo.getTotalCost()) .eq(bo.getTotalCost() != null, ErpAfterSales::getTotalCost, bo.getTotalCost())
.eq(StringUtils.isNotBlank(bo.getSolveStatus()), ErpAfterSales::getSolveStatus, bo.getSolveStatus()) .eq(StringUtils.isNotBlank(bo.getSolveStatus()), ErpAfterSales::getSolveStatus, bo.getSolveStatus())
.eq(bo.getCompletionDate() != null, ErpAfterSales::getCompletionDate, bo.getCompletionDate()) .eq(bo.getCompletionDate() != null, ErpAfterSales::getCompletionDate, bo.getCompletionDate())
.eq(StringUtils.isNotBlank(bo.getProcessingResult()), ErpAfterSales::getProcessingResult, bo.getProcessingResult()) .eq(StringUtils.isNotBlank(bo.getProcessingResult()), ErpAfterSales::getProcessingResult,
.eq(StringUtils.isNotBlank(bo.getAfterSalesStatus()), ErpAfterSales::getAfterSalesStatus, bo.getAfterSalesStatus()) bo.getProcessingResult())
.eq(StringUtils.isNotBlank(bo.getAfterSalesStatus()), ErpAfterSales::getAfterSalesStatus,
bo.getAfterSalesStatus())
.eq(StringUtils.isNotBlank(bo.getFlowStatus()), ErpAfterSales::getFlowStatus, bo.getFlowStatus()) .eq(StringUtils.isNotBlank(bo.getFlowStatus()), ErpAfterSales::getFlowStatus, bo.getFlowStatus())
.eq(StringUtils.isNotBlank(bo.getActiveFlag()), ErpAfterSales::getActiveFlag, bo.getActiveFlag()) .eq(StringUtils.isNotBlank(bo.getActiveFlag()), ErpAfterSales::getActiveFlag, bo.getActiveFlag());
;
return lqw; return lqw;
} }
@ -165,6 +176,11 @@ public class ErpAfterSalesServiceImpl implements IErpAfterSalesService {
ErpAfterSales add = MapstructUtils.convert(bo, ErpAfterSales.class); ErpAfterSales add = MapstructUtils.convert(bo, ErpAfterSales.class);
validEntityBeforeSave(add); validEntityBeforeSave(add);
// 自动生成售后编号
if (StringUtils.isBlank(add.getAfterSalesCode())) {
String afterSalesCode = remoteCodeRuleService.selectCodeRuleCode("1012");
add.setAfterSalesCode(afterSalesCode);
}
boolean flag = baseMapper.insert(add) > 0; boolean flag = baseMapper.insert(add) > 0;
bo.setAfterSalesId(add.getAfterSalesId()); // 将生成的 ID 回填给 BO bo.setAfterSalesId(add.getAfterSalesId()); // 将生成的 ID 回填给 BO
@ -174,14 +190,16 @@ public class ErpAfterSalesServiceImpl implements IErpAfterSalesService {
List<ErpAfterSalesLaborCostsBo> laborBoList = bo.getLaborCostsList(); List<ErpAfterSalesLaborCostsBo> laborBoList = bo.getLaborCostsList();
if (CollUtil.isNotEmpty(laborBoList)) { if (CollUtil.isNotEmpty(laborBoList)) {
List<ErpAfterSalesLaborCosts> laborList = MapstructUtils.convert(laborBoList, ErpAfterSalesLaborCosts.class); List<ErpAfterSalesLaborCosts> laborList = MapstructUtils.convert(laborBoList,
ErpAfterSalesLaborCosts.class);
laborList.forEach(item -> item.setAfterSalesId(afterSalesId)); laborList.forEach(item -> item.setAfterSalesId(afterSalesId));
laborCostsService.saveBatch(laborList); laborCostsService.saveBatch(laborList);
} }
List<ErpAfterSalesMaterialCostsBo> materialBoList = bo.getMaterialCostsList(); List<ErpAfterSalesMaterialCostsBo> materialBoList = bo.getMaterialCostsList();
if (CollUtil.isNotEmpty(materialBoList)) { if (CollUtil.isNotEmpty(materialBoList)) {
List<ErpAfterSalesMaterialCosts> materialList = MapstructUtils.convert(materialBoList, ErpAfterSalesMaterialCosts.class); List<ErpAfterSalesMaterialCosts> materialList = MapstructUtils.convert(materialBoList,
ErpAfterSalesMaterialCosts.class);
materialList.forEach(item -> item.setAfterSalesId(afterSalesId)); materialList.forEach(item -> item.setAfterSalesId(afterSalesId));
materialCostsService.saveBatch(materialList); materialCostsService.saveBatch(materialList);
} }
@ -213,7 +231,8 @@ public class ErpAfterSalesServiceImpl implements IErpAfterSalesService {
// 后新增新的 // 后新增新的
List<ErpAfterSalesLaborCostsBo> laborBoList = bo.getLaborCostsList(); List<ErpAfterSalesLaborCostsBo> laborBoList = bo.getLaborCostsList();
if (CollUtil.isNotEmpty(laborBoList)) { if (CollUtil.isNotEmpty(laborBoList)) {
List<ErpAfterSalesLaborCosts> laborList = MapstructUtils.convert(laborBoList, ErpAfterSalesLaborCosts.class); List<ErpAfterSalesLaborCosts> laborList = MapstructUtils.convert(laborBoList,
ErpAfterSalesLaborCosts.class);
// 遍历列表,清空 ID // 遍历列表,清空 ID
laborList.forEach(item -> { laborList.forEach(item -> {
@ -230,7 +249,8 @@ public class ErpAfterSalesServiceImpl implements IErpAfterSalesService {
List<ErpAfterSalesMaterialCostsBo> materialBoList = bo.getMaterialCostsList(); List<ErpAfterSalesMaterialCostsBo> materialBoList = bo.getMaterialCostsList();
if (CollUtil.isNotEmpty(materialBoList)) { if (CollUtil.isNotEmpty(materialBoList)) {
List<ErpAfterSalesMaterialCosts> materialList = MapstructUtils.convert(materialBoList, ErpAfterSalesMaterialCosts.class); List<ErpAfterSalesMaterialCosts> materialList = MapstructUtils.convert(materialBoList,
ErpAfterSalesMaterialCosts.class);
materialList.forEach(item -> { materialList.forEach(item -> {
item.setMaterialCostsId(null); item.setMaterialCostsId(null);
@ -246,8 +266,8 @@ public class ErpAfterSalesServiceImpl implements IErpAfterSalesService {
/** /**
* *
*/ */
private void validEntityBeforeSave(ErpAfterSales entity){ private void validEntityBeforeSave(ErpAfterSales entity) {
//TODO 做一些数据校验,如唯一约束 // TODO 做一些数据校验,如唯一约束
} }
/** /**
@ -259,8 +279,8 @@ public class ErpAfterSalesServiceImpl implements IErpAfterSalesService {
*/ */
@Override @Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){ if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验 // TODO 做一些业务上的校验,判断是否需要校验
} }
return baseMapper.deleteByIds(ids) > 0; return baseMapper.deleteByIds(ids) > 0;
} }
@ -363,5 +383,4 @@ public class ErpAfterSalesServiceImpl implements IErpAfterSalesService {
}); });
} }
} }

@ -72,7 +72,8 @@ public class ErpContractInfoServiceImpl implements IErpContractInfoService {
.selectAll(ErpContractMaterial.class) .selectAll(ErpContractMaterial.class)
.eq(contractId != null, ErpContractMaterial::getContractId, contractId) .eq(contractId != null, ErpContractMaterial::getContractId, contractId)
.eq("t.del_flag", "0"); .eq("t.del_flag", "0");
List<ErpContractMaterialVo> contractMaterialList = contractMaterialMapper.selectCustomErpContractMaterialVoList(lqw); List<ErpContractMaterialVo> contractMaterialList = contractMaterialMapper
.selectCustomErpContractMaterialVoList(lqw);
contractInfoVo.setContractMaterialList(contractMaterialList); contractInfoVo.setContractMaterialList(contractMaterialList);
return contractInfoVo; return contractInfoVo;
} }
@ -107,27 +108,38 @@ public class ErpContractInfoServiceImpl implements IErpContractInfoService {
Map<String, Object> params = bo.getParams(); Map<String, Object> params = bo.getParams();
MPJLambdaWrapper<ErpContractInfo> lqw = JoinWrappers.lambda(ErpContractInfo.class) MPJLambdaWrapper<ErpContractInfo> lqw = JoinWrappers.lambda(ErpContractInfo.class)
.selectAll(ErpContractInfo.class) .selectAll(ErpContractInfo.class)
.eq(StringUtils.isNotBlank(bo.getContractFlag()), ErpContractInfo::getContractFlag, bo.getContractFlag()) .eq(StringUtils.isNotBlank(bo.getContractFlag()), ErpContractInfo::getContractFlag,
.eq(StringUtils.isNotBlank(bo.getContractCode()), ErpContractInfo::getContractCode, bo.getContractCode()) bo.getContractFlag())
.eq(StringUtils.isNotBlank(bo.getCustomerContractCode()), ErpContractInfo::getCustomerContractCode, bo.getCustomerContractCode()) .eq(StringUtils.isNotBlank(bo.getContractCode()), ErpContractInfo::getContractCode,
.like(StringUtils.isNotBlank(bo.getContractName()), ErpContractInfo::getContractName, bo.getContractName()) bo.getContractCode())
.eq(StringUtils.isNotBlank(bo.getContractCategory()), ErpContractInfo::getContractCategory, bo.getContractCategory()) .eq(StringUtils.isNotBlank(bo.getCustomerContractCode()), ErpContractInfo::getCustomerContractCode,
.eq(StringUtils.isNotBlank(bo.getContractType()), ErpContractInfo::getContractType, bo.getContractType()) bo.getCustomerContractCode())
.eq(StringUtils.isNotBlank(bo.getBusinessDirection()), ErpContractInfo::getBusinessDirection, bo.getBusinessDirection()) .like(StringUtils.isNotBlank(bo.getContractName()), ErpContractInfo::getContractName,
bo.getContractName())
.eq(StringUtils.isNotBlank(bo.getContractCategory()), ErpContractInfo::getContractCategory,
bo.getContractCategory())
.eq(StringUtils.isNotBlank(bo.getContractType()), ErpContractInfo::getContractType,
bo.getContractType())
.eq(StringUtils.isNotBlank(bo.getBusinessDirection()), ErpContractInfo::getBusinessDirection,
bo.getBusinessDirection())
.eq(bo.getContractDeptId() != null, ErpContractInfo::getContractDeptId, bo.getContractDeptId()) .eq(bo.getContractDeptId() != null, ErpContractInfo::getContractDeptId, bo.getContractDeptId())
.eq(bo.getContractDate() != null, ErpContractInfo::getContractDate, bo.getContractDate()) .eq(bo.getContractDate() != null, ErpContractInfo::getContractDate, bo.getContractDate())
.eq(bo.getTotalPrice() != null, ErpContractInfo::getTotalPrice, bo.getTotalPrice()) .eq(bo.getTotalPrice() != null, ErpContractInfo::getTotalPrice, bo.getTotalPrice())
.eq(StringUtils.isNotBlank(bo.getContractStatus()), ErpContractInfo::getContractStatus, bo.getContractStatus()) .eq(StringUtils.isNotBlank(bo.getContractStatus()), ErpContractInfo::getContractStatus,
bo.getContractStatus())
.eq(StringUtils.isNotBlank(bo.getFlowStatus()), ErpContractInfo::getFlowStatus, bo.getFlowStatus()) .eq(StringUtils.isNotBlank(bo.getFlowStatus()), ErpContractInfo::getFlowStatus, bo.getFlowStatus())
.eq(bo.getTemplateId() != null, ErpContractInfo::getTemplateId, bo.getTemplateId()) .eq(bo.getTemplateId() != null, ErpContractInfo::getTemplateId, bo.getTemplateId())
.eq(StringUtils.isNotBlank(bo.getOssId()), ErpContractInfo::getOssId, bo.getOssId()) .eq(StringUtils.isNotBlank(bo.getOssId()), ErpContractInfo::getOssId, bo.getOssId())
.eq(StringUtils.isNotBlank(bo.getPaymentMethod()), ErpContractInfo::getPaymentMethod, bo.getPaymentMethod()) .eq(StringUtils.isNotBlank(bo.getPaymentMethod()), ErpContractInfo::getPaymentMethod,
bo.getPaymentMethod())
.eq(bo.getSignatureAppendix() != null, ErpContractInfo::getSignatureAppendix, bo.getSignatureAppendix()) .eq(bo.getSignatureAppendix() != null, ErpContractInfo::getSignatureAppendix, bo.getSignatureAppendix())
.eq(bo.getTaxRate() != null, ErpContractInfo::getTaxRate, bo.getTaxRate()) .eq(bo.getTaxRate() != null, ErpContractInfo::getTaxRate, bo.getTaxRate())
.eq(StringUtils.isNotBlank(bo.getActiveFlag()), ErpContractInfo::getActiveFlag, bo.getActiveFlag()) .eq(StringUtils.isNotBlank(bo.getActiveFlag()), ErpContractInfo::getActiveFlag, bo.getActiveFlag())
.eq(bo.getContractManagerId() != null, ErpContractInfo::getContractManagerId, bo.getContractManagerId()) .eq(bo.getContractManagerId() != null, ErpContractInfo::getContractManagerId, bo.getContractManagerId())
.eq(StringUtils.isNotBlank(bo.getCapitalizedAmount()), ErpContractInfo::getCapitalizedAmount, bo.getCapitalizedAmount()) .eq(StringUtils.isNotBlank(bo.getCapitalizedAmount()), ErpContractInfo::getCapitalizedAmount,
.eq(StringUtils.isNotBlank(bo.getContractTemplateFlag()), ErpContractInfo::getContractTemplateFlag, bo.getContractTemplateFlag()) bo.getCapitalizedAmount())
.eq(StringUtils.isNotBlank(bo.getContractTemplateFlag()), ErpContractInfo::getContractTemplateFlag,
bo.getContractTemplateFlag())
.eq("t.del_flag", "0") .eq("t.del_flag", "0")
.orderByDesc(ErpContractInfo::getCreateTime); .orderByDesc(ErpContractInfo::getCreateTime);
return lqw; return lqw;
@ -207,7 +219,8 @@ public class ErpContractInfoServiceImpl implements IErpContractInfoService {
* @param customerId ID * @param customerId ID
*/ */
private void processRelationMaterial(ErpContractMaterial erpContractMaterial, Long customerId) { private void processRelationMaterial(ErpContractMaterial erpContractMaterial, Long customerId) {
if (erpContractMaterial.getMaterialId() != null && customerId != null && erpContractMaterial.getMaterialFlag().equals("1")) { if (erpContractMaterial.getMaterialId() != null && customerId != null
&& erpContractMaterial.getMaterialFlag().equals("1")) {
Long relationMaterialId = erpContractMaterial.getRelationMaterialId(); Long relationMaterialId = erpContractMaterial.getRelationMaterialId();
// 如果relationMaterialId为空则查询是否存在关联物料信息 // 如果relationMaterialId为空则查询是否存在关联物料信息
if (relationMaterialId == null) { if (relationMaterialId == null) {
@ -238,10 +251,11 @@ public class ErpContractInfoServiceImpl implements IErpContractInfoService {
*/ */
private void validEntityBeforeSave(ErpContractInfo entity) { private void validEntityBeforeSave(ErpContractInfo entity) {
// 物料列表的强制校验 // 物料列表的强制校验
// if (entity.getContractMaterialList() == null || entity.getContractMaterialList().isEmpty()) { // if (entity.getContractMaterialList() == null ||
// entity.getContractMaterialList().isEmpty()) {
// throw new ServiceException("请填写合同物料!"); // throw new ServiceException("请填写合同物料!");
// } // }
//存储合同大写金额 // 存储合同大写金额
if (StringUtils.isNotNull(entity.getTotalPrice())) { if (StringUtils.isNotNull(entity.getTotalPrice())) {
String capitalizedAmount = NumberChineseFormatter.format(entity.getTotalPrice().doubleValue(), true, true); String capitalizedAmount = NumberChineseFormatter.format(entity.getTotalPrice().doubleValue(), true, true);
entity.setCapitalizedAmount(capitalizedAmount); entity.setCapitalizedAmount(capitalizedAmount);
@ -258,7 +272,7 @@ public class ErpContractInfoServiceImpl implements IErpContractInfoService {
@Override @Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if (isValid) { if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验 // TODO 做一些业务上的校验,判断是否需要校验
} }
return baseMapper.deleteByIds(ids) > 0; return baseMapper.deleteByIds(ids) > 0;
} }

@ -10,9 +10,9 @@ import org.dromara.common.core.enums.BusinessStatusEnum;
import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.toolkit.JoinWrappers; import com.github.yulichang.toolkit.JoinWrappers;
import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@ -26,6 +26,7 @@ import org.dromara.oa.erp.domain.vo.ErpTimesheetDeptVo;
import org.dromara.oa.erp.domain.vo.ErpTimesheetProjectVo; import org.dromara.oa.erp.domain.vo.ErpTimesheetProjectVo;
import org.dromara.oa.erp.service.IErpTimesheetDeptService; import org.dromara.oa.erp.service.IErpTimesheetDeptService;
import org.dromara.oa.erp.service.IErpTimesheetProjectService; import org.dromara.oa.erp.service.IErpTimesheetProjectService;
import org.dromara.system.api.RemoteCodeRuleService;
import org.dromara.workflow.api.RemoteWorkflowService; import org.dromara.workflow.api.RemoteWorkflowService;
import org.dromara.workflow.api.domain.RemoteStartProcess; import org.dromara.workflow.api.domain.RemoteStartProcess;
import org.dromara.workflow.api.event.ProcessEvent; import org.dromara.workflow.api.event.ProcessEvent;
@ -57,6 +58,9 @@ public class ErpTimesheetInfoServiceImpl implements IErpTimesheetInfoService {
@DubboReference(timeout = 30000) @DubboReference(timeout = 30000)
private RemoteWorkflowService remoteWorkflowService; private RemoteWorkflowService remoteWorkflowService;
@DubboReference()
private RemoteCodeRuleService remoteCodeRuleService;
private final IErpTimesheetDeptService timesheetDeptService; private final IErpTimesheetDeptService timesheetDeptService;
private final IErpTimesheetProjectService timesheetProjectService; private final IErpTimesheetProjectService timesheetProjectService;
@ -72,14 +76,12 @@ public class ErpTimesheetInfoServiceImpl implements IErpTimesheetInfoService {
if (vo != null) { if (vo != null) {
// 回显部门工时 // 回显部门工时
List<ErpTimesheetDept> deptList = timesheetDeptService.list( List<ErpTimesheetDept> deptList = timesheetDeptService.list(
new LambdaQueryWrapper<ErpTimesheetDept>().eq(ErpTimesheetDept::getTimesheetId, timesheetId) new LambdaQueryWrapper<ErpTimesheetDept>().eq(ErpTimesheetDept::getTimesheetId, timesheetId));
);
vo.setTimesheetDeptList(MapstructUtils.convert(deptList, ErpTimesheetDeptVo.class)); vo.setTimesheetDeptList(MapstructUtils.convert(deptList, ErpTimesheetDeptVo.class));
// 回显项目工时 // 回显项目工时
List<ErpTimesheetProject> projectList = timesheetProjectService.list( List<ErpTimesheetProject> projectList = timesheetProjectService.list(
new LambdaQueryWrapper<ErpTimesheetProject>().eq(ErpTimesheetProject::getTimesheetId, timesheetId) new LambdaQueryWrapper<ErpTimesheetProject>().eq(ErpTimesheetProject::getTimesheetId, timesheetId));
);
vo.setTimesheetProjectList(MapstructUtils.convert(projectList, ErpTimesheetProjectVo.class)); vo.setTimesheetProjectList(MapstructUtils.convert(projectList, ErpTimesheetProjectVo.class));
} }
return vo; return vo;
@ -95,7 +97,8 @@ public class ErpTimesheetInfoServiceImpl implements IErpTimesheetInfoService {
@Override @Override
public TableDataInfo<ErpTimesheetInfoVo> queryPageList(ErpTimesheetInfoBo bo, PageQuery pageQuery) { public TableDataInfo<ErpTimesheetInfoVo> queryPageList(ErpTimesheetInfoBo bo, PageQuery pageQuery) {
MPJLambdaWrapper<ErpTimesheetInfo> lqw = buildQueryWrapper(bo); MPJLambdaWrapper<ErpTimesheetInfo> lqw = buildQueryWrapper(bo);
// Page<ErpTimesheetInfoVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); // Page<ErpTimesheetInfoVo> result = baseMapper.selectVoPage(pageQuery.build(),
// lqw);
Page<ErpTimesheetInfoVo> result = baseMapper.selectCustomVoPage(pageQuery.build(), lqw); Page<ErpTimesheetInfoVo> result = baseMapper.selectCustomVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result); return TableDataInfo.build(result);
} }
@ -109,7 +112,7 @@ public class ErpTimesheetInfoServiceImpl implements IErpTimesheetInfoService {
@Override @Override
public List<ErpTimesheetInfoVo> queryList(ErpTimesheetInfoBo bo) { public List<ErpTimesheetInfoVo> queryList(ErpTimesheetInfoBo bo) {
MPJLambdaWrapper<ErpTimesheetInfo> lqw = buildQueryWrapper(bo); MPJLambdaWrapper<ErpTimesheetInfo> lqw = buildQueryWrapper(bo);
// return baseMapper.selectVoList(lqw); // return baseMapper.selectVoList(lqw);
return baseMapper.selectCustomVoList(lqw); return baseMapper.selectCustomVoList(lqw);
} }
@ -119,7 +122,8 @@ public class ErpTimesheetInfoServiceImpl implements IErpTimesheetInfoService {
MPJLambdaWrapper<ErpTimesheetInfo> lqw = JoinWrappers.lambda(ErpTimesheetInfo.class) MPJLambdaWrapper<ErpTimesheetInfo> lqw = JoinWrappers.lambda(ErpTimesheetInfo.class)
.selectAll(ErpTimesheetInfo.class) .selectAll(ErpTimesheetInfo.class)
.eq(ErpTimesheetInfo::getDelFlag, "0") .eq(ErpTimesheetInfo::getDelFlag, "0")
.eq(StringUtils.isNotBlank(bo.getTimesheetCode()), ErpTimesheetInfo::getTimesheetCode, bo.getTimesheetCode()) .eq(StringUtils.isNotBlank(bo.getTimesheetCode()), ErpTimesheetInfo::getTimesheetCode,
bo.getTimesheetCode())
.eq(bo.getUserId() != null, ErpTimesheetInfo::getUserId, bo.getUserId()) .eq(bo.getUserId() != null, ErpTimesheetInfo::getUserId, bo.getUserId())
.eq(bo.getDeptId() != null, ErpTimesheetInfo::getDeptId, bo.getDeptId()) .eq(bo.getDeptId() != null, ErpTimesheetInfo::getDeptId, bo.getDeptId())
.eq(bo.getStartTime() != null, ErpTimesheetInfo::getStartTime, bo.getStartTime()) .eq(bo.getStartTime() != null, ErpTimesheetInfo::getStartTime, bo.getStartTime())
@ -127,9 +131,9 @@ public class ErpTimesheetInfoServiceImpl implements IErpTimesheetInfoService {
.eq(bo.getTotalHours() != null, ErpTimesheetInfo::getTotalHours, bo.getTotalHours()) .eq(bo.getTotalHours() != null, ErpTimesheetInfo::getTotalHours, bo.getTotalHours())
.eq(bo.getDeptHours() != null, ErpTimesheetInfo::getDeptHours, bo.getDeptHours()) .eq(bo.getDeptHours() != null, ErpTimesheetInfo::getDeptHours, bo.getDeptHours())
.eq(bo.getProjectHours() != null, ErpTimesheetInfo::getProjectHours, bo.getProjectHours()) .eq(bo.getProjectHours() != null, ErpTimesheetInfo::getProjectHours, bo.getProjectHours())
.eq(StringUtils.isNotBlank(bo.getTimesheetStatus()), ErpTimesheetInfo::getTimesheetStatus, bo.getTimesheetStatus()) .eq(StringUtils.isNotBlank(bo.getTimesheetStatus()), ErpTimesheetInfo::getTimesheetStatus,
.eq(StringUtils.isNotBlank(bo.getFlowStatus()), ErpTimesheetInfo::getFlowStatus, bo.getFlowStatus()) bo.getTimesheetStatus())
; .eq(StringUtils.isNotBlank(bo.getFlowStatus()), ErpTimesheetInfo::getFlowStatus, bo.getFlowStatus());
return lqw; return lqw;
} }
@ -144,6 +148,11 @@ public class ErpTimesheetInfoServiceImpl implements IErpTimesheetInfoService {
public Boolean insertByBo(ErpTimesheetInfoBo bo) { public Boolean insertByBo(ErpTimesheetInfoBo bo) {
ErpTimesheetInfo add = MapstructUtils.convert(bo, ErpTimesheetInfo.class); ErpTimesheetInfo add = MapstructUtils.convert(bo, ErpTimesheetInfo.class);
validEntityBeforeSave(add); validEntityBeforeSave(add);
// 自动生成工时单号
if (StringUtils.isBlank(add.getTimesheetCode())) {
String timesheetCode = remoteCodeRuleService.selectCodeRuleCode("1015");
add.setTimesheetCode(timesheetCode);
}
boolean flag = baseMapper.insert(add) > 0; boolean flag = baseMapper.insert(add) > 0;
if (flag) { if (flag) {
@ -220,8 +229,8 @@ public class ErpTimesheetInfoServiceImpl implements IErpTimesheetInfoService {
/** /**
* *
*/ */
private void validEntityBeforeSave(ErpTimesheetInfo entity){ private void validEntityBeforeSave(ErpTimesheetInfo entity) {
//TODO 做一些数据校验,如唯一约束 // TODO 做一些数据校验,如唯一约束
} }
/** /**
@ -233,8 +242,8 @@ public class ErpTimesheetInfoServiceImpl implements IErpTimesheetInfoService {
*/ */
@Override @Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){ if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验 // TODO 做一些业务上的校验,判断是否需要校验
} }
return baseMapper.deleteByIds(ids) > 0; return baseMapper.deleteByIds(ids) > 0;
} }
@ -276,7 +285,6 @@ public class ErpTimesheetInfoServiceImpl implements IErpTimesheetInfoService {
// hasDeptWork (是否有部门工时) - true/false // hasDeptWork (是否有部门工时) - true/false
variables.put("hasDeptWork", CollUtil.isNotEmpty(deptApprovers)); variables.put("hasDeptWork", CollUtil.isNotEmpty(deptApprovers));
// --- 处理项目工时审批人 --- // --- 处理项目工时审批人 ---
List<ErpTimesheetProjectBo> projectList = bo.getTimesheetProjectList(); List<ErpTimesheetProjectBo> projectList = bo.getTimesheetProjectList();
List<String> projectApprovers = new ArrayList<>(); List<String> projectApprovers = new ArrayList<>();
@ -292,7 +300,6 @@ public class ErpTimesheetInfoServiceImpl implements IErpTimesheetInfoService {
variables.put("projectApprovers", projectApprovers); variables.put("projectApprovers", projectApprovers);
variables.put("hasProjectWork", CollUtil.isNotEmpty(projectApprovers)); variables.put("hasProjectWork", CollUtil.isNotEmpty(projectApprovers));
RemoteStartProcess startProcess = new RemoteStartProcess(); RemoteStartProcess startProcess = new RemoteStartProcess();
startProcess.setBusinessId(bo.getTimesheetId().toString()); startProcess.setBusinessId(bo.getTimesheetId().toString());
startProcess.setFlowCode(bo.getFlowCode()); startProcess.setFlowCode(bo.getFlowCode());

Loading…
Cancel
Save