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

- 在出差申请服务中集成RemoteCodeRuleService远程服务
- 在售后管理服务中集成RemoteCodeRuleService远程服务
- 在工时填报服务中集成RemoteCodeRuleService远程服务
dev
Yangk 1 week 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.dromara.common.core.enums.BusinessStatusEnum;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.system.api.RemoteCodeRuleService;
import org.dromara.workflow.api.RemoteWorkflowService;
import org.dromara.workflow.api.domain.RemoteStartProcess;
import org.dromara.workflow.api.event.ProcessEvent;
@ -50,6 +51,9 @@ public class CrmBusinessTripApplyServiceImpl implements ICrmBusinessTripApplySer
@DubboReference(timeout = 30000)
private RemoteWorkflowService remoteWorkflowService;
@DubboReference()
private RemoteCodeRuleService remoteCodeRuleService;
/**
*
*
@ -144,6 +148,11 @@ public class CrmBusinessTripApplyServiceImpl implements ICrmBusinessTripApplySer
public Boolean insertByBo(CrmBusinessTripApplyBo bo) {
CrmBusinessTripApply add = MapstructUtils.convert(bo, CrmBusinessTripApply.class);
validEntityBeforeSave(add);
// 自动生成申请单号
if (StringUtils.isBlank(add.getApplyCode())) {
String applyCode = remoteCodeRuleService.selectCodeRuleCode("1017");
add.setApplyCode(applyCode);
}
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setTripId(add.getTripId());

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

@ -37,7 +37,6 @@ public class ErpTimesheetInfoBo extends BaseEntity {
/**
*
*/
@NotBlank(message = "工时填报编号不能为空", groups = { AddGroup.class, EditGroup.class })
private String timesheetCode;
/**
@ -118,5 +117,4 @@ public class ErpTimesheetInfoBo extends BaseEntity {
*/
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.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.toolkit.JoinWrappers;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
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.service.IErpAfterSalesLaborCostsService;
import org.dromara.oa.erp.service.IErpAfterSalesMaterialCostsService;
import org.dromara.system.api.RemoteCodeRuleService;
import org.dromara.workflow.api.RemoteWorkflowService;
import org.dromara.workflow.api.domain.RemoteStartProcess;
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.dromara.workflow.api.event.ProcessEvent;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -61,6 +60,9 @@ public class ErpAfterSalesServiceImpl implements IErpAfterSalesService {
@DubboReference(timeout = 30000)
private RemoteWorkflowService remoteWorkflowService;
@DubboReference()
private RemoteCodeRuleService remoteCodeRuleService;
private final IErpAfterSalesLaborCostsService laborCostsService;
private final IErpAfterSalesMaterialCostsService materialCostsService;
@ -71,22 +73,22 @@ public class ErpAfterSalesServiceImpl implements IErpAfterSalesService {
* @return
*/
@Override
public ErpAfterSalesVo queryById(Long afterSalesId){
public ErpAfterSalesVo queryById(Long afterSalesId) {
ErpAfterSalesVo vo = baseMapper.selectVoById(afterSalesId);
if (vo != null) {
List<ErpAfterSalesLaborCosts> laborEntities = laborCostsService.list(
new LambdaQueryWrapper<ErpAfterSalesLaborCosts>()
.eq(ErpAfterSalesLaborCosts::getAfterSalesId, afterSalesId)
);
List<ErpAfterSalesLaborCostsVo> laborVos = MapstructUtils.convert(laborEntities, ErpAfterSalesLaborCostsVo.class);
.eq(ErpAfterSalesLaborCosts::getAfterSalesId, afterSalesId));
List<ErpAfterSalesLaborCostsVo> laborVos = MapstructUtils.convert(laborEntities,
ErpAfterSalesLaborCostsVo.class);
vo.setLaborCostsList(laborVos);
List<ErpAfterSalesMaterialCosts> materialEntities = materialCostsService.list(
new LambdaQueryWrapper<ErpAfterSalesMaterialCosts>()
.eq(ErpAfterSalesMaterialCosts::getAfterSalesId, afterSalesId)
);
List<ErpAfterSalesMaterialCostsVo> materialVos = MapstructUtils.convert(materialEntities, ErpAfterSalesMaterialCostsVo.class);
.eq(ErpAfterSalesMaterialCosts::getAfterSalesId, afterSalesId));
List<ErpAfterSalesMaterialCostsVo> materialVos = MapstructUtils.convert(materialEntities,
ErpAfterSalesMaterialCostsVo.class);
vo.setMaterialCostsList(materialVos);
}
return vo;
@ -102,7 +104,8 @@ public class ErpAfterSalesServiceImpl implements IErpAfterSalesService {
@Override
public TableDataInfo<ErpAfterSalesVo> queryPageList(ErpAfterSalesBo bo, PageQuery pageQuery) {
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);
return TableDataInfo.build(result);
}
@ -116,7 +119,7 @@ public class ErpAfterSalesServiceImpl implements IErpAfterSalesService {
@Override
public List<ErpAfterSalesVo> queryList(ErpAfterSalesBo bo) {
MPJLambdaWrapper<ErpAfterSales> lqw = buildQueryWrapper(bo);
// return baseMapper.selectVoList(lqw);
// return baseMapper.selectVoList(lqw);
return baseMapper.selectCustomVoList(lqw);
}
@ -125,31 +128,39 @@ public class ErpAfterSalesServiceImpl implements IErpAfterSalesService {
MPJLambdaWrapper<ErpAfterSales> lqw = JoinWrappers.lambda(ErpAfterSales.class)
.selectAll(ErpAfterSales.class)
.eq(ErpAfterSales::getDelFlag, "0")
.eq(StringUtils.isNotBlank(bo.getAfterSalesCode()), ErpAfterSales::getAfterSalesCode, bo.getAfterSalesCode())
.eq(StringUtils.isNotBlank(bo.getAfterSalesSubject()), ErpAfterSales::getAfterSalesSubject, bo.getAfterSalesSubject())
.eq(StringUtils.isNotBlank(bo.getAfterSalesCode()), ErpAfterSales::getAfterSalesCode,
bo.getAfterSalesCode())
.eq(StringUtils.isNotBlank(bo.getAfterSalesSubject()), ErpAfterSales::getAfterSalesSubject,
bo.getAfterSalesSubject())
.eq(bo.getProjectId() != null, ErpAfterSales::getProjectId, bo.getProjectId())
.eq(StringUtils.isNotBlank(bo.getProjectCode()), ErpAfterSales::getProjectCode, bo.getProjectCode())
.like(StringUtils.isNotBlank(bo.getProjectName()), ErpAfterSales::getProjectName, bo.getProjectName())
.eq(bo.getCustomerId() != null, ErpAfterSales::getCustomerId, bo.getCustomerId())
.like(StringUtils.isNotBlank(bo.getCustomerName()), ErpAfterSales::getCustomerName, bo.getCustomerName())
.eq(StringUtils.isNotBlank(bo.getContactPerson()), ErpAfterSales::getContactPerson, bo.getContactPerson())
.like(StringUtils.isNotBlank(bo.getCustomerName()), ErpAfterSales::getCustomerName,
bo.getCustomerName())
.eq(StringUtils.isNotBlank(bo.getContactPerson()), ErpAfterSales::getContactPerson,
bo.getContactPerson())
.eq(StringUtils.isNotBlank(bo.getContactPhone()), ErpAfterSales::getContactPhone, bo.getContactPhone())
.eq(bo.getAfterSalesDate() != null, ErpAfterSales::getAfterSalesDate, bo.getAfterSalesDate())
.eq(bo.getContractId() != null, ErpAfterSales::getContractId, bo.getContractId())
.eq(StringUtils.isNotBlank(bo.getContractCode()), ErpAfterSales::getContractCode, bo.getContractCode())
.eq(StringUtils.isNotBlank(bo.getAfterSalesType()), ErpAfterSales::getAfterSalesType, bo.getAfterSalesType())
.eq(StringUtils.isNotBlank(bo.getStakeholderId()), ErpAfterSales::getStakeholderId, bo.getStakeholderId())
.eq(StringUtils.isNotBlank(bo.getAfterSalesType()), ErpAfterSales::getAfterSalesType,
bo.getAfterSalesType())
.eq(StringUtils.isNotBlank(bo.getStakeholderId()), ErpAfterSales::getStakeholderId,
bo.getStakeholderId())
.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.getTotalCost() != null, ErpAfterSales::getTotalCost, bo.getTotalCost())
.eq(StringUtils.isNotBlank(bo.getSolveStatus()), ErpAfterSales::getSolveStatus, bo.getSolveStatus())
.eq(bo.getCompletionDate() != null, ErpAfterSales::getCompletionDate, bo.getCompletionDate())
.eq(StringUtils.isNotBlank(bo.getProcessingResult()), ErpAfterSales::getProcessingResult, bo.getProcessingResult())
.eq(StringUtils.isNotBlank(bo.getAfterSalesStatus()), ErpAfterSales::getAfterSalesStatus, bo.getAfterSalesStatus())
.eq(StringUtils.isNotBlank(bo.getProcessingResult()), ErpAfterSales::getProcessingResult,
bo.getProcessingResult())
.eq(StringUtils.isNotBlank(bo.getAfterSalesStatus()), ErpAfterSales::getAfterSalesStatus,
bo.getAfterSalesStatus())
.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;
}
@ -165,6 +176,11 @@ public class ErpAfterSalesServiceImpl implements IErpAfterSalesService {
ErpAfterSales add = MapstructUtils.convert(bo, ErpAfterSales.class);
validEntityBeforeSave(add);
// 自动生成售后编号
if (StringUtils.isBlank(add.getAfterSalesCode())) {
String afterSalesCode = remoteCodeRuleService.selectCodeRuleCode("1012");
add.setAfterSalesCode(afterSalesCode);
}
boolean flag = baseMapper.insert(add) > 0;
bo.setAfterSalesId(add.getAfterSalesId()); // 将生成的 ID 回填给 BO
@ -174,14 +190,16 @@ public class ErpAfterSalesServiceImpl implements IErpAfterSalesService {
List<ErpAfterSalesLaborCostsBo> laborBoList = bo.getLaborCostsList();
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));
laborCostsService.saveBatch(laborList);
}
List<ErpAfterSalesMaterialCostsBo> materialBoList = bo.getMaterialCostsList();
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));
materialCostsService.saveBatch(materialList);
}
@ -213,7 +231,8 @@ public class ErpAfterSalesServiceImpl implements IErpAfterSalesService {
// 后新增新的
List<ErpAfterSalesLaborCostsBo> laborBoList = bo.getLaborCostsList();
if (CollUtil.isNotEmpty(laborBoList)) {
List<ErpAfterSalesLaborCosts> laborList = MapstructUtils.convert(laborBoList, ErpAfterSalesLaborCosts.class);
List<ErpAfterSalesLaborCosts> laborList = MapstructUtils.convert(laborBoList,
ErpAfterSalesLaborCosts.class);
// 遍历列表,清空 ID
laborList.forEach(item -> {
@ -230,7 +249,8 @@ public class ErpAfterSalesServiceImpl implements IErpAfterSalesService {
List<ErpAfterSalesMaterialCostsBo> materialBoList = bo.getMaterialCostsList();
if (CollUtil.isNotEmpty(materialBoList)) {
List<ErpAfterSalesMaterialCosts> materialList = MapstructUtils.convert(materialBoList, ErpAfterSalesMaterialCosts.class);
List<ErpAfterSalesMaterialCosts> materialList = MapstructUtils.convert(materialBoList,
ErpAfterSalesMaterialCosts.class);
materialList.forEach(item -> {
item.setMaterialCostsId(null);
@ -246,8 +266,8 @@ public class ErpAfterSalesServiceImpl implements IErpAfterSalesService {
/**
*
*/
private void validEntityBeforeSave(ErpAfterSales entity){
//TODO 做一些数据校验,如唯一约束
private void validEntityBeforeSave(ErpAfterSales entity) {
// TODO 做一些数据校验,如唯一约束
}
/**
@ -259,8 +279,8 @@ public class ErpAfterSalesServiceImpl implements IErpAfterSalesService {
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
if (isValid) {
// TODO 做一些业务上的校验,判断是否需要校验
}
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)
.eq(contractId != null, ErpContractMaterial::getContractId, contractId)
.eq("t.del_flag", "0");
List<ErpContractMaterialVo> contractMaterialList = contractMaterialMapper.selectCustomErpContractMaterialVoList(lqw);
List<ErpContractMaterialVo> contractMaterialList = contractMaterialMapper
.selectCustomErpContractMaterialVoList(lqw);
contractInfoVo.setContractMaterialList(contractMaterialList);
return contractInfoVo;
}
@ -107,27 +108,38 @@ public class ErpContractInfoServiceImpl implements IErpContractInfoService {
Map<String, Object> params = bo.getParams();
MPJLambdaWrapper<ErpContractInfo> lqw = JoinWrappers.lambda(ErpContractInfo.class)
.selectAll(ErpContractInfo.class)
.eq(StringUtils.isNotBlank(bo.getContractFlag()), ErpContractInfo::getContractFlag, bo.getContractFlag())
.eq(StringUtils.isNotBlank(bo.getContractCode()), ErpContractInfo::getContractCode, bo.getContractCode())
.eq(StringUtils.isNotBlank(bo.getCustomerContractCode()), ErpContractInfo::getCustomerContractCode, bo.getCustomerContractCode())
.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(StringUtils.isNotBlank(bo.getContractFlag()), ErpContractInfo::getContractFlag,
bo.getContractFlag())
.eq(StringUtils.isNotBlank(bo.getContractCode()), ErpContractInfo::getContractCode,
bo.getContractCode())
.eq(StringUtils.isNotBlank(bo.getCustomerContractCode()), ErpContractInfo::getCustomerContractCode,
bo.getCustomerContractCode())
.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.getContractDate() != null, ErpContractInfo::getContractDate, bo.getContractDate())
.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(bo.getTemplateId() != null, ErpContractInfo::getTemplateId, bo.getTemplateId())
.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.getTaxRate() != null, ErpContractInfo::getTaxRate, bo.getTaxRate())
.eq(StringUtils.isNotBlank(bo.getActiveFlag()), ErpContractInfo::getActiveFlag, bo.getActiveFlag())
.eq(bo.getContractManagerId() != null, ErpContractInfo::getContractManagerId, bo.getContractManagerId())
.eq(StringUtils.isNotBlank(bo.getCapitalizedAmount()), ErpContractInfo::getCapitalizedAmount, bo.getCapitalizedAmount())
.eq(StringUtils.isNotBlank(bo.getContractTemplateFlag()), ErpContractInfo::getContractTemplateFlag, bo.getContractTemplateFlag())
.eq(StringUtils.isNotBlank(bo.getCapitalizedAmount()), ErpContractInfo::getCapitalizedAmount,
bo.getCapitalizedAmount())
.eq(StringUtils.isNotBlank(bo.getContractTemplateFlag()), ErpContractInfo::getContractTemplateFlag,
bo.getContractTemplateFlag())
.eq("t.del_flag", "0")
.orderByDesc(ErpContractInfo::getCreateTime);
return lqw;
@ -207,7 +219,8 @@ public class ErpContractInfoServiceImpl implements IErpContractInfoService {
* @param customerId ID
*/
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();
// 如果relationMaterialId为空则查询是否存在关联物料信息
if (relationMaterialId == null) {
@ -238,10 +251,11 @@ public class ErpContractInfoServiceImpl implements IErpContractInfoService {
*/
private void validEntityBeforeSave(ErpContractInfo entity) {
// 物料列表的强制校验
// if (entity.getContractMaterialList() == null || entity.getContractMaterialList().isEmpty()) {
// if (entity.getContractMaterialList() == null ||
// entity.getContractMaterialList().isEmpty()) {
// throw new ServiceException("请填写合同物料!");
// }
//存储合同大写金额
// 存储合同大写金额
if (StringUtils.isNotNull(entity.getTotalPrice())) {
String capitalizedAmount = NumberChineseFormatter.format(entity.getTotalPrice().doubleValue(), true, true);
entity.setCapitalizedAmount(capitalizedAmount);
@ -258,7 +272,7 @@ public class ErpContractInfoServiceImpl implements IErpContractInfoService {
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
// TODO 做一些业务上的校验,判断是否需要校验
}
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.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.toolkit.JoinWrappers;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
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.service.IErpTimesheetDeptService;
import org.dromara.oa.erp.service.IErpTimesheetProjectService;
import org.dromara.system.api.RemoteCodeRuleService;
import org.dromara.workflow.api.RemoteWorkflowService;
import org.dromara.workflow.api.domain.RemoteStartProcess;
import org.dromara.workflow.api.event.ProcessEvent;
@ -57,6 +58,9 @@ public class ErpTimesheetInfoServiceImpl implements IErpTimesheetInfoService {
@DubboReference(timeout = 30000)
private RemoteWorkflowService remoteWorkflowService;
@DubboReference()
private RemoteCodeRuleService remoteCodeRuleService;
private final IErpTimesheetDeptService timesheetDeptService;
private final IErpTimesheetProjectService timesheetProjectService;
@ -72,14 +76,12 @@ public class ErpTimesheetInfoServiceImpl implements IErpTimesheetInfoService {
if (vo != null) {
// 回显部门工时
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));
// 回显项目工时
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));
}
return vo;
@ -95,7 +97,8 @@ public class ErpTimesheetInfoServiceImpl implements IErpTimesheetInfoService {
@Override
public TableDataInfo<ErpTimesheetInfoVo> queryPageList(ErpTimesheetInfoBo bo, PageQuery pageQuery) {
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);
return TableDataInfo.build(result);
}
@ -109,7 +112,7 @@ public class ErpTimesheetInfoServiceImpl implements IErpTimesheetInfoService {
@Override
public List<ErpTimesheetInfoVo> queryList(ErpTimesheetInfoBo bo) {
MPJLambdaWrapper<ErpTimesheetInfo> lqw = buildQueryWrapper(bo);
// return baseMapper.selectVoList(lqw);
// return baseMapper.selectVoList(lqw);
return baseMapper.selectCustomVoList(lqw);
}
@ -119,7 +122,8 @@ public class ErpTimesheetInfoServiceImpl implements IErpTimesheetInfoService {
MPJLambdaWrapper<ErpTimesheetInfo> lqw = JoinWrappers.lambda(ErpTimesheetInfo.class)
.selectAll(ErpTimesheetInfo.class)
.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.getDeptId() != null, ErpTimesheetInfo::getDeptId, bo.getDeptId())
.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.getDeptHours() != null, ErpTimesheetInfo::getDeptHours, bo.getDeptHours())
.eq(bo.getProjectHours() != null, ErpTimesheetInfo::getProjectHours, bo.getProjectHours())
.eq(StringUtils.isNotBlank(bo.getTimesheetStatus()), ErpTimesheetInfo::getTimesheetStatus, bo.getTimesheetStatus())
.eq(StringUtils.isNotBlank(bo.getFlowStatus()), ErpTimesheetInfo::getFlowStatus, bo.getFlowStatus())
;
.eq(StringUtils.isNotBlank(bo.getTimesheetStatus()), ErpTimesheetInfo::getTimesheetStatus,
bo.getTimesheetStatus())
.eq(StringUtils.isNotBlank(bo.getFlowStatus()), ErpTimesheetInfo::getFlowStatus, bo.getFlowStatus());
return lqw;
}
@ -144,6 +148,11 @@ public class ErpTimesheetInfoServiceImpl implements IErpTimesheetInfoService {
public Boolean insertByBo(ErpTimesheetInfoBo bo) {
ErpTimesheetInfo add = MapstructUtils.convert(bo, ErpTimesheetInfo.class);
validEntityBeforeSave(add);
// 自动生成工时单号
if (StringUtils.isBlank(add.getTimesheetCode())) {
String timesheetCode = remoteCodeRuleService.selectCodeRuleCode("1015");
add.setTimesheetCode(timesheetCode);
}
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
@ -220,8 +229,8 @@ public class ErpTimesheetInfoServiceImpl implements IErpTimesheetInfoService {
/**
*
*/
private void validEntityBeforeSave(ErpTimesheetInfo entity){
//TODO 做一些数据校验,如唯一约束
private void validEntityBeforeSave(ErpTimesheetInfo entity) {
// TODO 做一些数据校验,如唯一约束
}
/**
@ -233,8 +242,8 @@ public class ErpTimesheetInfoServiceImpl implements IErpTimesheetInfoService {
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
if (isValid) {
// TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
@ -276,7 +285,6 @@ public class ErpTimesheetInfoServiceImpl implements IErpTimesheetInfoService {
// hasDeptWork (是否有部门工时) - true/false
variables.put("hasDeptWork", CollUtil.isNotEmpty(deptApprovers));
// --- 处理项目工时审批人 ---
List<ErpTimesheetProjectBo> projectList = bo.getTimesheetProjectList();
List<String> projectApprovers = new ArrayList<>();
@ -292,7 +300,6 @@ public class ErpTimesheetInfoServiceImpl implements IErpTimesheetInfoService {
variables.put("projectApprovers", projectApprovers);
variables.put("hasProjectWork", CollUtil.isNotEmpty(projectApprovers));
RemoteStartProcess startProcess = new RemoteStartProcess();
startProcess.setBusinessId(bo.getTimesheetId().toString());
startProcess.setFlowCode(bo.getFlowCode());

Loading…
Cancel
Save