采购支付

This commit is contained in:
aikai 2024-03-08 10:06:43 +08:00
parent b2579d1688
commit c04e87ae95
36 changed files with 1297 additions and 19 deletions

View File

@ -1,12 +1,12 @@
package cn.iocoder.yudao.module.bpm.controller.admin.oa;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procure.BpmOAProcureListEditReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procure.BpmOAProcureRespVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procure.BpmOAProcureSaveReqVO;
import cn.iocoder.yudao.module.bpm.convert.oa.BpmOAProcureConvert;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAProcureDO;
import cn.iocoder.yudao.module.bpm.service.oa.BpmOaProcureService;
import cn.iocoder.yudao.module.bpm.service.oa.BpmOAProcureService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
@ -26,7 +26,7 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
public class BpmOAProcureController {
@Resource
private BpmOaProcureService bpmOaProcureService;
private BpmOAProcureService bpmOaProcureService;
@PostMapping("/create")
@Operation(summary = "创建OA 采购申请")
@ -61,4 +61,12 @@ public class BpmOAProcureController {
return success(BpmOAProcureConvert.INSTANCE.convert(oaProcure));
}
@PostMapping("/updatePayFlagByIds")
@Operation(summary = "根据ids修改支付状态")
public CommonResult<?> updatePayFlagByIds(@RequestBody BpmOAProcureListEditReqVO vo) {
bpmOaProcureService.updatePayFlagByIds(vo);
return success("操作成功");
}
}

View File

@ -0,0 +1,90 @@
package cn.iocoder.yudao.module.bpm.controller.admin.oa;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procure.BpmOAProcurePageReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procure.BpmOAProcureRespVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procurepay.BpmOAProcurePayPageReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procurepay.BpmOAProcurePayRespVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procurepay.BpmOAProcurePaySaveReqVO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAProcureDO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAProcurePayDO;
import cn.iocoder.yudao.module.bpm.service.oa.BpmOAProcurePayService;
import cn.iocoder.yudao.module.bpm.service.oa.BpmOAProcureService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - 采购支付")
@RestController
@RequestMapping("/bpm/OA-procure-pay")
@Validated
public class BpmOAProcurePayController {
@Resource
private BpmOAProcurePayService oAProcurePayService;
@Resource
private BpmOAProcureService oaProcureService;
@PostMapping("/create")
@Operation(summary = "创建采购支付")
@PreAuthorize("@ss.hasPermission('bpm:OA-procure-pay:create')")
public CommonResult<Long> createOAProcurePay(@Valid @RequestBody BpmOAProcurePaySaveReqVO createReqVO) {
return success(oAProcurePayService.createOAProcurePay(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新采购支付")
@PreAuthorize("@ss.hasPermission('bpm:OA-procure-pay:update')")
public CommonResult<Boolean> updateOAProcurePay(@Valid @RequestBody BpmOAProcurePaySaveReqVO updateReqVO) {
oAProcurePayService.updateOAProcurePay(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除采购支付")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('bpm:OA-procure-pay:delete')")
public CommonResult<Boolean> deleteOAProcurePay(@RequestParam("id") Long id) {
oAProcurePayService.deleteOAProcurePay(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得采购支付")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('bpm:OA-procure-pay:query')")
public CommonResult<BpmOAProcurePayRespVO> getOAProcurePay(@RequestParam("id") Long id) {
BpmOAProcurePayDO oAProcurePay = oAProcurePayService.getOAProcurePay(id);
return success(BeanUtils.toBean(oAProcurePay, BpmOAProcurePayRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得采购支付分页")
@PreAuthorize("@ss.hasPermission('bpm:OA-procure-pay:query')")
public CommonResult<PageResult<BpmOAProcurePayRespVO>> getOAProcurePayPage(@Valid BpmOAProcurePayPageReqVO pageReqVO) {
PageResult<BpmOAProcurePayDO> pageResult = oAProcurePayService.getOAProcurePayPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, BpmOAProcurePayRespVO.class));
}
@GetMapping("/getAvailablePurchaseOrders")
@Operation(summary = "获取可用采购单列表")
public CommonResult<List<BpmOAProcureRespVO>> getAvailablePurchaseOrders() {
List<BpmOAProcureDO> list = oAProcurePayService.getAvailablePurchaseOrders();
return success(BeanUtils.toBean(list, BpmOAProcureRespVO.class));
}
}

View File

@ -0,0 +1,73 @@
package cn.iocoder.yudao.module.bpm.controller.admin.oa;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procurepay.BpmOAProcurePayItemPageReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procurepay.BpmOAProcurePayItemRespVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procurepay.BpmOAProcurePayItemSaveReqVO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAProcurePayItemDO;
import cn.iocoder.yudao.module.bpm.service.oa.BpmOAProcurePayItemService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.validation.Valid;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - 采购收款明细")
@RestController
@RequestMapping("/bpm/OA-procure-pay-item")
@Validated
public class BpmOAProcurePayItemController {
@Resource
private BpmOAProcurePayItemService oAProcurePayItemService;
@PostMapping("/create")
@Operation(summary = "创建采购收款明细")
@PreAuthorize("@ss.hasPermission('bpm:OA-procure-pay-item:create')")
public CommonResult<Long> createOAProcurePayItem(@Valid @RequestBody BpmOAProcurePayItemSaveReqVO createReqVO) {
return success(oAProcurePayItemService.createOAProcurePayItem(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新采购收款明细")
@PreAuthorize("@ss.hasPermission('bpm:OA-procure-pay-item:update')")
public CommonResult<Boolean> updateOAProcurePayItem(@Valid @RequestBody BpmOAProcurePayItemSaveReqVO updateReqVO) {
oAProcurePayItemService.updateOAProcurePayItem(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除采购收款明细")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('bpm:OA-procure-pay-item:delete')")
public CommonResult<Boolean> deleteOAProcurePayItem(@RequestParam("id") Long id) {
oAProcurePayItemService.deleteOAProcurePayItem(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得采购收款明细")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('bpm:OA-procure-pay-item:query')")
public CommonResult<BpmOAProcurePayItemRespVO> getOAProcurePayItem(@RequestParam("id") Long id) {
BpmOAProcurePayItemDO oAProcurePayItem = oAProcurePayItemService.getOAProcurePayItem(id);
return success(BeanUtils.toBean(oAProcurePayItem, BpmOAProcurePayItemRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得采购收款明细分页")
@PreAuthorize("@ss.hasPermission('bpm:OA-procure-pay-item:query')")
public CommonResult<PageResult<BpmOAProcurePayItemRespVO>> getOAProcurePayItemPage(@Valid BpmOAProcurePayItemPageReqVO pageReqVO) {
PageResult<BpmOAProcurePayItemDO> pageResult = oAProcurePayItemService.getOAProcurePayItemPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, BpmOAProcurePayItemRespVO.class));
}
}

View File

@ -0,0 +1,19 @@
package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procure;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
@Data
@Accessors(chain = true)
public class BpmOAProcureListEditReqVO {
@Schema(description = "id数组")
private List<Long> procureIds;
@Schema(description = "是否已支付 0否 1是 2进行中")
private Integer payFlag;
}

View File

@ -11,10 +11,7 @@ import java.util.List;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - OA 采购申请分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class BpmOAProcurePageReqVO extends PageParam {
@Schema(description = "申请人的用户编号", example = "26976")
@ -42,6 +39,9 @@ public class BpmOAProcurePageReqVO extends PageParam {
@Schema(description = "采购总金额大写")
private String totalMoneyChinese;
@Schema(description = "是否已支付 0否 1是 2进行中")
private Integer payFlag;
@Schema(description = "附件信息")
private String fileItems;

View File

@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procure;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.reimbursement.ProcureDetail;
import cn.iocoder.yudao.module.bpm.controller.admin.upload.UploadUserFile;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
@ -10,6 +11,7 @@ import java.time.LocalDateTime;
import java.util.List;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.TIME_ZONE_DEFAULT;
@Schema(description = "管理后台 - OA 采购申请 Response VO")
@Data
@ -29,6 +31,7 @@ public class BpmOAProcureRespVO {
@Schema(description = "期望交付日期")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
@JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = TIME_ZONE_DEFAULT)
private LocalDateTime expectedDeliveryDate;
@Schema(description = "采购明细数据JSON", requiredMode = Schema.RequiredMode.REQUIRED)
@ -43,6 +46,9 @@ public class BpmOAProcureRespVO {
@Schema(description = "采购总金额大写")
private String totalMoneyChinese;
@Schema(description = "是否已支付 0否 1是 2进行中")
private Integer payFlag;
@Schema(description = "附件信息")
private List<UploadUserFile> fileItems;
@ -53,6 +59,8 @@ public class BpmOAProcureRespVO {
private String processInstanceId;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = TIME_ZONE_DEFAULT)
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime createTime;
}

View File

@ -51,6 +51,9 @@ public class BpmOAProcureSaveReqVO {
@Schema(description = "流程实例的编号", example = "15852")
private String processInstanceId;
@Schema(description = "是否已支付 0否 1是 2进行中")
private Integer payFlag;
@Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED)
private List<UploadUserFile> fileItems;

View File

@ -0,0 +1,37 @@
package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procurepay;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 采购收款明细分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class BpmOAProcurePayItemPageReqVO extends PageParam {
@Schema(description = "申请人的用户编号", example = "6961")
private Long userId;
@Schema(description = "采购支付id", example = "29610")
private Long bpmOaProcurePayId;
@Schema(description = "采购计划id", example = "14925")
private Long bpmOaProcureId;
@Schema(description = "收款人")
private String payee;
@Schema(description = "收款账号")
private String payeeNumber;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

View File

@ -0,0 +1,59 @@
package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procurepay;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 采购收款明细 Response VO")
@Data
public class BpmOAProcurePayItemRespVO {
@Schema(description = "采购表单主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "24125")
private Long id;
@Schema(description = "申请人的用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "6961")
private Long userId;
@Schema(description = "采购支付id", example = "29610")
private Long bpmOaProcurePayId;
@Schema(description = "采购计划id", example = "14925")
private Long bpmOaProcureId;
@Schema(description = "收款人")
private String payee;
@Schema(description = "收款账号")
private String payeeNumber;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
private LocalDateTime createTime;
// ---
@Schema(description = "申请事由", example = "不喜欢")
private String reason;
@Schema(description = "采购类型 (根据字典的来)", example = "2")
private Integer procureType;
@Schema(description = "期望交付日期")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime expectedDeliveryDate;
@Schema(description = "备注")
private String remarks;
@Schema(description = "采购总金额")
private String totalMoney;
@Schema(description = "采购总金额大写")
private String totalMoneyChinese;
}

View File

@ -0,0 +1,32 @@
package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procurepay;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import javax.validation.constraints.*;
import java.util.*;
@Schema(description = "管理后台 - 采购收款明细新增/修改 Request VO")
@Data
public class BpmOAProcurePayItemSaveReqVO {
@Schema(description = "采购表单主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "24125")
private Long id;
@Schema(description = "申请人的用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "6961")
// @NotNull(message = "申请人的用户编号不能为空")
private Long userId;
@Schema(description = "采购支付id", example = "29610")
private Long bpmOaProcurePayId;
@Schema(description = "采购计划id", example = "14925")
private Long bpmOaProcureId;
@Schema(description = "收款人")
private String payee;
@Schema(description = "收款账号")
private String payeeNumber;
}

View File

@ -0,0 +1,48 @@
package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procurepay;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import java.math.BigDecimal;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 采购支付分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class BpmOAProcurePayPageReqVO extends PageParam {
@Schema(description = "申请人的用户编号")
private Long userId;
@Schema(description = "申请事由")
private String reason;
@Schema(description = "支付日期")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] payTime;
@Schema(description = "采购付款总金额")
private BigDecimal totalMoney;
@Schema(description = "采购付款大写")
private String totalMoneyChinese;
@Schema(description = "附件信息")
private String fileItems;
@Schema(description = "报销结果")
private Integer result;
@Schema(description = "流程实例的编号", example = "175")
private String processInstanceId;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

View File

@ -0,0 +1,49 @@
package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procurepay;
import cn.iocoder.yudao.module.bpm.controller.admin.upload.UploadUserFile;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
@Schema(description = "管理后台 - 采购支付 Response VO")
@Data
public class BpmOAProcurePayRespVO {
@Schema(description = "采购表单主键", requiredMode = Schema.RequiredMode.REQUIRED)
private Long id;
@Schema(description = "申请人的用户编号", requiredMode = Schema.RequiredMode.REQUIRED)
private Long userId;
@Schema(description = "申请事由")
private String reason;
@Schema(description = "支付日期")
private LocalDateTime payTime;
@Schema(description = "采购付款总金额", requiredMode = Schema.RequiredMode.REQUIRED)
private BigDecimal totalMoney;
@Schema(description = "采购付款大写", requiredMode = Schema.RequiredMode.REQUIRED)
private String totalMoneyChinese;
@Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED)
private List<UploadUserFile> fileItems;
@Schema(description = "报销结果")
private Integer result;
@Schema(description = "流程实例的编号", example = "175")
private String processInstanceId;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
private LocalDateTime createTime;
@Schema(description = "子列表", requiredMode = Schema.RequiredMode.REQUIRED)
private List<BpmOAProcurePayItemRespVO> items;
}

View File

@ -0,0 +1,49 @@
package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procurepay;
import cn.iocoder.yudao.module.bpm.controller.admin.upload.UploadUserFile;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import javax.validation.constraints.*;
import java.util.*;
import java.math.BigDecimal;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 采购支付新增/修改 Request VO")
@Data
public class BpmOAProcurePaySaveReqVO {
@Schema(description = "采购表单主键", requiredMode = Schema.RequiredMode.REQUIRED)
private Long id;
@Schema(description = "申请人的用户编号", requiredMode = Schema.RequiredMode.REQUIRED)
// @NotNull(message = "申请人的用户编号不能为空")
private Long userId;
@Schema(description = "申请事由")
private String reason;
@Schema(description = "支付日期")
private LocalDateTime payTime;
@Schema(description = "采购付款总金额", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "采购付款总金额不能为空")
private BigDecimal totalMoney;
@Schema(description = "采购付款大写", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "采购付款大写不能为空")
private String totalMoneyChinese;
@Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED)
private List<UploadUserFile> fileItems;
@Schema(description = "报销结果")
private Integer result;
@Schema(description = "流程实例的编号", example = "175")
private String processInstanceId;
@Schema(description = "采购支付子列表")
List<BpmOAProcurePayItemSaveReqVO> items;
}

View File

@ -0,0 +1,23 @@
package cn.iocoder.yudao.module.bpm.convert.oa;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procurepay.BpmOAProcurePayRespVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procurepay.BpmOAProcurePaySaveReqVO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAProcurePayDO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
/**
* 报销支付申请 Convert
*
* @author yj
*/
@Mapper
public interface BpmOAProcurePayConvert {
BpmOAProcurePayConvert INSTANCE = Mappers.getMapper(BpmOAProcurePayConvert.class);
BpmOAProcurePayDO convert(BpmOAProcurePaySaveReqVO bean);
BpmOAProcurePayRespVO convert(BpmOAProcurePayDO bean);
}

View File

@ -0,0 +1,27 @@
package cn.iocoder.yudao.module.bpm.convert.oa;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procurepay.BpmOAProcurePayItemRespVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procurepay.BpmOAProcurePayItemSaveReqVO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAProcurePayItemDO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import java.util.List;
/**
* 报销支付申请 Convert
*
* @author yj
*/
@Mapper
public interface BpmOAProcurePayItemConvert {
BpmOAProcurePayItemConvert INSTANCE = Mappers.getMapper(BpmOAProcurePayItemConvert.class);
BpmOAProcurePayItemDO convert(BpmOAProcurePayItemSaveReqVO bean);
BpmOAProcurePayItemRespVO convert(BpmOAProcurePayItemDO bean);
List<BpmOAProcurePayItemDO> convert(List<BpmOAProcurePayItemSaveReqVO> items);
}

View File

@ -8,11 +8,17 @@ import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import java.util.List;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.TIME_ZONE_DEFAULT;
/**
* OA 采购申请 DO
*
@ -27,6 +33,13 @@ import java.util.List;
@NoArgsConstructor
@AllArgsConstructor
public class BpmOAProcureDO extends BaseDO {
/**
* 是否已支付 0否 1是 2进行中
*/
public static final Integer FLAG_FALSE = 0;
public static final Integer FLAG_TRUE = 1;
public static final Integer IN_PROGRESS = 2;
/**
* 报销表单主键
@ -48,6 +61,8 @@ public class BpmOAProcureDO extends BaseDO {
/**
* 期望交付日期
*/
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
@JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = TIME_ZONE_DEFAULT)
private LocalDateTime expectedDeliveryDate;
/**
* 采购明细数据JSON
@ -66,6 +81,12 @@ public class BpmOAProcureDO extends BaseDO {
* 采购总金额大写
*/
private String totalMoneyChinese;
/**
* 是否已支付 0否 1是 2进行中
*/
private Integer payFlag;
/**
* 附件信息
*/

View File

@ -0,0 +1,76 @@
package cn.iocoder.yudao.module.bpm.dal.dataobject.oa;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procurepay.BpmOAProcurePayItemRespVO;
import cn.iocoder.yudao.module.bpm.controller.admin.upload.UploadUserFile;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
/**
* 采购支付 DO
*
* @author 艾楷
*/
@TableName(value = "bpm_oa_procure_pay", autoResultMap = true)
@KeySequence("bpm_oa_procure_pay_seq") // 用于 OraclePostgreSQLKingbaseDB2H2 数据库的主键自增如果是 MySQL 等数据库可不写
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class BpmOAProcurePayDO extends BaseDO {
/**
* 采购表单主键
*/
@TableId
private Long id;
/**
* 申请人的用户编号
*/
private Long userId;
/**
* 申请事由
*/
private String reason;
/**
* 支付日期
*/
private LocalDateTime payTime;
/**
* 采购付款总金额
*/
private BigDecimal totalMoney;
/**
* 采购付款大写
*/
private String totalMoneyChinese;
/**
* 附件信息
*/
@TableField(typeHandler = JacksonTypeHandler.class)
private List<UploadUserFile> fileItems;
/**
* 报销结果
*/
private Integer result;
/**
* 流程实例的编号
*/
private String processInstanceId;
@TableField(exist = false)
@Schema(description = "子列表", requiredMode = Schema.RequiredMode.REQUIRED)
private List<BpmOAProcurePayItemRespVO> items;
}

View File

@ -0,0 +1,51 @@
package cn.iocoder.yudao.module.bpm.dal.dataobject.oa;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
/**
* 采购收款明细 DO
*
* @author 艾楷
*/
@TableName(value = "bpm_oa_procure_pay_item", autoResultMap = true)
@KeySequence("bpm_oa_procure_pay_item_seq") // 用于 OraclePostgreSQLKingbaseDB2H2 数据库的主键自增如果是 MySQL 等数据库可不写
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class BpmOAProcurePayItemDO extends BaseDO {
/**
* 采购表单主键
*/
@TableId
private Long id;
/**
* 申请人的用户编号
*/
private Long userId;
/**
* 采购支付id
*/
private Long bpmOaProcurePayId;
/**
* 采购计划id
*/
private Long bpmOaProcureId;
/**
* 收款人
*/
private String payee;
/**
* 收款账号
*/
private String payeeNumber;
}

View File

@ -13,7 +13,7 @@ import org.apache.ibatis.annotations.Mapper;
* @author 姚君
*/
@Mapper
public interface BpmOaProcureMapper extends BaseMapperX<BpmOAProcureDO> {
public interface BpmOAProcureMapper extends BaseMapperX<BpmOAProcureDO> {
default PageResult<BpmOAProcureDO> selectPage(BpmOAProcurePageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<BpmOAProcureDO>()

View File

@ -0,0 +1,40 @@
package cn.iocoder.yudao.module.bpm.dal.mysql.oa;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procurepay.BpmOAProcurePayItemPageReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procurepay.BpmOAProcurePayItemRespVO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAProcurePayItemDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 采购收款明细 Mapper
*
* @author 艾楷
*/
@Mapper
public interface BpmOAProcurePayItemMapper extends BaseMapperX<BpmOAProcurePayItemDO> {
default PageResult<BpmOAProcurePayItemDO> selectPage(BpmOAProcurePayItemPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<BpmOAProcurePayItemDO>()
.eqIfPresent(BpmOAProcurePayItemDO::getUserId, reqVO.getUserId())
.eqIfPresent(BpmOAProcurePayItemDO::getBpmOaProcurePayId, reqVO.getBpmOaProcurePayId())
.eqIfPresent(BpmOAProcurePayItemDO::getBpmOaProcureId, reqVO.getBpmOaProcureId())
.eqIfPresent(BpmOAProcurePayItemDO::getPayee, reqVO.getPayee())
.eqIfPresent(BpmOAProcurePayItemDO::getPayeeNumber, reqVO.getPayeeNumber())
.betweenIfPresent(BpmOAProcurePayItemDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(BpmOAProcurePayItemDO::getId));
}
/**
* 通过采购支付id获取想去和采购申请记录
*
* @param procurePayId
* @return
*/
List<BpmOAProcurePayItemRespVO> getByProcurePayId(@Param("procurePayId") Long procurePayId);
}

View File

@ -0,0 +1,32 @@
package cn.iocoder.yudao.module.bpm.dal.mysql.oa;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procurepay.BpmOAProcurePayPageReqVO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAProcurePayDO;
import org.apache.ibatis.annotations.Mapper;
/**
* 采购支付 Mapper
*
* @author 艾楷
*/
@Mapper
public interface BpmOAProcurePayMapper extends BaseMapperX<BpmOAProcurePayDO> {
default PageResult<BpmOAProcurePayDO> selectPage(BpmOAProcurePayPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<BpmOAProcurePayDO>()
.eqIfPresent(BpmOAProcurePayDO::getUserId, reqVO.getUserId())
.eqIfPresent(BpmOAProcurePayDO::getReason, reqVO.getReason())
.betweenIfPresent(BpmOAProcurePayDO::getPayTime, reqVO.getPayTime())
.eqIfPresent(BpmOAProcurePayDO::getTotalMoney, reqVO.getTotalMoney())
.eqIfPresent(BpmOAProcurePayDO::getTotalMoneyChinese, reqVO.getTotalMoneyChinese())
.eqIfPresent(BpmOAProcurePayDO::getFileItems, reqVO.getFileItems())
.eqIfPresent(BpmOAProcurePayDO::getResult, reqVO.getResult())
.eqIfPresent(BpmOAProcurePayDO::getProcessInstanceId, reqVO.getProcessInstanceId())
.betweenIfPresent(BpmOAProcurePayDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(BpmOAProcurePayDO::getId));
}
}

View File

@ -0,0 +1,55 @@
package cn.iocoder.yudao.module.bpm.service.oa;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procurepay.BpmOAProcurePayItemPageReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procurepay.BpmOAProcurePayItemSaveReqVO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAProcurePayItemDO;
import javax.validation.Valid;
/**
* 采购收款明细 Service 接口
*
* @author 艾楷
*/
public interface BpmOAProcurePayItemService {
/**
* 创建采购收款明细
*
* @param createReqVO 创建信息
* @return 编号
*/
Long createOAProcurePayItem(@Valid BpmOAProcurePayItemSaveReqVO createReqVO);
/**
* 更新采购收款明细
*
* @param updateReqVO 更新信息
*/
void updateOAProcurePayItem(@Valid BpmOAProcurePayItemSaveReqVO updateReqVO);
/**
* 删除采购收款明细
*
* @param id 编号
*/
void deleteOAProcurePayItem(Long id);
/**
* 获得采购收款明细
*
* @param id 编号
* @return 采购收款明细
*/
BpmOAProcurePayItemDO getOAProcurePayItem(Long id);
/**
* 获得采购收款明细分页
*
* @param pageReqVO 分页查询
* @return 采购收款明细分页
*/
PageResult<BpmOAProcurePayItemDO> getOAProcurePayItemPage(BpmOAProcurePayItemPageReqVO pageReqVO);
}

View File

@ -0,0 +1,58 @@
package cn.iocoder.yudao.module.bpm.service.oa;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procurepay.BpmOAProcurePayItemPageReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procurepay.BpmOAProcurePayItemSaveReqVO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAProcurePayItemDO;
import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOAProcurePayItemMapper;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
/**
* 采购收款明细 Service 实现类
*
* @author 艾楷
*/
@Service
@Validated
public class BpmOAProcurePayItemServiceImpl implements BpmOAProcurePayItemService {
@Resource
private BpmOAProcurePayItemMapper oAProcurePayItemMapper;
@Override
public Long createOAProcurePayItem(BpmOAProcurePayItemSaveReqVO createReqVO) {
// 插入
BpmOAProcurePayItemDO oAProcurePayItem = BeanUtils.toBean(createReqVO, BpmOAProcurePayItemDO.class);
oAProcurePayItemMapper.insert(oAProcurePayItem);
// 返回
return oAProcurePayItem.getId();
}
@Override
public void updateOAProcurePayItem(BpmOAProcurePayItemSaveReqVO updateReqVO) {
// 更新
BpmOAProcurePayItemDO updateObj = BeanUtils.toBean(updateReqVO, BpmOAProcurePayItemDO.class);
oAProcurePayItemMapper.updateById(updateObj);
}
@Override
public void deleteOAProcurePayItem(Long id) {
// 删除
oAProcurePayItemMapper.deleteById(id);
}
@Override
public BpmOAProcurePayItemDO getOAProcurePayItem(Long id) {
return oAProcurePayItemMapper.selectById(id);
}
@Override
public PageResult<BpmOAProcurePayItemDO> getOAProcurePayItemPage(BpmOAProcurePayItemPageReqVO pageReqVO) {
return oAProcurePayItemMapper.selectPage(pageReqVO);
}
}

View File

@ -0,0 +1,65 @@
package cn.iocoder.yudao.module.bpm.service.oa;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procurepay.BpmOAProcurePayPageReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procurepay.BpmOAProcurePaySaveReqVO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAProcureDO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAProcurePayDO;
import javax.validation.Valid;
import java.util.List;
/**
* 采购支付 Service 接口
*
* @author 艾楷
*/
public interface BpmOAProcurePayService {
/**
* 创建采购支付
*
* @param createReqVO 创建信息
* @return 编号
*/
Long createOAProcurePay(@Valid BpmOAProcurePaySaveReqVO createReqVO);
/**
* 更新采购支付
*
* @param updateReqVO 更新信息
*/
void updateOAProcurePay(@Valid BpmOAProcurePaySaveReqVO updateReqVO);
/**
* 删除采购支付
*
* @param id 编号
*/
void deleteOAProcurePay(Long id);
/**
* 获得采购支付
*
* @param id 编号
* @return 采购支付
*/
BpmOAProcurePayDO getOAProcurePay(Long id);
/**
* 获得采购支付分页
*
* @param pageReqVO 分页查询
* @return 采购支付分页
*/
PageResult<BpmOAProcurePayDO> getOAProcurePayPage(BpmOAProcurePayPageReqVO pageReqVO);
/**
* 获取可用采购单列表
*
* @return
*/
List<BpmOAProcureDO> getAvailablePurchaseOrders();
void updateEvectionResult(String processInstanceExtId, Long id, Integer result);
}

View File

@ -0,0 +1,188 @@
package cn.iocoder.yudao.module.bpm.service.oa;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils;
import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi;
import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procure.BpmOAProcureListEditReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procurepay.BpmOAProcurePayItemRespVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procurepay.BpmOAProcurePayPageReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procurepay.BpmOAProcurePaySaveReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.upload.UploadUserFile;
import cn.iocoder.yudao.module.bpm.convert.oa.BpmOAProcurePayConvert;
import cn.iocoder.yudao.module.bpm.convert.oa.BpmOAProcurePayItemConvert;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAProcureDO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAProcurePayDO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAProcurePayItemDO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmProcessInstanceExtDO;
import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOAProcureMapper;
import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOAProcurePayItemMapper;
import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOAProcurePayMapper;
import cn.iocoder.yudao.module.bpm.dal.mysql.task.BpmProcessInstanceExtMapper;
import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum;
import cn.iocoder.yudao.module.bpm.service.definition.BpmModelService;
import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import org.flowable.engine.runtime.ProcessInstance;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 采购支付 Service 实现类
*
* @author 艾楷
*/
@Service
@Validated
public class BpmOAProcurePayServiceImpl extends BpmOABaseService implements BpmOAProcurePayService {
@Resource
private BpmOAProcurePayMapper oAProcurePayMapper;
@Resource
private BpmOAProcurePayItemMapper oaProcurePayItemMapper;
@Resource
private BpmOAProcureMapper oaProcureMapper;
@Resource
private BpmOAProcureService oaProcureService;
@Resource
private AdminUserApi adminUserApi;
@Resource
private BpmProcessInstanceApi processInstanceApi;
@Resource
private BpmModelService modelService;
@Resource
private BpmProcessInstanceExtMapper processInstanceExtMapper;
@Resource
@Lazy // 解决循环依赖
private BpmProcessInstanceService bpmProcessInstanceService;
/**
* OA 请假对应的流程定义 KEY
*/
public static final String PROCESS_KEY = "oa_procure_pay";
@Override
public Long createOAProcurePay(BpmOAProcurePaySaveReqVO createReqVO) {
Long userId = WebFrameworkUtils.getLoginUserId();
createReqVO.setUserId(userId);
// 采购支付对象转换
BpmOAProcurePayDO oAProcurePay = BpmOAProcurePayConvert.INSTANCE.convert(createReqVO);
oAProcurePayMapper.insert(oAProcurePay);
// 子列表转换
List<BpmOAProcurePayItemDO> items = BpmOAProcurePayItemConvert.INSTANCE.convert(createReqVO.getItems());
for (BpmOAProcurePayItemDO item : items) {
item.setBpmOaProcurePayId(oAProcurePay.getId());
item.setUserId(userId);
}
oaProcurePayItemMapper.insertBatch(items);
// 发起 BPM 流程
Map<String, Object> processInstanceVariables = new HashMap<>();
String processInstanceId = processInstanceApi.createProcessInstance(userId,
new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(PROCESS_KEY)
.setVariables(processInstanceVariables).setBusinessKey(String.valueOf(oAProcurePay.getId()))).getCheckedData();
// 将工作流的编号更新到 OA 采购单中
oAProcurePayMapper.updateById(new BpmOAProcurePayDO().setId(oAProcurePay.getId()).setProcessInstanceId(processInstanceId));
List<UploadUserFile> fileItems = createReqVO.getFileItems();
//这里的逻辑如果fileItems不为空且有数据那么说明是上传了附件的则需要更工作流文件表对应的实例Id
if (fileItems != null && !fileItems.isEmpty()) {
uploadBpmFileProcessInstanceId(processInstanceId, fileItems);
}
// 返回
return oAProcurePay.getId();
}
@Override
public void updateOAProcurePay(BpmOAProcurePaySaveReqVO updateReqVO) {
// 更新
BpmOAProcurePayDO updateObj = BeanUtils.toBean(updateReqVO, BpmOAProcurePayDO.class);
oAProcurePayMapper.updateById(updateObj);
}
@Override
public void deleteOAProcurePay(Long id) {
// 删除
oAProcurePayMapper.deleteById(id);
}
@Override
public BpmOAProcurePayDO getOAProcurePay(Long id) {
BpmOAProcurePayDO bpmOAProcurePayDO = oAProcurePayMapper.selectById(id);
List<BpmOAProcurePayItemRespVO> items = oaProcurePayItemMapper.getByProcurePayId(id);
bpmOAProcurePayDO.setItems(items);
return bpmOAProcurePayDO;
}
@Override
public PageResult<BpmOAProcurePayDO> getOAProcurePayPage(BpmOAProcurePayPageReqVO pageReqVO) {
return oAProcurePayMapper.selectPage(pageReqVO);
}
@Override
public List<BpmOAProcureDO> getAvailablePurchaseOrders() {
//获取当前登录用户id
Long userId = WebFrameworkUtils.getLoginUserId();
//查询当前登录用户所在部门所有用户id
CommonResult<List<Long>> userIdsResult = adminUserApi.getUserIdsByUserIdGroupByDept(userId);
List<Long> userIds = userIdsResult.getData();
//根据用户ids 获取所有可用采购单
return oaProcureMapper.selectList(new LambdaQueryWrapperX<BpmOAProcureDO>()
.in(BpmOAProcureDO::getUserId, userIds)
.eq(BpmOAProcureDO::getPayFlag, BpmOAProcureDO.FLAG_FALSE)
);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateEvectionResult(String processInstanceExtId, Long id, Integer result) {
//获取采购申请ids
List<BpmOAProcurePayItemRespVO> items = oaProcurePayItemMapper.getByProcurePayId(id);
// -- 这边要处理下
// -- 审核通过 最后节点
if (BpmProcessInstanceResultEnum.APPROVE.getResult().equals(result)) {
BpmProcessInstanceExtDO extDO = processInstanceExtMapper.selectByProcessInstanceId(processInstanceExtId);
ProcessInstance instance = bpmProcessInstanceService.getProcessInstance(extDO.getProcessInstanceId());
if (instance.isEnded() && !items.isEmpty()) {
List<Long> ids = items.stream().map(BpmOAProcurePayItemRespVO::getBpmOaProcureId).collect(Collectors.toList());
//所有关联的采购申请改为 未支付状态
oaProcureService.updatePayFlagByIds(
new BpmOAProcureListEditReqVO()
.setPayFlag(BpmOAProcureDO.FLAG_TRUE)
.setProcureIds(ids)
);
}
}
// -- 自己取消
// -- 审核拒绝
//所有关联的采购申请改为 未支付状态
if (BpmProcessInstanceResultEnum.REJECT.getResult().equals(result)
|| BpmProcessInstanceResultEnum.CANCEL.getResult().equals(result)
|| BpmProcessInstanceResultEnum.BACK.getResult().equals(result)) {
if (!items.isEmpty()) {
List<Long> ids = items.stream().map(BpmOAProcurePayItemRespVO::getBpmOaProcureId).collect(Collectors.toList());
//所有关联的采购申请改为 未支付状态
oaProcureService.updatePayFlagByIds(
new BpmOAProcureListEditReqVO()
.setPayFlag(BpmOAProcureDO.FLAG_FALSE)
.setProcureIds(ids)
);
}
}
oAProcurePayMapper.updateById(new BpmOAProcurePayDO().setId(id).setResult(result));
}
}

View File

@ -1,6 +1,7 @@
package cn.iocoder.yudao.module.bpm.service.oa;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procure.BpmOAProcureListEditReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procure.BpmOAProcurePageReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procure.BpmOAProcureSaveReqVO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAProcureDO;
@ -12,7 +13,7 @@ import javax.validation.Valid;
*
* @author 姚君
*/
public interface BpmOaProcureService {
public interface BpmOAProcureService {
/**
* 创建OA 采购申请
@ -52,4 +53,17 @@ public interface BpmOaProcureService {
*/
PageResult<BpmOAProcureDO> getOaProcurePage(BpmOAProcurePageReqVO pageReqVO);
/**
* 根据ids修改状态
*
* @param vo
*/
void updatePayFlagByIds(BpmOAProcureListEditReqVO vo);
/**
*
* @param id
* @param result
*/
void updateEvectionResult(Long id, Integer result);
}

View File

@ -3,21 +3,23 @@ package cn.iocoder.yudao.module.bpm.service.oa;
import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils;
import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi;
import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procure.BpmOAProcureListEditReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procure.BpmOAProcurePageReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procure.BpmOAProcureSaveReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.upload.UploadUserFile;
import cn.iocoder.yudao.module.bpm.convert.oa.BpmOAProcureConvert;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAProcureDO;
import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOaProcureMapper;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAReimbursementDO;
import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOAProcureMapper;
import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -31,16 +33,17 @@ import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionU
*/
@Service
@Validated
public class BpmOaProcureServiceImpl extends BpmOABaseService implements BpmOaProcureService {
public class BpmOAProcureServiceImpl extends BpmOABaseService implements BpmOAProcureService {
@Resource
private BpmOaProcureMapper bpmOaProcureMapper;
private BpmOAProcureMapper bpmOaProcureMapper;
@Resource
private BpmProcessInstanceApi processInstanceApi;
/**
* OA 请假对应的流程定义 KEY
*/
public static final String PROCESS_KEY = "oa_procure";
@Override
public Long createOaProcure(BpmOAProcureSaveReqVO createReqVO) {
Long userId = WebFrameworkUtils.getLoginUserId();
@ -99,4 +102,16 @@ public class BpmOaProcureServiceImpl extends BpmOABaseService implements BpmOaPr
return bpmOaProcureMapper.selectPage(pageReqVO);
}
@Override
public void updatePayFlagByIds(BpmOAProcureListEditReqVO vo) {
bpmOaProcureMapper.update(new BpmOAProcureDO().setPayFlag(vo.getPayFlag()),
new LambdaQueryWrapperX<BpmOAProcureDO>()
.inIfPresent(BpmOAProcureDO::getId, vo.getProcureIds()));
}
@Override
public void updateEvectionResult(Long id, Integer result) {
bpmOaProcureMapper.updateById(new BpmOAProcureDO().setId(id).setResult(result));
}
}

View File

@ -0,0 +1,33 @@
package cn.iocoder.yudao.module.bpm.service.oa.listener;
import cn.iocoder.yudao.module.bpm.framework.bpm.core.event.BpmProcessInstanceResultEvent;
import cn.iocoder.yudao.module.bpm.framework.bpm.core.event.BpmProcessInstanceResultEventListener;
import cn.iocoder.yudao.module.bpm.service.oa.BpmOAProcurePayService;
import cn.iocoder.yudao.module.bpm.service.oa.BpmOAProcurePayServiceImpl;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
* OA 出差单的结果的监听器实现类
*
* @author 符溶馨
*/
@Component
public class BpmOAProcurePayResultListener extends BpmProcessInstanceResultEventListener {
@Resource
private BpmOAProcurePayService evectionService;
@Override
protected String getProcessDefinitionKey() {
return BpmOAProcurePayServiceImpl.PROCESS_KEY;
}
@Override
protected void onEvent(BpmProcessInstanceResultEvent event) {
evectionService.updateEvectionResult(event.getId(), Long.parseLong(event.getBusinessKey()),
event.getResult());
}
}

View File

@ -0,0 +1,32 @@
package cn.iocoder.yudao.module.bpm.service.oa.listener;
import cn.iocoder.yudao.module.bpm.framework.bpm.core.event.BpmProcessInstanceResultEvent;
import cn.iocoder.yudao.module.bpm.framework.bpm.core.event.BpmProcessInstanceResultEventListener;
import cn.iocoder.yudao.module.bpm.service.oa.BpmOAEvectionServiceImpl;
import cn.iocoder.yudao.module.bpm.service.oa.BpmOAProcureService;
import cn.iocoder.yudao.module.bpm.service.oa.BpmOAProcureServiceImpl;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
* OA 出差单的结果的监听器实现类
*
* @author 符溶馨
*/
@Component
public class BpmOAProcureResultListener extends BpmProcessInstanceResultEventListener {
@Resource
private BpmOAProcureService evectionService;
@Override
protected String getProcessDefinitionKey() {
return BpmOAProcureServiceImpl.PROCESS_KEY;
}
@Override
protected void onEvent(BpmProcessInstanceResultEvent event) {
evectionService.updateEvectionResult(Long.parseLong(event.getBusinessKey()), event.getResult());
}
}

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOaProcureMapper">
<mapper namespace="cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOAProcureMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。

View File

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOAProcurePayItemMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
<select id="getByProcurePayId"
resultType="cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procurepay.BpmOAProcurePayItemRespVO">
select
a.payee,
a.payee_number,
b.id as bpmOaProcureId,
b.reason,
b.procure_type,
b.expected_delivery_date,
b.remarks,
b.total_money,
b.total_money_chinese
from bpm_oa_procure_pay_item as a
left join bpm_oa_procure as b on a.bpm_oa_procure_id = b.id
<where>
<if test="procurePayId != null">
and a.bpm_oa_procure_pay_id = #{procurePayId}
</if>
</where>
</select>
</mapper>

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOAProcurePayMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
</mapper>

View File

@ -58,4 +58,9 @@ public interface AdminUserApi {
@Parameter(name = "ids", description = "用户编号数组", example = "3,5", required = true)
CommonResult<Boolean> validateUserList(@RequestParam("ids") Set<Long> ids);
@GetMapping(PREFIX + "/getUserIdsByUserIdGroupByDept")
@Operation(summary = "获取同部门所有用户id")
@Parameter(name = "userId", description = "用户id", example = "1024", required = true)
CommonResult<List<Long>> getUserIdsByUserIdGroupByDept(@RequestParam("userId") Long userId);
}

View File

@ -55,4 +55,11 @@ public class AdminUserApiImpl implements AdminUserApi {
return success(true);
}
@Override
public CommonResult<List<Long>> getUserIdsByUserIdGroupByDept(Long userId) {
AdminUserDO user = userService.getUser(userId);
List<Long> userIds = userService.getUserIdsByDeptId(user.getDeptId());
return success(userIds);
}
}

View File

@ -221,4 +221,10 @@ public interface AdminUserService {
*/
boolean isPasswordMatch(String rawPassword, String encodedPassword);
/**
* 根据部门id获取用户ids
* @param deptId
* @return
*/
List<Long> getUserIdsByDeptId(Long deptId);
}

View File

@ -38,6 +38,7 @@ import javax.annotation.Resource;
import java.io.InputStream;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
@ -46,8 +47,6 @@ import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
/**
* 后台用户 Service 实现类
*
*/
@Service("adminUserService")
@Slf4j
@ -296,6 +295,7 @@ public class AdminUserServiceImpl implements AdminUserService {
/**
* 获得部门条件查询指定部门的子部门编号们包括自身
*
* @param deptId 部门编号
* @return 部门编号集合
*/
@ -394,6 +394,7 @@ public class AdminUserServiceImpl implements AdminUserService {
/**
* 校验旧密码
*
* @param id 用户 id
* @param oldPassword 旧密码
*/
@ -456,6 +457,16 @@ public class AdminUserServiceImpl implements AdminUserService {
return passwordEncoder.matches(rawPassword, encodedPassword);
}
@Override
public List<Long> getUserIdsByDeptId(Long deptId) {
List<Long> userIds = new ArrayList<>();
List<AdminUserDO> adminUserDOS = userMapper.selectListByDeptIds(Arrays.asList(deptId));
if (!adminUserDOS.isEmpty()) {
userIds = adminUserDOS.stream().map(AdminUserDO::getId).collect(Collectors.toList());
}
return userIds;
}
/**
* 对密码进行加密
*