Compare commits

..

No commits in common. "dev" and "crm-业绩目标" have entirely different histories.

661 changed files with 1103 additions and 31140 deletions

View File

@ -24,7 +24,6 @@
<module>yudao-module-wms</module> <module>yudao-module-wms</module>
<module>yudao-module-hrm</module> <module>yudao-module-hrm</module>
<module>yudao-module-crm</module> <module>yudao-module-crm</module>
<module>yudao-module-erp</module>
</modules> </modules>
<name>${project.artifactId}</name> <name>${project.artifactId}</name>

View File

@ -137,12 +137,6 @@
<groupId>org.jsoup</groupId> <groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId> <artifactId>jsoup</artifactId>
</dependency> </dependency>
<!-- 中文转换大写 -->
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.1</version>
</dependency>
<!-- Test 测试相关 --> <!-- Test 测试相关 -->
<dependency> <dependency>

View File

@ -1,15 +0,0 @@
package cn.iocoder.yudao.framework.common.core;
/**
* 可生成 T 数组的接口
*
* @author HUIHUI
*/
public interface ArrayValuable<T> {
/**
* @return 数组
*/
T[] array();
}

View File

@ -22,14 +22,6 @@ public class AssetsTypeCodeEnum {
* 叉车 * 叉车
*/ */
public static final String FORKLIFT_ELECTRICITY = "FORKLIFT_ELECTRICITY"; public static final String FORKLIFT_ELECTRICITY = "FORKLIFT_ELECTRICITY";
/**
* 叉车 油转电
*/
public static final String FORKLIFT_OIL_TO_ELECTRICITY = "FORKLIFT_OIL_TO_ELECTRICITY";
/**
* 拖拉机
*/
public static final String FORKLIFT_TRACTOR = "FORKLIFT_TRACTOR";
/** /**
* 托盘 * 托盘
*/ */
@ -38,9 +30,4 @@ public class AssetsTypeCodeEnum {
* 绑带 * 绑带
*/ */
public static final String STRAPS = "STRAPS"; public static final String STRAPS = "STRAPS";
/**
* 生产机械
*/
public static final String PRODUCTION_MACHINERY = "PRODUCTION_MACHINERY";
} }

View File

@ -1,7 +1,7 @@
package cn.iocoder.yudao.framework.common.enums; package cn.iocoder.yudao.framework.common.enums;
import cn.hutool.core.util.ObjUtil; import cn.hutool.core.util.ObjUtil;
import cn.iocoder.yudao.framework.common.core.ArrayValuable; import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
@ -14,12 +14,12 @@ import java.util.Arrays;
*/ */
@Getter @Getter
@AllArgsConstructor @AllArgsConstructor
public enum CommonStatusEnum implements ArrayValuable<Integer> { public enum CommonStatusEnum implements IntArrayValuable {
ENABLE(0, "开启"), ENABLE(0, "开启"),
DISABLE(1, "关闭"); DISABLE(1, "关闭");
public static final Integer[] ARRAYS = Arrays.stream(values()).map(CommonStatusEnum::getStatus).toArray(Integer[]::new); public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(CommonStatusEnum::getStatus).toArray();
/** /**
* 状态值 * 状态值
@ -31,7 +31,7 @@ public enum CommonStatusEnum implements ArrayValuable<Integer> {
private final String name; private final String name;
@Override @Override
public Integer[] array() { public int[] array() {
return ARRAYS; return ARRAYS;
} }

View File

@ -1,7 +1,7 @@
package cn.iocoder.yudao.framework.common.enums; package cn.iocoder.yudao.framework.common.enums;
import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ArrayUtil;
import cn.iocoder.yudao.framework.common.core.ArrayValuable; import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
@ -14,7 +14,7 @@ import java.util.Arrays;
*/ */
@Getter @Getter
@AllArgsConstructor @AllArgsConstructor
public enum SocialTypeEnum implements ArrayValuable<Integer> { public enum SocialTypeEnum implements IntArrayValuable {
/** /**
* Gitee * Gitee
@ -61,7 +61,7 @@ public enum SocialTypeEnum implements ArrayValuable<Integer> {
WECHAT_MINI_APP_CRM(35, "WECHAT_MINI_APP_CRM"), WECHAT_MINI_APP_CRM(35, "WECHAT_MINI_APP_CRM"),
; ;
public static final Integer[] ARRAYS = Arrays.stream(values()).map(SocialTypeEnum::getType).toArray(Integer[]::new);; public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(SocialTypeEnum::getType).toArray();
/** /**
* 类型 * 类型
@ -73,7 +73,7 @@ public enum SocialTypeEnum implements ArrayValuable<Integer> {
private final String source; private final String source;
@Override @Override
public Integer[] array() { public int[] array() {
return ARRAYS; return ARRAYS;
} }

View File

@ -1,6 +1,6 @@
package cn.iocoder.yudao.framework.common.enums; package cn.iocoder.yudao.framework.common.enums;
import cn.iocoder.yudao.framework.common.core.ArrayValuable; import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
import lombok.Getter; import lombok.Getter;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -13,7 +13,7 @@ import java.util.Arrays;
*/ */
@RequiredArgsConstructor @RequiredArgsConstructor
@Getter @Getter
public enum TerminalEnum implements ArrayValuable<Integer> { public enum TerminalEnum implements IntArrayValuable {
WECHAT_MINI_PROGRAM(10, "微信小程序"), WECHAT_MINI_PROGRAM(10, "微信小程序"),
WECHAT_WAP(11, "微信公众号"), WECHAT_WAP(11, "微信公众号"),
@ -21,7 +21,7 @@ public enum TerminalEnum implements ArrayValuable<Integer> {
APP(31, "手机 App"), APP(31, "手机 App"),
; ;
public static final Integer[] ARRAYS = Arrays.stream(values()).map(TerminalEnum::getTerminal).toArray(Integer[]::new); public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(TerminalEnum::getTerminal).toArray();
/** /**
* 终端 * 终端
@ -33,7 +33,7 @@ public enum TerminalEnum implements ArrayValuable<Integer> {
private final String name; private final String name;
@Override @Override
public Integer[] array() { public int[] array() {
return ARRAYS; return ARRAYS;
} }
} }

View File

@ -1,7 +1,7 @@
package cn.iocoder.yudao.framework.common.enums; package cn.iocoder.yudao.framework.common.enums;
import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ArrayUtil;
import cn.iocoder.yudao.framework.common.core.ArrayValuable; import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
@ -12,13 +12,13 @@ import java.util.Arrays;
*/ */
@AllArgsConstructor @AllArgsConstructor
@Getter @Getter
public enum UserTypeEnum implements ArrayValuable<Integer> { public enum UserTypeEnum implements IntArrayValuable {
MEMBER(1, "会员"), // 面向 c 普通用户 MEMBER(1, "会员"), // 面向 c 普通用户
ADMIN(2, "管理员"), // 面向 b 管理后台 ADMIN(2, "管理员"), // 面向 b 管理后台
CUSTOMER(3, "客户"); //客户 CUSTOMER(3, "客户"); //客户
public static final Integer[] ARRAYS = Arrays.stream(values()).map(UserTypeEnum::getValue).toArray(Integer[]::new); public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(UserTypeEnum::getValue).toArray();
/** /**
* 类型 * 类型
@ -34,7 +34,7 @@ public enum UserTypeEnum implements ArrayValuable<Integer> {
} }
@Override @Override
public Integer[] array() { public int[] array() {
return ARRAYS; return ARRAYS;
} }
} }

View File

@ -5,7 +5,6 @@ import cn.iocoder.yudao.framework.common.enums.SocialTypeEnum;
import cn.iocoder.yudao.framework.common.template.dto.ApprovalResultNotificationMessageDTO; import cn.iocoder.yudao.framework.common.template.dto.ApprovalResultNotificationMessageDTO;
import cn.iocoder.yudao.framework.common.template.dto.PerformanceResultConfirmationReminderDTO; import cn.iocoder.yudao.framework.common.template.dto.PerformanceResultConfirmationReminderDTO;
import cn.iocoder.yudao.framework.common.template.dto.ProcessToDoReminderDTO; import cn.iocoder.yudao.framework.common.template.dto.ProcessToDoReminderDTO;
import cn.iocoder.yudao.framework.common.template.dto.StaffCertificateInformationDTO;
import cn.iocoder.yudao.framework.common.template.vo.MsgData; import cn.iocoder.yudao.framework.common.template.vo.MsgData;
import cn.iocoder.yudao.framework.common.template.vo.SubscribeMessageReqDTO; import cn.iocoder.yudao.framework.common.template.vo.SubscribeMessageReqDTO;
import cn.iocoder.yudao.framework.common.util.date.DateUtils; import cn.iocoder.yudao.framework.common.util.date.DateUtils;
@ -150,46 +149,4 @@ public class WxMpMsgTemplateUtils {
return message; return message;
} }
/**
* 叉车年检过期提醒
*
* @param dto
* @return
*/
public SubscribeMessageReqDTO forkliftAnnualInspectionExpiredReminder(StaffCertificateInformationDTO dto) {
SubscribeMessageReqDTO message = new SubscribeMessageReqDTO();
message.setToUser(dto.getOpenId());
message.setTemplateId(PERFORMANCE_RESULT_CONFIRMATION_REMINDER);
//证件类型
MsgData certificateName = new MsgData();
certificateName.setName("thing1");
certificateName.setValue(dto.getCertificateName());
message.addData(certificateName);
//到期时间
MsgData time = new MsgData();
time.setName("time2");
time.setValue(dto.getTime());
message.addData(time);
//姓名
MsgData name = new MsgData();
name.setName("thing4");
name.setValue(dto.getTime());
message.addData(name);
//备注
MsgData remarks = new MsgData();
remarks.setName("thing3");
remarks.setValue(dto.getTime());
message.addData(remarks);
message.setJumpWxMaFlag(false);
// message.setMiniProgramState(dto.getMiniProgramState());
// message.setPage(dto.getPage());
message.setSocialType(SocialTypeEnum.WECHAT_MINI_APP.getType());
return message;
}
} }

View File

@ -1,24 +0,0 @@
package cn.iocoder.yudao.framework.common.template.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
public class StaffCertificateInformationDTO {
@Schema(description = "接收者(用户)的 openid")
private String openId;
@Schema(description = "工人名称")
private String userName;
@Schema(description = "证书名称")
private String certificateName;
@Schema(description = "到期时间")
private String time;
@Schema(description = "备注")
private String remarks;
@Schema(description = "跳转小程序类型")
private String miniProgramState = "formal";
@Schema(description = "小程序页面地址", requiredMode = Schema.RequiredMode.REQUIRED, example = "pages/home/index")
private String page;
}

View File

@ -304,18 +304,13 @@ public class CollectionUtils {
return valueFunc.apply(t); return valueFunc.apply(t);
} }
public static <T, V extends Comparable<? super V>> V getSumValue(Collection<T> from, Function<T, V> valueFunc, public static <T, V extends Comparable<? super V>> V getSumValue(List<T> from, Function<T, V> valueFunc,
BinaryOperator<V> accumulator) { BinaryOperator<V> accumulator) {
return getSumValue(from, valueFunc, accumulator, null);
}
public static <T, V extends Comparable<? super V>> V getSumValue(Collection<T> from, Function<T, V> valueFunc,
BinaryOperator<V> accumulator, V defaultValue) {
if (CollUtil.isEmpty(from)) { if (CollUtil.isEmpty(from)) {
return defaultValue; return null;
} }
assert !from.isEmpty(); // 断言避免告警 assert from.size() > 0; // 断言避免告警
return from.stream().map(valueFunc).filter(Objects::nonNull).reduce(accumulator).orElse(defaultValue); return from.stream().map(valueFunc).reduce(accumulator).get();
} }
public static <T> void addIfNotNull(Collection<T> coll, T item) { public static <T> void addIfNotNull(Collection<T> coll, T item) {
@ -328,7 +323,5 @@ public class CollectionUtils {
public static <T> Collection<T> singleton(T deptId) { public static <T> Collection<T> singleton(T deptId) {
return deptId == null ? Collections.emptyList() : Collections.singleton(deptId); return deptId == null ? Collections.emptyList() : Collections.singleton(deptId);
} }
public static <T> List<T> newArrayList(List<List<T>> list) {
return list.stream().filter(Objects::nonNull).flatMap(Collection::stream).collect(Collectors.toList());
}
} }

View File

@ -214,39 +214,4 @@ public class LocalDateTimeUtils {
return !end.isBefore(otherStart) && !otherEnd.isBefore(start); return !end.isBefore(otherStart) && !otherEnd.isBefore(start);
} }
/**
* 获取今天的开始时间
*
* @return 今天
*/
public static LocalDateTime getToday() {
return LocalDateTimeUtil.beginOfDay(LocalDateTime.now());
}
/**
* 获取昨天的开始时间
*
* @return 昨天
*/
public static LocalDateTime getYesterday() {
return LocalDateTimeUtil.beginOfDay(LocalDateTime.now().minusDays(1));
}
/**
* 获取本月的开始时间
*
* @return 本月
*/
public static LocalDateTime getMonth() {
return beginOfMonth(LocalDateTime.now());
}
/**
* 获取本年的开始时间
*
* @return 本年
*/
public static LocalDateTime getYear() {
return LocalDateTime.now().with(TemporalAdjusters.firstDayOfYear()).with(LocalTime.MIN);
}
} }

View File

@ -12,15 +12,6 @@ import java.math.RoundingMode;
*/ */
public class MoneyUtils { public class MoneyUtils {
/**
* 金额的小数位数
*/
private static final int PRICE_SCALE = 2;
/**
* 百分比对应的 BigDecimal 对象
*/
public static final BigDecimal PERCENT_100 = BigDecimal.valueOf(100);
/** /**
* 计算百分比金额四舍五入 * 计算百分比金额四舍五入
@ -78,34 +69,5 @@ public class MoneyUtils {
public static String fenToYuanStr(int fen) { public static String fenToYuanStr(int fen) {
return new Money(0, fen).toString(); return new Money(0, fen).toString();
} }
/**
* 金额相乘默认进行四舍五入
*
* 位数{@link #PRICE_SCALE}
*
* @param price 金额
* @param count 数量
* @return 金额相乘结果
*/
public static BigDecimal priceMultiply(BigDecimal price, BigDecimal count) {
if (price == null || count == null) {
return null;
}
return price.multiply(count).setScale(PRICE_SCALE, RoundingMode.HALF_UP);
}
/**
* 金额相乘百分比默认进行四舍五入
*
* 位数{@link #PRICE_SCALE}
*
* @param price 金额
* @param percent 百分比
* @return 金额相乘结果
*/
public static BigDecimal priceMultiplyPercent(BigDecimal price, BigDecimal percent) {
if (price == null || percent == null) {
return null;
}
return price.multiply(percent).divide(PERCENT_100, PRICE_SCALE, RoundingMode.HALF_UP);
}
} }

View File

@ -5,7 +5,6 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import java.util.List; import java.util.List;
import java.util.function.Consumer;
/** /**
* Bean 工具类 * Bean 工具类
@ -13,7 +12,7 @@ import java.util.function.Consumer;
* 1. 默认使用 {@link cn.hutool.core.bean.BeanUtil} 作为实现类虽然不同 bean 工具的性能有差别但是对绝大多数同学的项目不用在意这点性能 * 1. 默认使用 {@link cn.hutool.core.bean.BeanUtil} 作为实现类虽然不同 bean 工具的性能有差别但是对绝大多数同学的项目不用在意这点性能
* 2. 针对复杂的对象转换可以搜参考 AuthConvert 实现通过 mapstruct + default 配合实现 * 2. 针对复杂的对象转换可以搜参考 AuthConvert 实现通过 mapstruct + default 配合实现
* *
* @author 芋道源码
*/ */
public class BeanUtils { public class BeanUtils {
@ -21,14 +20,6 @@ public class BeanUtils {
return BeanUtil.toBean(source, targetClass); return BeanUtil.toBean(source, targetClass);
} }
public static <T> T toBean(Object source, Class<T> targetClass, Consumer<T> peek) {
T target = toBean(source, targetClass);
if (target != null) {
peek.accept(target);
}
return target;
}
public static <S, T> List<T> toBean(List<S> source, Class<T> targetType) { public static <S, T> List<T> toBean(List<S> source, Class<T> targetType) {
if (source == null) { if (source == null) {
return null; return null;
@ -36,34 +27,11 @@ public class BeanUtils {
return CollectionUtils.convertList(source, s -> toBean(s, targetType)); return CollectionUtils.convertList(source, s -> toBean(s, targetType));
} }
public static <S, T> List<T> toBean(List<S> source, Class<T> targetType, Consumer<T> peek) { public static <S, T> PageResult<T> toBean(PageResult<S> source, Class<T> targetType) {
List<T> list = toBean(source, targetType);
if (list != null) {
list.forEach(peek);
}
return list;
}
public static <S, T> PageResult<T> toBean(PageResult<S> source, Class<T> targetType) {
return toBean(source, targetType, null);
}
public static <S, T> PageResult<T> toBean(PageResult<S> source, Class<T> targetType, Consumer<T> peek) {
if (source == null) { if (source == null) {
return null; return null;
} }
List<T> list = toBean(source.getList(), targetType); return new PageResult<>(toBean(source.getList(), targetType), source.getTotal());
if (peek != null) {
list.forEach(peek);
}
return new PageResult<>(list, source.getTotal());
} }
public static void copyProperties(Object source, Object target) { }
if (source == null || target == null) {
return;
}
BeanUtil.copyProperties(source, target, false);
}
}

View File

@ -1,22 +0,0 @@
package cn.iocoder.yudao.framework.common.util.spring;
import net.sourceforge.pinyin4j.PinyinHelper;
/**
* Spring 中文转换
*/
public class ChineseConversionUtils {
public static String getChineseInitials(String chinese) {
StringBuilder result = new StringBuilder();
for (char c : chinese.toCharArray()) {
// 获取汉字对应的拼音数组可能有多音字
String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(c);
if (pinyinArray != null && pinyinArray.length > 0) {
// 取第一个拼音的首字母并转大写
result.append(pinyinArray[0].charAt(0));
}
}
return result.toString().toUpperCase();
}
}

View File

@ -1,6 +1,6 @@
package cn.iocoder.yudao.framework.common.validation; package cn.iocoder.yudao.framework.common.validation;
import cn.iocoder.yudao.framework.common.core.ArrayValuable; import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
import javax.validation.Constraint; import javax.validation.Constraint;
import javax.validation.Payload; import javax.validation.Payload;
@ -22,9 +22,9 @@ import java.lang.annotation.*;
public @interface InEnum { public @interface InEnum {
/** /**
* @return 实现 ArrayValuable 接口的类 * @return 实现 EnumValuable 接口的
*/ */
Class<? extends ArrayValuable<?>> value(); Class<? extends IntArrayValuable> value();
String message() default "必须在指定范围 {value}"; String message() default "必须在指定范围 {value}";

View File

@ -1,7 +1,7 @@
package cn.iocoder.yudao.framework.common.validation; package cn.iocoder.yudao.framework.common.validation;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.common.core.ArrayValuable; import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext; import javax.validation.ConstraintValidatorContext;
@ -9,31 +9,29 @@ import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
public class InEnumCollectionValidator implements ConstraintValidator<InEnum, Collection<?>> { public class InEnumCollectionValidator implements ConstraintValidator<InEnum, Collection<Integer>> {
private List<?> values; private List<Integer> values;
@Override @Override
public void initialize(InEnum annotation) { public void initialize(InEnum annotation) {
ArrayValuable<?>[] values = annotation.value().getEnumConstants(); IntArrayValuable[] values = annotation.value().getEnumConstants();
if (values.length == 0) { if (values.length == 0) {
this.values = Collections.emptyList(); this.values = Collections.emptyList();
} else { } else {
this.values = Arrays.asList(values[0].array()); this.values = Arrays.stream(values[0].array()).boxed().collect(Collectors.toList());
} }
} }
@Override @Override
public boolean isValid(Collection<?> list, ConstraintValidatorContext context) { public boolean isValid(Collection<Integer> list, ConstraintValidatorContext context) {
if (list == null) {
return true;
}
// 校验通过 // 校验通过
if (CollUtil.containsAll(values, list)) { if (CollUtil.containsAll(values, list)) {
return true; return true;
} }
// 校验不通过自定义提示语句 // 校验不通过自定义提示语句因为注解上的 value 是枚举类无法获得枚举类的实际值
context.disableDefaultConstraintViolation(); // 禁用默认的 message 的值 context.disableDefaultConstraintViolation(); // 禁用默认的 message 的值
context.buildConstraintViolationWithTemplate(context.getDefaultConstraintMessageTemplate() context.buildConstraintViolationWithTemplate(context.getDefaultConstraintMessageTemplate()
.replaceAll("\\{value}", CollUtil.join(list, ","))).addConstraintViolation(); // 重新添加错误提示语句 .replaceAll("\\{value}", CollUtil.join(list, ","))).addConstraintViolation(); // 重新添加错误提示语句

View File

@ -1,29 +1,30 @@
package cn.iocoder.yudao.framework.common.validation; package cn.iocoder.yudao.framework.common.validation;
import cn.iocoder.yudao.framework.common.core.ArrayValuable; import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext; import javax.validation.ConstraintValidatorContext;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
public class InEnumValidator implements ConstraintValidator<InEnum, Object> { public class InEnumValidator implements ConstraintValidator<InEnum, Integer> {
private List<?> values; private List<Integer> values;
@Override @Override
public void initialize(InEnum annotation) { public void initialize(InEnum annotation) {
ArrayValuable<?>[] values = annotation.value().getEnumConstants(); IntArrayValuable[] values = annotation.value().getEnumConstants();
if (values.length == 0) { if (values.length == 0) {
this.values = Collections.emptyList(); this.values = Collections.emptyList();
} else { } else {
this.values = Arrays.asList(values[0].array()); this.values = Arrays.stream(values[0].array()).boxed().collect(Collectors.toList());
} }
} }
@Override @Override
public boolean isValid(Object value, ConstraintValidatorContext context) { public boolean isValid(Integer value, ConstraintValidatorContext context) {
// 为空时默认不校验即认为通过 // 为空时默认不校验即认为通过
if (value == null) { if (value == null) {
return true; return true;
@ -32,7 +33,7 @@ public class InEnumValidator implements ConstraintValidator<InEnum, Object> {
if (values.contains(value)) { if (values.contains(value)) {
return true; return true;
} }
// 校验不通过自定义提示语句 // 校验不通过自定义提示语句因为注解上的 value 是枚举类无法获得枚举类的实际值
context.disableDefaultConstraintViolation(); // 禁用默认的 message 的值 context.disableDefaultConstraintViolation(); // 禁用默认的 message 的值
context.buildConstraintViolationWithTemplate(context.getDefaultConstraintMessageTemplate() context.buildConstraintViolationWithTemplate(context.getDefaultConstraintMessageTemplate()
.replaceAll("\\{value}", values.toString())).addConstraintViolation(); // 重新添加错误提示语句 .replaceAll("\\{value}", values.toString())).addConstraintViolation(); // 重新添加错误提示语句

View File

@ -1,6 +1,6 @@
package cn.iocoder.yudao.framework.ip.core.enums; package cn.iocoder.yudao.framework.ip.core.enums;
import cn.iocoder.yudao.framework.common.core.ArrayValuable; import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
@ -13,7 +13,7 @@ import java.util.Arrays;
*/ */
@AllArgsConstructor @AllArgsConstructor
@Getter @Getter
public enum AreaTypeEnum implements ArrayValuable<Integer> { public enum AreaTypeEnum implements IntArrayValuable {
COUNTRY(1, "国家"), COUNTRY(1, "国家"),
PROVINCE(2, "省份"), PROVINCE(2, "省份"),
@ -21,7 +21,7 @@ public enum AreaTypeEnum implements ArrayValuable<Integer> {
DISTRICT(4, "地区"), // 区等 DISTRICT(4, "地区"), // 区等
; ;
public static final Integer[] ARRAYS = Arrays.stream(values()).map(AreaTypeEnum::getType).toArray(Integer[]::new); public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(AreaTypeEnum::getType).toArray();
/** /**
* 类型 * 类型
@ -33,7 +33,7 @@ public enum AreaTypeEnum implements ArrayValuable<Integer> {
private final String name; private final String name;
@Override @Override
public Integer[] array() { public int[] array() {
return ARRAYS; return ARRAYS;
} }
} }

View File

@ -1,8 +1,7 @@
package cn.iocoder.yudao.framework.pay.core.enums.transfer; package cn.iocoder.yudao.framework.pay.core.enums.transfer;
import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ArrayUtil;
import cn.iocoder.yudao.framework.common.core.ArrayValuable; import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
@ -15,7 +14,7 @@ import java.util.Arrays;
*/ */
@AllArgsConstructor @AllArgsConstructor
@Getter @Getter
public enum PayTransferTypeEnum implements ArrayValuable<Integer> { public enum PayTransferTypeEnum implements IntArrayValuable {
ALIPAY_BALANCE(1, "支付宝余额"), ALIPAY_BALANCE(1, "支付宝余额"),
WX_BALANCE(2, "微信余额"), WX_BALANCE(2, "微信余额"),
@ -28,10 +27,10 @@ public enum PayTransferTypeEnum implements ArrayValuable<Integer> {
private final Integer type; private final Integer type;
private final String name; private final String name;
public static final Integer[] ARRAYS = Arrays.stream(values()).map(PayTransferTypeEnum::getType).toArray(Integer[]::new); public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(PayTransferTypeEnum::getType).toArray();
@Override @Override
public Integer[] array() { public int[] array() {
return ARRAYS; return ARRAYS;
} }

View File

@ -209,13 +209,6 @@ spring:
- Path=/app-api/statistics/** - Path=/app-api/statistics/**
filters: filters:
- RewritePath=/app-api/statistics/v3/api-docs, /v3/api-docs - RewritePath=/app-api/statistics/v3/api-docs, /v3/api-docs
## erp-server 服务
- id: erp-admin-api # 路由的编号
uri: grayLb://erp-server
predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组
- Path=/admin-api/erp/**
filters:
- RewritePath=/admin-api/erp/v3/api-docs, /v3/api-docs # 配置,保证转发到 /v3/api-docs
x-forwarded: x-forwarded:
prefix-enabled: false # 避免 Swagger 重复带上额外的 /admin-api/system 前缀 prefix-enabled: false # 避免 Swagger 重复带上额外的 /admin-api/system 前缀
@ -269,6 +262,3 @@ knife4j:
- name: statistics-server - name: statistics-server
service-name: statistics-server service-name: statistics-server
url: /admin-api/statistics/v3/api-docs url: /admin-api/statistics/v3/api-docs
- name: erp-server
service-name: erp-server
url: /admin-api/erp/v3/api-docs

View File

@ -1,28 +0,0 @@
package cn.iocoder.yudao.module.bpm.api.oa;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.bpm.api.oa.vo.loan.BpmOALoanSumDTO;
import cn.iocoder.yudao.module.bpm.enums.ApiConstants;
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.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.Collection;
import java.util.List;
@FeignClient(name = ApiConstants.NAME) // TODO 芋艿fallbackFactory =
@Tag(name = "RPC 服务 - 流程实例")
public interface BpmOALoanApi {
String PREFIX = ApiConstants.PREFIX + "/oa/loan";
@GetMapping(PREFIX + "/getListByStaffId")
@Operation(summary = "获取员工当月需抵扣的借支金额")
@Parameter(name = "staffId", description = "用户编号", required = true)
@Parameter(name = "month", description = "月份", required = true)
CommonResult<List<BpmOALoanSumDTO>> getListByStaffId(@RequestParam("staffId") Collection<Long> staffId,
@RequestParam("month") String month);
}

View File

@ -1,47 +0,0 @@
package cn.iocoder.yudao.module.bpm.api.oa.vo.loan;
import cn.iocoder.yudao.framework.common.pojo.UploadUserFile;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.List;
/**
* 生产借支 创建 Request VO
*
* @author 符溶馨
*/
@Schema(description = "管理后台 - 借支 Request VO")
@Data
@EqualsAndHashCode()
@ToString(callSuper = true)
public class BpmOALoanDTO {
@Schema(description = "收款人信息")
private Long bankId;
@Schema(description = "借支工厂")
private Long factoryId;
@Schema(description = "借支厂区用户")
private Long sfUserId;
@Schema(description = "借支类型 | 1工资 2费用", example = "1")
private Integer loanType;
@Schema(description = "抵扣工资月份 | yyyy-MM")
private String returnDate;
@Schema(description = "借支金额")
private BigDecimal totalMoney;
@Schema(description = "流程实例编号")
private String processInstanceId;
@Schema(description = "状态-参见 bpm_process_instance_result 枚举")
private Integer result;
}

View File

@ -1,17 +0,0 @@
package cn.iocoder.yudao.module.bpm.api.oa.vo.loan;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
@Schema(description = "RPC 服务 - OA 借支 Response VO")
@Data
public class BpmOALoanSumDTO {
@Schema(description = "借支员工编号")
private Long sfUserId;
@Schema(description = "借支总金额")
private BigDecimal totalAmount;
}

View File

@ -12,7 +12,4 @@ public class ReceiptSettlementDTO {
@Schema(description = "回款总金额") @Schema(description = "回款总金额")
private BigDecimal money; private BigDecimal money;
@Schema(description = "渠道商回款总金额")
private BigDecimal channelAmount;
} }

View File

@ -65,7 +65,6 @@ public interface ErrorCodeConstants {
ErrorCode OA_PAYMENT_FILES_NOT_NULL = new ErrorCode(1_009_001_128, "后补发票不能为空!"); ErrorCode OA_PAYMENT_FILES_NOT_NULL = new ErrorCode(1_009_001_128, "后补发票不能为空!");
ErrorCode OA_EXPENSES_NOT_EXISTS = new ErrorCode(1_009_001_129, "开支日报申请不存在"); ErrorCode OA_EXPENSES_NOT_EXISTS = new ErrorCode(1_009_001_129, "开支日报申请不存在");
ErrorCode OA_LOAN_NOT_EXISTS = new ErrorCode(1_009_001_130, "借支申请不存在"); ErrorCode OA_LOAN_NOT_EXISTS = new ErrorCode(1_009_001_130, "借支申请不存在");
ErrorCode OA_LOAN_NOT_CREATE = new ErrorCode(1_009_001_131, "厂区员工信息不存在");
// ========== 流程模型 1-009-002-000 ========== // ========== 流程模型 1-009-002-000 ==========
ErrorCode MODEL_KEY_EXISTS = new ErrorCode(1_009_002_000, "已经存在流程标识为【{}】的流程"); ErrorCode MODEL_KEY_EXISTS = new ErrorCode(1_009_002_000, "已经存在流程标识为【{}】的流程");

View File

@ -8,7 +8,9 @@ import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.*; import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@ -32,25 +34,8 @@ public class BpmOAEvectionApiImpl implements BpmOAEvectionApi {
List<BpmOAEvectionDO> evectionOff = evectionService.getEvectionListByEndTime(now.minusDays(1)); List<BpmOAEvectionDO> evectionOff = evectionService.getEvectionListByEndTime(now.minusDays(1));
Map<String, List<Long>> result = new HashMap<>(); Map<String, List<Long>> result = new HashMap<>();
result.put("on", evectionOn.stream().flatMap(item -> { result.put("on", evectionOn.stream().map(BpmOAEvectionDO::getUserId).distinct().collect(Collectors.toList()));
Set<Long> togetherUserIds = item.getTogetherUserIds(); result.put("off", evectionOff.stream().map(BpmOAEvectionDO::getUserId).distinct().collect(Collectors.toList()));
List<Long> ids = new ArrayList<>();
ids.add(item.getUserId());
if (togetherUserIds != null) {
ids.addAll(togetherUserIds); // Set 转换为 List 并添加进去
}
return ids.stream();
}).distinct().collect(Collectors.toList()));
result.put("off", evectionOff.stream().flatMap(item -> {
Set<Long> togetherUserIds = item.getTogetherUserIds();
List<Long> ids = new ArrayList<>();
ids.add(item.getUserId());
if (togetherUserIds != null) {
ids.addAll(togetherUserIds); // Set 转换为 List 并添加进去
}
return ids.stream();
}).distinct().collect(Collectors.toList()));
return success(result); return success(result);
} }
} }

View File

@ -1,30 +0,0 @@
package cn.iocoder.yudao.module.bpm.api.oa;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.bpm.api.oa.vo.loan.BpmOALoanSumDTO;
import cn.iocoder.yudao.module.bpm.service.oa.BpmOALoanService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.Collection;
import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
/**
* Flowable 流程实例 Api 实现类
*/
@RestController
@Validated
public class BpmOALoanApiImpl implements BpmOALoanApi{
@Resource
private BpmOALoanService loanService;
@Override
public CommonResult<List<BpmOALoanSumDTO>> getListByStaffId(Collection<Long> staffId, String month) {
return success(loanService.getListByStaffId(staffId, month));
}
}

View File

@ -62,16 +62,4 @@ public class FinancialPaymentRespVO {
@Schema(description = "流程实例名称") @Schema(description = "流程实例名称")
private String processInstanceName; private String processInstanceName;
@Schema(description = "收款人名称")
private String recipientName;
@Schema(description = "付款公司编号")
private Long companyId;
@Schema(description = "付款公司工厂编号")
private Long companyFactoryId;
@Schema(description = "付款公司名称")
private String companyName;
} }

View File

@ -75,8 +75,8 @@ public class BpmOAContractController {
Map<Long, AdminUserRespDTO> userMap = userApi.getUserMap(userIds); Map<Long, AdminUserRespDTO> userMap = userApi.getUserMap(userIds);
if (CollectionUtil.isNotEmpty(userMap)) { if (CollectionUtil.isNotEmpty(userMap)) {
// 设置创建人签约人名称 // 设置创建人签约人名称
respVO.setSignatoryName(userMap.get(contract.getSignatoryId()) != null ? userMap.get(contract.getSignatoryId()).getNickname() : null); respVO.setSignatoryName(userMap.get(contract.getSignatoryId()).getNickname());
respVO.setCreateName(userMap.get(contract.getUserId()) != null ? userMap.get(contract.getUserId()).getNickname() : null); respVO.setCreateName(userMap.get(contract.getUserId()).getNickname());
} }
// 获取公司信息 // 获取公司信息
@ -163,4 +163,5 @@ public class BpmOAContractController {
return success(BeanUtils.toBean(respVOs, BpmOAContractRespVO.class)); return success(BeanUtils.toBean(respVOs, BpmOAContractRespVO.class));
} }
} }

View File

@ -2,7 +2,6 @@ package cn.iocoder.yudao.module.bpm.controller.admin.oa;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.iocoder.yudao.framework.common.pojo.CommonResult; 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.evection.BpmOAEvectionCreateReqVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.evection.BpmOAEvectionCreateReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.evection.BpmOAEvectionRespVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.evection.BpmOAEvectionRespVO;
import cn.iocoder.yudao.module.bpm.convert.oa.BpmOAEvectionConvert; import cn.iocoder.yudao.module.bpm.convert.oa.BpmOAEvectionConvert;
@ -66,15 +65,6 @@ public class BpmOAEvectionController {
return success(respVO); return success(respVO);
} }
@GetMapping("/get-list")
@Operation(summary = "获得我的出差申请")
public CommonResult<List<BpmOAEvectionRespVO>> getEvectionList() {
List<BpmOAEvectionDO> evections = evectionService.getEvectionList();
return success(BeanUtils.toBean(evections, BpmOAEvectionRespVO.class));
}
@GetMapping("/getByProcessInstanceId") @GetMapping("/getByProcessInstanceId")
@Operation(summary = "获得出差申请") @Operation(summary = "获得出差申请")
@Parameter(name = "processInstanceId", description = "流程实例编号", required = true, example = "1024") @Parameter(name = "processInstanceId", description = "流程实例编号", required = true, example = "1024")

View File

@ -2,8 +2,10 @@ package cn.iocoder.yudao.module.bpm.controller.admin.oa;
import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesCreateReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.*; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesPageReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesPageRespVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesRespVO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAExpensesDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAExpensesDO;
import cn.iocoder.yudao.module.bpm.service.oa.BpmOAExpensesService; import cn.iocoder.yudao.module.bpm.service.oa.BpmOAExpensesService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
@ -63,48 +65,9 @@ public class BpmOAExpensesController {
@GetMapping("/page") @GetMapping("/page")
@Operation(summary = "获得生产开支申请分页") @Operation(summary = "获得生产开支申请分页")
@DataPermission(enable = false)
public CommonResult<PageResult<BpmOAExpensesPageRespVO>> getExpensesPage(BpmOAExpensesPageReqVO pageReqVO) { public CommonResult<PageResult<BpmOAExpensesPageRespVO>> getExpensesPage(BpmOAExpensesPageReqVO pageReqVO) {
PageResult<BpmOAExpensesPageRespVO> respVO = expensesService.getExpensesPage(pageReqVO); PageResult<BpmOAExpensesPageRespVO> respVO = expensesService.getExpensesPage(pageReqVO);
return success(respVO); return success(respVO);
} }
@GetMapping("/total")
@Operation(summary = "获得开支金额统计")
@DataPermission(enable = false)
public CommonResult<BpmOAExpensesTotal> getExpensesTotal(BpmOAExpensesPageReqVO pageReqVO) {
return success(expensesService.getExpensesTotal(pageReqVO));
}
@GetMapping("/payment")
@Operation(summary = "提前付款")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
public CommonResult<Boolean> getPayment(Long id) {
expensesService.getPayment(id);
return success(true);
}
@GetMapping("/refused")
@Operation(summary = "拒绝付款")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@Parameter(name = "processInstanceId", description = "流程实例编号", required = true, example = "1024")
public CommonResult<Boolean> refused(@RequestParam("id") Long id,
@RequestParam("processInstanceId") String processInstanceId) {
expensesService.refused(id, processInstanceId);
return success(true);
}
@GetMapping("/oneClickPayment")
@Operation(summary = "一键支付")
@Parameter(name = "month", description = "月份", required = true, example = "2025-04")
@DataPermission(enable = false)
public CommonResult<Boolean> oneClickPayment(String month) {
expensesService.oneClickPayment(month);
return success(true);
}
} }

View File

@ -2,12 +2,9 @@ package cn.iocoder.yudao.module.bpm.controller.admin.oa;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.common.pojo.CommonResult; 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.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.loan.BpmOALoanCreateReqVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.loan.BpmOALoanCreateReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.loan.BpmOALoanPageReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.loan.BpmOALoanRespVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.loan.BpmOALoanRespVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.loan.BpmOAReturnVO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.financialpayment.FinancialPaymentDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.financialpayment.FinancialPaymentDO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOALoanDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOALoanDO;
import cn.iocoder.yudao.module.bpm.service.financialpayment.FinancialPaymentService; import cn.iocoder.yudao.module.bpm.service.financialpayment.FinancialPaymentService;
@ -112,7 +109,7 @@ public class BpmOALoanController {
} }
@GetMapping("/getByProcessInstanceId") @GetMapping("/getByProcessInstanceId")
@Operation(summary = "获得借支申请") @Operation(summary = "获得加班申请")
@Parameter(name = "processInstanceId", description = "流程实例编号", required = true, example = "1024") @Parameter(name = "processInstanceId", description = "流程实例编号", required = true, example = "1024")
public CommonResult<BpmOALoanRespVO> getByProcessInstanceId(@RequestParam("processInstanceId") String processInstanceId) { public CommonResult<BpmOALoanRespVO> getByProcessInstanceId(@RequestParam("processInstanceId") String processInstanceId) {
BpmOALoanDO loan = loanService.getByProcessInstanceId(processInstanceId); BpmOALoanDO loan = loanService.getByProcessInstanceId(processInstanceId);
@ -146,29 +143,30 @@ public class BpmOALoanController {
@GetMapping("/get-list") @GetMapping("/get-list")
@Operation(summary = "获得指定用户的借支申请列表") @Operation(summary = "获得指定用户的借支申请列表")
public CommonResult<PageResult<BpmOALoanRespVO>> getLoanList(BpmOALoanPageReqVO pageReqVO) { @Parameter(name = "id", description = "编号", required = true, example = "1024")
public CommonResult<List<BpmOALoanRespVO>> getLoanList(@RequestParam("staffId") Long staffId) {
PageResult<BpmOALoanDO> loanList = loanService.getListByStaffId(pageReqVO); List<BpmOALoanDO> loanList = loanService.getListByStaffId(staffId);
PageResult<BpmOALoanRespVO> respVOS = BeanUtils.toBean(loanList, BpmOALoanRespVO.class); List<BpmOALoanRespVO> respVOS = BeanUtils.toBean(loanList, BpmOALoanRespVO.class);
if (CollUtil.isNotEmpty(respVOS.getList())) { if (CollUtil.isNotEmpty(respVOS)) {
// 获取支付信息 // 获取支付信息
List<String> processInstanceIds = convertList(loanList.getList(), BpmOALoanDO::getProcessInstanceId); List<String> processInstanceIds = convertList(loanList, BpmOALoanDO::getProcessInstanceId);
Map<String, FinancialPaymentDO> financialPayments = convertMap(financialPaymentService.getFinancialPaymentList(processInstanceIds), FinancialPaymentDO::getProcessInstanceId); Map<String, FinancialPaymentDO> financialPayments = convertMap(financialPaymentService.getFinancialPaymentList(processInstanceIds), FinancialPaymentDO::getProcessInstanceId);
// 获取申请人信息 // 获取申请人信息
Set<Long> userIds = convertSet(loanList.getList(), BpmOALoanDO::getUserId); Set<Long> userIds = convertSet(loanList, BpmOALoanDO::getUserId);
Map<Long, AdminUserRespDTO> userMap = userApi.getUserMap(userIds); Map<Long, AdminUserRespDTO> userMap = userApi.getUserMap(userIds);
// 获取借支人信息 // 获取借支人信息
Set<Long> loanUserIds = convertSet(loanList.getList(), BpmOALoanDO::getSfUserId); Set<Long> loanUserIds = convertSet(loanList, BpmOALoanDO::getSfUserId);
Map<Long, StaffDTO> loanUserMap = convertMap(staffApi.getStaffList(loanUserIds).getCheckedData(), StaffDTO::getId); Map<Long, StaffDTO> loanUserMap = convertMap(staffApi.getStaffList(loanUserIds).getCheckedData(), StaffDTO::getId);
// 获取工厂信息 // 获取工厂信息
Set<Long> deptIds = convertSet(loanList.getList(), BpmOALoanDO::getFactoryId); Set<Long> deptIds = convertSet(loanList, BpmOALoanDO::getFactoryId);
Map<Long, FactoryInfoDTO> factoryMap = factoryInfoApi.getFactoryMap(deptIds); Map<Long, FactoryInfoDTO> factoryMap = factoryInfoApi.getFactoryMap(deptIds);
respVOS.getList().forEach(item -> { respVOS.forEach(item -> {
// 设置申请人名称 // 设置申请人名称
item.setUserName(userMap.get(item.getUserId()).getNickname()); item.setUserName(userMap.get(item.getUserId()).getNickname());
// 设置借支用户名称 // 设置借支用户名称
@ -182,13 +180,4 @@ public class BpmOALoanController {
return success(respVOS); return success(respVOS);
} }
@GetMapping("/get-return-list")
@Operation(summary = "获得指定用户的还款列表")
public CommonResult<PageResult<BpmOAReturnVO>> getReturnList(BpmOALoanPageReqVO pageReqVO) {
PageResult<BpmOAReturnVO> respVOS = loanService.getReturnList(pageReqVO);
return success(respVOS);
}
} }

View File

@ -1,6 +1,5 @@
package cn.iocoder.yudao.module.bpm.controller.admin.oa; package cn.iocoder.yudao.module.bpm.controller.admin.oa;
import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
@ -11,8 +10,7 @@ import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.procurepay.BpmOAProcur
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAProcureDO; 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.BpmOAProcurePayDO;
import cn.iocoder.yudao.module.bpm.service.oa.BpmOAProcurePayService; import cn.iocoder.yudao.module.bpm.service.oa.BpmOAProcurePayService;
import cn.iocoder.yudao.module.system.api.project.ProjectApi; import cn.iocoder.yudao.module.bpm.service.oa.BpmOAProcureService;
import cn.iocoder.yudao.module.system.api.project.dto.ProjectDTO;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
@ -22,12 +20,8 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.validation.Valid; import javax.validation.Valid;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Set;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
@Tag(name = "管理后台 - 采购支付") @Tag(name = "管理后台 - 采购支付")
@RestController @RestController
@ -38,7 +32,7 @@ public class BpmOAProcurePayController {
@Resource @Resource
private BpmOAProcurePayService oAProcurePayService; private BpmOAProcurePayService oAProcurePayService;
@Resource @Resource
private ProjectApi projectApi; private BpmOAProcureService oaProcureService;
@PostMapping("/create") @PostMapping("/create")
@Operation(summary = "创建采购支付") @Operation(summary = "创建采购支付")
@ -86,18 +80,7 @@ public class BpmOAProcurePayController {
@Operation(summary = "获取可用采购单列表") @Operation(summary = "获取可用采购单列表")
public CommonResult<List<BpmOAProcureRespVO>> getAvailablePurchaseOrders(@RequestParam(name = "type", required = false) Integer type) { public CommonResult<List<BpmOAProcureRespVO>> getAvailablePurchaseOrders(@RequestParam(name = "type", required = false) Integer type) {
List<BpmOAProcureDO> list = oAProcurePayService.getAvailablePurchaseOrders(type); List<BpmOAProcureDO> list = oAProcurePayService.getAvailablePurchaseOrders(type);
List<BpmOAProcureRespVO> respVOS = BeanUtils.toBean(list, BpmOAProcureRespVO.class); return success(BeanUtils.toBean(list, BpmOAProcureRespVO.class));
if (CollUtil.isNotEmpty(respVOS)) {
// 获取项目编号列表
Set<String> projectNo = convertSet(respVOS, BpmOAProcureRespVO::getProjectNo);
List<ProjectDTO> projectList = projectApi.getProjectList(projectNo).getCheckedData();
Map<String, ProjectDTO> projectMap = convertMap(projectList, ProjectDTO::getProjectNo);
respVOS.forEach(respVO -> {
respVO.setProjectName(projectMap.get(respVO.getProjectNo()) != null ? projectMap.get(respVO.getProjectNo()).getName() : "");
});
}
return success(respVOS);
} }
@GetMapping("/getByProcessInstanceId") @GetMapping("/getByProcessInstanceId")

View File

@ -5,7 +5,6 @@ import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.reimbursement.BpmOARei
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.reimbursement.BpmOAReimbursementRespVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.reimbursement.BpmOAReimbursementRespVO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAReimbursementDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAReimbursementDO;
import cn.iocoder.yudao.module.bpm.service.oa.BpmOAReimbursementService; import cn.iocoder.yudao.module.bpm.service.oa.BpmOAReimbursementService;
import cn.iocoder.yudao.module.system.api.dept.DeptApi;
import cn.iocoder.yudao.module.system.api.project.ProjectApi; import cn.iocoder.yudao.module.system.api.project.ProjectApi;
import cn.iocoder.yudao.module.system.api.project.dto.ProjectDTO; import cn.iocoder.yudao.module.system.api.project.dto.ProjectDTO;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
@ -38,9 +37,6 @@ public class BpmOAReimbursementController {
@Resource @Resource
private ProjectApi projectApi; private ProjectApi projectApi;
@Resource
private DeptApi deptApi;
@PostMapping("/create") @PostMapping("/create")
// @PreAuthorize("@ss.hasPermission('bpm:oa-reimbursement:create')") // @PreAuthorize("@ss.hasPermission('bpm:oa-reimbursement:create')")
@Operation(summary = "创建请求申请") @Operation(summary = "创建请求申请")
@ -56,16 +52,10 @@ public class BpmOAReimbursementController {
BpmOAReimbursementDO reimbursement = service.getReimbursement(id); BpmOAReimbursementDO reimbursement = service.getReimbursement(id);
BpmOAReimbursementRespVO respVO = service.convert(reimbursement); BpmOAReimbursementRespVO respVO = service.convert(reimbursement);
if (respVO != null) { if (respVO != null && StringUtil.isNotEmpty(respVO.getProjectNo())) {
if (StringUtil.isNotEmpty(respVO.getProjectNo())) { // 设置项目名称
// 设置项目名称 ProjectDTO projectDTO = projectApi.getProject(respVO.getProjectNo()).getCheckedData();
ProjectDTO projectDTO = projectApi.getProject(respVO.getProjectNo()).getCheckedData(); respVO.setProjectName(projectDTO.getName());
respVO.setProjectName(projectDTO.getName());
}
if (respVO.getPaymentCompany() != null) {
// 设置付款公司名称
respVO.setPaymentCompanyName(deptApi.getDept(respVO.getPaymentCompany()).getCheckedData().getName());
}
} }
return success(respVO); return success(respVO);
} }
@ -92,16 +82,10 @@ public class BpmOAReimbursementController {
BpmOAReimbursementDO reimbursement = service.getByProcessInstanceId(processInstanceId); BpmOAReimbursementDO reimbursement = service.getByProcessInstanceId(processInstanceId);
BpmOAReimbursementRespVO respVO = service.convert(reimbursement); BpmOAReimbursementRespVO respVO = service.convert(reimbursement);
if (respVO != null) { if (respVO != null && StringUtil.isNotEmpty(respVO.getProjectNo())) {
if (StringUtil.isNotEmpty(respVO.getProjectNo())) { // 设置项目名称
// 设置项目名称 ProjectDTO projectDTO = projectApi.getProject(respVO.getProjectNo()).getCheckedData();
ProjectDTO projectDTO = projectApi.getProject(respVO.getProjectNo()).getCheckedData(); respVO.setProjectName(projectDTO.getName());
respVO.setProjectName(projectDTO.getName());
}
if (respVO.getPaymentCompany() != null) {
// 设置付款公司名称
respVO.setPaymentCompanyName(deptApi.getDept(respVO.getPaymentCompany()).getCheckedData().getName());
}
} }
return success(respVO); return success(respVO);
} }

View File

@ -1,13 +1,11 @@
package cn.iocoder.yudao.module.bpm.controller.admin.oa; package cn.iocoder.yudao.module.bpm.controller.admin.oa;
import cn.iocoder.yudao.framework.common.pojo.CommonResult; 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.salary.BpmOASalaryCreateReqVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.salary.BpmOASalaryCreateReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.salary.BpmOASalaryRespVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.salary.BpmOASalaryRespVO;
import cn.iocoder.yudao.module.bpm.convert.oa.BpmOASalaryConvert;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOASalaryDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOASalaryDO;
import cn.iocoder.yudao.module.bpm.service.oa.BpmOASalaryService; import cn.iocoder.yudao.module.bpm.service.oa.BpmOASalaryService;
import cn.iocoder.yudao.module.smartfactory.api.factoryInfo.FactoryInfoApi;
import cn.iocoder.yudao.module.smartfactory.api.factoryInfo.dto.FactoryInfoDTO;
import cn.iocoder.yudao.module.system.api.dept.DeptApi; import cn.iocoder.yudao.module.system.api.dept.DeptApi;
import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
@ -18,10 +16,6 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.validation.Valid; import javax.validation.Valid;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
@ -44,17 +38,14 @@ public class BpmOASalaryController {
@Resource @Resource
private DeptApi deptApi; private DeptApi deptApi;
@Resource
private FactoryInfoApi factoryInfoApi;
@PostMapping("/create") @PostMapping("/create")
@Operation(summary = "创建请求申请") @Operation(summary = "创建请求申请")
public CommonResult<Long> createSalary(@Valid @RequestBody BpmOASalaryCreateReqVO createReqVO) { public CommonResult<Long> createSalary(@Valid @RequestBody BpmOASalaryCreateReqVO createReqVO) {
// if (createReqVO.getFactoryId() != null) { if (createReqVO.getFactoryId() != null) {
// DeptRespDTO dto = deptApi.getDeptByFactoryId(createReqVO.getFactoryId()).getCheckedData(); DeptRespDTO dto = deptApi.getDeptByFactoryId(createReqVO.getFactoryId()).getCheckedData();
// createReqVO.setCompanyDeptId(dto.getId()); createReqVO.setCompanyDeptId(dto.getId());
// } }
return success(salaryService.createSalary(getLoginUserId(), createReqVO)); return success(salaryService.createSalary(getLoginUserId(), createReqVO));
} }
@ -68,24 +59,12 @@ public class BpmOASalaryController {
return success(new BpmOASalaryRespVO()); return success(new BpmOASalaryRespVO());
} }
BpmOASalaryRespVO respVO = BeanUtils.toBean(salary, BpmOASalaryRespVO.class); // 获取部门详情
if (salary.getCompanyDeptId() != null) { DeptRespDTO dto = getDept(salary.getCompanyDeptId());
// 获取部门详情
DeptRespDTO dto = getDept(salary.getCompanyDeptId());
respVO.setCompanyName(dto.getName()); BpmOASalaryRespVO respVO = BpmOASalaryConvert.INSTANCE.convert(salary)
}else { .setCompanyName(dto.getName())
// 获取工厂信息 .setFactoryId(dto.getFactoryId());
Set<Long> factoryIds = salary.getFactoryDeptId();
List<FactoryInfoDTO> factoryInfoDTOS = factoryInfoApi.getFactoryInfoList(factoryIds).getCheckedData();
String factoryNames = factoryInfoDTOS.stream()
.map(FactoryInfoDTO::getShortName)
.filter(Objects::nonNull)
.collect(Collectors.joining(","));
respVO.setCompanyName(factoryNames);
}
return success(respVO); return success(respVO);
} }
@ -97,28 +76,12 @@ public class BpmOASalaryController {
BpmOASalaryDO salary = salaryService.getByProcessInstanceId(processInstanceId); BpmOASalaryDO salary = salaryService.getByProcessInstanceId(processInstanceId);
if (salary == null) { // 获取部门详情
return success(new BpmOASalaryRespVO()); DeptRespDTO dto = getDept(salary.getCompanyDeptId());
}
BpmOASalaryRespVO respVO = BeanUtils.toBean(salary, BpmOASalaryRespVO.class); BpmOASalaryRespVO respVO = BpmOASalaryConvert.INSTANCE.convert(salary)
if (salary.getCompanyDeptId() != null) { .setCompanyName(dto.getName())
// 获取部门详情 .setFactoryId(dto.getFactoryId());
DeptRespDTO dto = getDept(salary.getCompanyDeptId());
respVO.setCompanyName(dto.getName());
}else {
// 获取工厂信息
Set<Long> factoryIds = salary.getFactoryDeptId();
List<FactoryInfoDTO> factoryInfoDTOS = factoryInfoApi.getFactoryInfoList(factoryIds).getCheckedData();
String factoryNames = factoryInfoDTOS.stream()
.map(FactoryInfoDTO::getShortName)
.filter(Objects::nonNull)
.collect(Collectors.joining(","));
respVO.setCompanyName(factoryNames);
}
return success(respVO); return success(respVO);
} }

View File

@ -27,9 +27,6 @@ public class BpmOAExpensesCreateReqVO {
@Schema(description = "开支明细") @Schema(description = "开支明细")
private List<Expenses> expensesItem; private List<Expenses> expensesItem;
@Schema(description = "工厂类型 |1工厂 2公司 ")
private Integer factoryType;
@Schema(description = "报销总金额", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "报销总金额", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "报销总金额不能为空") @NotNull(message = "报销总金额不能为空")
private BigDecimal totalMoney; private BigDecimal totalMoney;

View File

@ -29,8 +29,5 @@ public class BpmOAExpensesPageReqVO extends PageParam {
private Integer costSection; private Integer costSection;
@Schema(description = "审批通过时间") @Schema(description = "审批通过时间")
private String[] endTime; private LocalDateTime[] endTime;
@Schema(description = "收款人姓名")
private String payeeName;
} }

View File

@ -58,10 +58,4 @@ public class BpmOAExpensesPageRespVO extends BpmOABaseRespVO {
@Schema(description = "费用明细") @Schema(description = "费用明细")
private String detail; private String detail;
@Schema(description = "审批时间")
private String endTime;
@Schema(description = "支付状态 | 0未支付 1已支付")
private Integer status;
} }

View File

@ -34,9 +34,6 @@ public class BpmOAExpensesRespVO extends BpmOABaseRespVO {
@Schema(description = "开支明细") @Schema(description = "开支明细")
private List<Expenses> expensesItem; private List<Expenses> expensesItem;
@Schema(description = "工厂类型 | 1公司 工厂")
private Integer factoryType;
@Schema(description = "报销总金额") @Schema(description = "报销总金额")
private BigDecimal totalMoney; private BigDecimal totalMoney;

View File

@ -1,20 +0,0 @@
package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
@Schema(description = "管理后台 - 生产开支金额统计 Response VO")
@Data
public class BpmOAExpensesTotal {
@Schema(description = "已付款金额")
private BigDecimal amountPaid;
@Schema(description = "应付款金额")
private BigDecimal payableAmount;
@Schema(description = "剩余付款金额")
private BigDecimal remainingPayable;
}

View File

@ -32,21 +32,10 @@ public class BpmOALoanCreateReqVO {
@NotNull(message = "借支用户不能为空") @NotNull(message = "借支用户不能为空")
private Long sfUserId; private Long sfUserId;
@Schema(description = "借支类型 | 1工资 2费用", example = "1")
@NotNull(message = "借支类型不能为空")
private Integer loanType;
@Schema(description = "抵扣工资月份 | yyyy-MM")
private String returnDate;
@Schema(description = "借支金额", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "借支金额", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "借支金额不能为空") @NotNull(message = "借支金额不能为空")
private BigDecimal totalMoney; private BigDecimal totalMoney;
@Schema(description = "借支事由", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "借支事由不能为空")
private String reason;
@Schema(description = "流程实例编号") @Schema(description = "流程实例编号")
private String processInstanceId; private String processInstanceId;

View File

@ -1,25 +0,0 @@
package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.loan;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 借支申请分页 Request VO")
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class BpmOALoanPageReqVO extends PageParam {
@Schema(description = "员工ID")
private Long staffId;
@Schema(description = "借支类型")
private Integer loanType;
}

View File

@ -7,7 +7,6 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.ToString; import lombok.ToString;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;
@ -50,18 +49,9 @@ public class BpmOALoanRespVO extends BpmOABaseRespVO {
@Schema(description = "借支用户名称") @Schema(description = "借支用户名称")
private String sfUserName; private String sfUserName;
@Schema(description = "借支类型 | 1工资 2费用", example = "1")
private Integer loanType;
@Schema(description = "抵扣工资月份 | yyyy-MM")
private String returnDate;
@Schema(description = "借支金额") @Schema(description = "借支金额")
private BigDecimal totalMoney; private BigDecimal totalMoney;
@Schema(description = "借支事由")
private String reason;
@Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED)
private List<UploadUserFile> fileItems; private List<UploadUserFile> fileItems;

View File

@ -1,32 +0,0 @@
package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.loan;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
@Schema(description = "管理后台 - 借支申请还款 Response VO")
@Data
public class BpmOAReturnVO {
@Schema(description = "员工ID")
private Long staffId;
@Schema(description = "员工名称")
private String staffName;
@Schema(description = "工厂ID")
private Long factoryId;
@Schema(description = "工厂名称")
private String factoryName;
@Schema(description = "还款月份")
private String month;
@Schema(description = "还款金额")
private BigDecimal repaymentAmount;
@Schema(description = "还款类型 | 1开支抵扣 2工资还款")
private Integer type;
}

View File

@ -47,7 +47,7 @@ public class BpmOAPaymentCreateReqVO {
private BigDecimal totalAmount; private BigDecimal totalAmount;
@Schema(description = "付款比例 | 针对分期付款情况", requiredMode = Schema.RequiredMode.NOT_REQUIRED) @Schema(description = "付款比例 | 针对分期付款情况", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
private BigDecimal paymentRatio; private Integer paymentRatio;
@Schema(description = "付款金额", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "付款金额", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "付款金额不能为空") @NotNull(message = "付款金额不能为空")

View File

@ -26,7 +26,4 @@ public class BpmOAPaymentPageReqVO extends PageParam {
@Schema(description = "创建时间") @Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private String[] createTime; private String[] createTime;
@Schema(description = "申请人用户编号")
private Long userId;
} }

View File

@ -68,7 +68,7 @@ public class BpmOAPaymentRespVO extends BpmOABaseRespVO {
private BigDecimal totalAmount; private BigDecimal totalAmount;
@Schema(description = "付款比例 | 针对分期付款情况") @Schema(description = "付款比例 | 针对分期付款情况")
private BigDecimal paymentRatio; private Integer paymentRatio;
@Schema(description = "付款金额") @Schema(description = "付款金额")
private BigDecimal amount; private BigDecimal amount;
@ -92,10 +92,7 @@ public class BpmOAPaymentRespVO extends BpmOABaseRespVO {
private Long parentId; private Long parentId;
@Schema(description = "累计付款比列") @Schema(description = "累计付款比列")
private BigDecimal ratio; private Integer ratio;
@Schema(description = "累计付款金额")
private BigDecimal paymentAmount;
@Schema(description = "上传文件") @Schema(description = "上传文件")
private List<UploadUserFile> fileItems; private List<UploadUserFile> fileItems;

View File

@ -24,9 +24,6 @@ public class BpmOAReimbursementCreateReqVO {
@Schema(description = "开户行信息") @Schema(description = "开户行信息")
private String bankName; private String bankName;
@Schema(description = "付款公司")
private Long paymentCompany;
@Schema(description = "报销项目明细", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "报销项目明细", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "报销项目不能为空") @NotNull(message = "报销项目不能为空")
private List<Reimbursement> reimbursements; private List<Reimbursement> reimbursements;
@ -52,9 +49,6 @@ public class BpmOAReimbursementCreateReqVO {
@Schema(description = "备用金差额", requiredMode = Schema.RequiredMode.NOT_REQUIRED) @Schema(description = "备用金差额", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
private BigDecimal difference ; private BigDecimal difference ;
@Schema(description = "业务表编号")
private Long objectId;
@Schema(description = "报销发票总数", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "报销发票总数", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "报销发票总数不能为空") @NotNull(message = "报销发票总数不能为空")
private Integer totalQuantity ; private Integer totalQuantity ;

View File

@ -27,12 +27,6 @@ public class BpmOAReimbursementRespVO extends BpmOABaseRespVO {
@Schema(description = "收款人卡号") @Schema(description = "收款人卡号")
private String bankNo; private String bankNo;
@Schema(description = "付款公司")
private Long paymentCompany;
@Schema(description = "付款公司名称")
private String paymentCompanyName;
@Schema(description = "报销项目明细", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "报销项目明细", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "报销项目不能为空") @NotNull(message = "报销项目不能为空")
private List<ReimbursementDTO> reimbursements; private List<ReimbursementDTO> reimbursements;

View File

@ -38,7 +38,4 @@ public class Reimbursement {
@Schema(description = "采购计划编号", example = "1") @Schema(description = "采购计划编号", example = "1")
private Long procureId; private Long procureId;
@Schema(description = "业务表编号")
private Long objectId;
} }

View File

@ -36,7 +36,4 @@ public class ReimbursementDTO {
@Schema(description = "采购计划编号", example = "1") @Schema(description = "采购计划编号", example = "1")
private Long procureId; private Long procureId;
@Schema(description = "业务表编号")
private Long objectId;
} }

View File

@ -10,7 +10,6 @@ import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;
import java.util.Set;
/** /**
* 薪资付款申请 创建 Request VO * 薪资付款申请 创建 Request VO
@ -31,15 +30,11 @@ public class BpmOASalaryCreateReqVO {
@DateTimeFormat(pattern = "yyyy-MM") @DateTimeFormat(pattern = "yyyy-MM")
private String salaryDate; private String salaryDate;
@Schema(description = "公司类型 | 1公司 2工厂", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "公司类型不能为空")
private Integer deptType;
@Schema(description = "付款公司") @Schema(description = "付款公司")
private Long companyDeptId; private Long companyDeptId;
@Schema(description = "付款工厂的部门编号集合") @Schema(description = "付款工厂编号")
private Set<Long> factoryDeptId; private Long factoryId;
@Schema(description = "付款总额", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "付款总额", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "付款总额不能为空") @NotNull(message = "付款总额不能为空")
@ -52,9 +47,6 @@ public class BpmOASalaryCreateReqVO {
@Schema(description = "支付对象") @Schema(description = "支付对象")
private String paymentRecipient; private String paymentRecipient;
@Schema(description = "薪资主体明细")
private List<SalarySubjectItemsVO> salarySubjectItems;
@Schema(description = "流程实例编号") @Schema(description = "流程实例编号")
private String processInstanceId; private String processInstanceId;
@ -64,7 +56,4 @@ public class BpmOASalaryCreateReqVO {
@Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "附件不能为空") @NotNull(message = "附件不能为空")
private List<UploadUserFile> fileItems; private List<UploadUserFile> fileItems;
@Schema(description = "员工薪资id集合")
private Set<Long> staffSalaryIds;
} }

View File

@ -8,9 +8,9 @@ import lombok.EqualsAndHashCode;
import lombok.ToString; import lombok.ToString;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;
import java.util.Set;
/** /**
* @author 符溶馨 * @author 符溶馨
@ -28,21 +28,12 @@ public class BpmOASalaryRespVO extends BpmOABaseRespVO {
@DateTimeFormat(pattern = "yyyy-MM") @DateTimeFormat(pattern = "yyyy-MM")
private String salaryDate; private String salaryDate;
@Schema(description = "公司类型 | 1公司 2工厂")
private Integer deptType;
@Schema(description = "付款公司") @Schema(description = "付款公司")
private Long companyDeptId; private Long companyDeptId;
@Schema(description = "付款公司名称") @Schema(description = "付款公司名称")
private String companyName; private String companyName;
@Schema(description = "付款工厂的部门编号集合")
private Set<Long> factoryDeptId;
@Schema(description = "付款工厂名称")
private String factoryName;
@Schema(description = "付款工厂") @Schema(description = "付款工厂")
private Long FactoryId; private Long FactoryId;
@ -55,9 +46,6 @@ public class BpmOASalaryRespVO extends BpmOABaseRespVO {
@Schema(description = "支付对象") @Schema(description = "支付对象")
private String paymentRecipient; private String paymentRecipient;
@Schema(description = "薪资主体明细")
private List<SalarySubjectItemsVO> salarySubjectItems;
@Schema(description = "流程实例编号") @Schema(description = "流程实例编号")
private String processInstanceId; private String processInstanceId;
@ -66,7 +54,4 @@ public class BpmOASalaryRespVO extends BpmOABaseRespVO {
@Schema(description = "上传文件") @Schema(description = "上传文件")
private List<UploadUserFile> fileItems; private List<UploadUserFile> fileItems;
@Schema(description = "员工薪资id集合")
private Set<Long> staffSalaryIds;
} }

View File

@ -1,17 +0,0 @@
package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.salary;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
@Schema(description = "管理后台 - 薪资付款申请创建 Request VO")
@Data
public class SalarySubjectItemsVO {
@Schema(description = "薪资主体编号")
private Integer salarySubjectId;
@Schema(description = "金额")
private BigDecimal amount;
}

View File

@ -39,6 +39,4 @@ public class BpmTaskDonePageReqVO extends PageParam {
@Schema(description = "部门编号") @Schema(description = "部门编号")
private Long userId; private Long userId;
@Schema(description = "任务状态")
private Integer result ;
} }

View File

@ -24,10 +24,6 @@ public class BpmTaskDonePageRespVO {
@Schema(description = "任务结果-参见 bpm_process_instance_result", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") @Schema(description = "任务结果-参见 bpm_process_instance_result", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
private Integer result; private Integer result;
@Schema(description = "任务结果-参见 bpm_process_instance_status", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
private Integer status;
@Schema(description = "审批建议", requiredMode = Schema.RequiredMode.REQUIRED, example = "不请假了!") @Schema(description = "审批建议", requiredMode = Schema.RequiredMode.REQUIRED, example = "不请假了!")
private String reason; private String reason;

View File

@ -7,7 +7,6 @@ import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpenses
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.Expenses; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.Expenses;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAExpensesDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAExpensesDO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAExpensesItemDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAExpensesItemDO;
import cn.iocoder.yudao.module.smartfactory.api.factoryInfo.dto.FactoryInfoDTO;
import cn.iocoder.yudao.module.system.api.bank.dto.BankRespDTO; import cn.iocoder.yudao.module.system.api.bank.dto.BankRespDTO;
import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
@ -31,7 +30,7 @@ public interface BpmOAExpensesConvert {
BpmOAExpensesRespVO convert(BpmOAExpensesDO bean); BpmOAExpensesRespVO convert(BpmOAExpensesDO bean);
default BpmOAExpensesRespVO convert1(BpmOAExpensesDO expensesDO, List<BpmOAExpensesItemDO> expensesItemDOs, default BpmOAExpensesRespVO convert1(BpmOAExpensesDO expensesDO, List<BpmOAExpensesItemDO> expensesItemDOs,
Map<Long, FactoryInfoDTO> deptMap, BankRespDTO bankRespDTO) { Map<Long, DeptRespDTO> deptMap, BankRespDTO bankRespDTO) {
BpmOAExpensesRespVO respVO = BeanUtils.toBean(expensesDO, BpmOAExpensesRespVO.class); BpmOAExpensesRespVO respVO = BeanUtils.toBean(expensesDO, BpmOAExpensesRespVO.class);
@ -51,15 +50,15 @@ public interface BpmOAExpensesConvert {
return respVO; return respVO;
} }
default List<Expenses> convertList(List<Expenses> list, Map<Long, FactoryInfoDTO> deptMap) { default List<Expenses> convertList(List<Expenses> list, Map<Long, DeptRespDTO> deptMap) {
return CollectionUtils.convertList(list, expenses -> convert(expenses, deptMap.get(expenses.getDeptId()))); return CollectionUtils.convertList(list, expenses -> convert(expenses, deptMap.get(expenses.getDeptId())));
} }
default Expenses convert(Expenses expensesItem, FactoryInfoDTO dept) { default Expenses convert(Expenses expensesItem, DeptRespDTO dept) {
if (dept != null) { if (dept != null) {
expensesItem.setDeptName(dept.getShortName()); expensesItem.setDeptName(dept.getName());
} }
return expensesItem; return expensesItem;

View File

@ -55,7 +55,7 @@ public class FinancialPaymentDO extends BaseDO {
*/ */
private String reason; private String reason;
/** /**
* 流程类型 1现金支出 2备用金 3采购付款 4报销 5付款申请 6薪资付款 7借支申请 8供应商采购付款 9开支日报 * 流程类型 1现金支出 2备用金 3采购付款 4报销 5付款申请 6薪资付款 7借支申请 8供应商采购付款
*/ */
private Integer type; private Integer type;
/** /**
@ -83,19 +83,6 @@ public class FinancialPaymentDO extends BaseDO {
* 流程结束时间 * 流程结束时间
*/ */
private LocalDateTime endTime; private LocalDateTime endTime;
/**
* 收款人名称
*/
private String recipientName;
/**
* 付款公司编号
*/
private Long companyId;
/**
* 公司工厂编号
*/
private Long companyFactoryId;
/** /**
* 名称 * 名称
@ -112,9 +99,4 @@ public class FinancialPaymentDO extends BaseDO {
*/ */
@TableField(exist = false) @TableField(exist = false)
private String receiveUserNickName; private String receiveUserNickName;
/**
* 付款公司名称
*/
@TableField(exist = false)
private String companyName;
} }

View File

@ -7,7 +7,6 @@ import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import liquibase.pro.packaged.I;
import lombok.*; import lombok.*;
import java.math.BigDecimal; import java.math.BigDecimal;
@ -45,26 +44,11 @@ public class BpmOAExpensesDO extends BaseDO {
*/ */
private Long bankId; private Long bankId;
/**
* 工厂类型 | 1公司 2工厂
*/
private Integer factoryType;
/** /**
* 支出总金额 * 支出总金额
*/ */
private BigDecimal totalMoney; private BigDecimal totalMoney;
/**
* 支付金额
*/
private BigDecimal amountPaid;
/**
* 支付状态 | 0未支付 1已支付 2已抵扣 3未抵扣完
*/
private Integer status;
/** /**
* 申请结果 * 申请结果
* 枚举 {@link BpmProcessInstanceResultEnum} * 枚举 {@link BpmProcessInstanceResultEnum}

View File

@ -54,31 +54,11 @@ public class BpmOALoanDO extends BaseDO {
*/ */
private Long sfUserId; private Long sfUserId;
/**
* 借支类型 | 1工资 2费用
*/
private Integer loanType;
/**
* 抵扣工资月份 | yyyy-MM
*/
private String returnDate;
/** /**
* 借出金额 * 借出金额
*/ */
private BigDecimal totalMoney; private BigDecimal totalMoney;
/**
* 还款金额
*/
private BigDecimal returnAmount;
/**
* 借支原因
*/
private String reason;
/** /**
* 申请结果 * 申请结果
* 枚举 {@link BpmProcessInstanceResultEnum} * 枚举 {@link BpmProcessInstanceResultEnum}

View File

@ -78,9 +78,9 @@ public class BpmOAPaymentDO extends BaseDO {
private Long bankId; private Long bankId;
/** /**
* 付款方式 | 1分批付款 3全额付款 4指定金额付款 * 付款方式 | 1预付款 2分期付款 3全额付款
*/ */
private BigDecimal paymentMethod; private Integer paymentMethod;
/** /**
* 付款总额 | 针对预付款分期付款情况 * 付款总额 | 针对预付款分期付款情况

View File

@ -1,7 +1,8 @@
package cn.iocoder.yudao.module.bpm.dal.dataobject.oa; package cn.iocoder.yudao.module.bpm.dal.dataobject.oa;
import cn.iocoder.yudao.framework.common.pojo.UploadUserFile;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.reimbursement.Reimbursement;
import cn.iocoder.yudao.framework.common.pojo.UploadUserFile;
import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
@ -64,15 +65,10 @@ public class BpmOAReimbursementDO extends BaseDO {
private String bankName; private String bankName;
/** /**
* 付款公司编号 * 报销明细数据JSON
*/ */
private Long paymentCompany; @TableField(typeHandler = JacksonTypeHandler.class)
private List<Reimbursement> reimbursements;
// /**
// * 报销明细数据JSON
// */
// @TableField(typeHandler = JacksonTypeHandler.class)
// private List<Reimbursement> reimbursements;
/** /**
* 总报销金额 * 总报销金额
*/ */

View File

@ -68,9 +68,4 @@ public class BpmOAReimbursementItemDO extends BaseDO {
* 采购申请编号 * 采购申请编号
*/ */
private Long procureId; private Long procureId;
/**
* 业务表编号
*/
private Long objectId;
} }

View File

@ -2,8 +2,6 @@ package cn.iocoder.yudao.module.bpm.dal.dataobject.oa;
import cn.iocoder.yudao.framework.common.pojo.UploadUserFile; import cn.iocoder.yudao.framework.common.pojo.UploadUserFile;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import cn.iocoder.yudao.framework.mybatis.core.type.JsonLongSetTypeHandler;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.salary.SalarySubjectItemsVO;
import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
@ -13,7 +11,6 @@ import lombok.*;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;
import java.util.Set;
/** /**
* OA 薪资付款 DO * OA 薪资付款 DO
@ -52,28 +49,11 @@ public class BpmOASalaryDO extends BaseDO {
*/ */
private String salaryDate; private String salaryDate;
/**
* 公司类型 | 1公司 2工厂
*/
private Integer deptType;
/** /**
* 付款公司 * 付款公司
*/ */
private Long companyDeptId; private Long companyDeptId;
/**
* 付款工厂的部门编号集合
*/
@TableField(typeHandler = JsonLongSetTypeHandler.class)
private Set<Long> factoryDeptId;
/**
* 员工薪资id集合
*/
@TableField(typeHandler = JsonLongSetTypeHandler.class)
private Set<Long> staffSalaryIds;
/** /**
* 付款总额 * 付款总额
*/ */
@ -89,13 +69,6 @@ public class BpmOASalaryDO extends BaseDO {
*/ */
private String paymentRecipient; private String paymentRecipient;
/**
* 薪资主体明细
*/
@TableField(typeHandler = JacksonTypeHandler.class)
private List<SalarySubjectItemsVO> salarySubjectItems;
/** /**
* 薪资付款申请的结果 * 薪资付款申请的结果
* *

View File

@ -6,10 +6,8 @@ import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.evection.BpmOAEvection
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAEvectionDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAEvectionDO;
import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.Arrays; import java.util.Arrays;
import java.util.List;
/** /**
* 出差申请 Mapper * 出差申请 Mapper
@ -28,6 +26,4 @@ public interface BpmOAEvectionMapper extends BaseMapperX<BpmOAEvectionDO> {
.geIfPresent(BpmOAEvectionDO::getEndTime, createReqVO.getStartTime()) .geIfPresent(BpmOAEvectionDO::getEndTime, createReqVO.getStartTime())
.in(BpmOAEvectionDO::getResult, Arrays.asList(BpmProcessInstanceResultEnum.PROCESS.getResult(), BpmProcessInstanceResultEnum.APPROVE.getResult()))); .in(BpmOAEvectionDO::getResult, Arrays.asList(BpmProcessInstanceResultEnum.PROCESS.getResult(), BpmProcessInstanceResultEnum.APPROVE.getResult())));
} }
List<BpmOAEvectionDO> selectEvectionList(@Param("userId") Long userId);
} }

View File

@ -3,7 +3,6 @@ package cn.iocoder.yudao.module.bpm.dal.mysql.oa;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesPageReqVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesPageReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesPageRespVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesPageRespVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesTotal;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAExpensesDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAExpensesDO;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
@ -14,8 +13,4 @@ public interface BpmOAExpensesMapper extends BaseMapperX<BpmOAExpensesDO> {
IPage<BpmOAExpensesPageRespVO> selectExpensesPage(@Param("page") IPage<BpmOAExpensesPageReqVO> page, IPage<BpmOAExpensesPageRespVO> selectExpensesPage(@Param("page") IPage<BpmOAExpensesPageReqVO> page,
@Param("pageReqVO") BpmOAExpensesPageReqVO pageReqVO); @Param("pageReqVO") BpmOAExpensesPageReqVO pageReqVO);
BpmOAExpensesTotal selectTotal(@Param("pageReqVO") BpmOAExpensesPageReqVO pageReqVO);
void oneClickPayment(@Param("month") String month);
} }

View File

@ -1,24 +1,9 @@
package cn.iocoder.yudao.module.bpm.dal.mysql.oa; 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.mapper.BaseMapperX;
import cn.iocoder.yudao.module.bpm.api.oa.vo.loan.BpmOALoanSumDTO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.loan.BpmOALoanPageReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.loan.BpmOAReturnVO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOALoanDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOALoanDO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.Collection;
import java.util.List;
@Mapper @Mapper
public interface BpmOALoanMapper extends BaseMapperX<BpmOALoanDO> { public interface BpmOALoanMapper extends BaseMapperX<BpmOALoanDO> {
List<BpmOALoanSumDTO> selectSumByStaffId(@Param("staffId") Collection<Long> staffId,
@Param("month") String month);
IPage<BpmOAReturnVO> selectReturnList(@Param("pageReqVO") BpmOALoanPageReqVO pageReqVO,
@Param("page") IPage<BpmOAReturnVO> page);
} }

View File

@ -26,7 +26,6 @@ public interface BpmOAPaymentMapper extends BaseMapperX<BpmOAPaymentDO> {
.eq(BpmOAPaymentDO::getIsTickets, 1) .eq(BpmOAPaymentDO::getIsTickets, 1)
.eqIfPresent(BpmOAPaymentDO::getStatus, pageReqVO.getStatus()) .eqIfPresent(BpmOAPaymentDO::getStatus, pageReqVO.getStatus())
.betweenIfPresent(BpmOAPaymentDO::getCreateTime, pageReqVO.getCreateTime()) .betweenIfPresent(BpmOAPaymentDO::getCreateTime, pageReqVO.getCreateTime())
.eqIfPresent(BpmOAPaymentDO::getUserId, pageReqVO.getUserId())
.eq(pageReqVO.getIsMy(), BpmOAPaymentDO::getUserId, userId) .eq(pageReqVO.getIsMy(), BpmOAPaymentDO::getUserId, userId)
.orderByAsc(BpmOAPaymentDO::getStatus) .orderByAsc(BpmOAPaymentDO::getStatus)
.orderByDesc(BpmOAPaymentDO::getId)); .orderByDesc(BpmOAPaymentDO::getId));

View File

@ -93,7 +93,6 @@ public interface BpmTaskExtMapper extends BaseMapperX<BpmTaskExtDO> {
queryWrapperX.selectAs(BpmProcessInstanceExtDO::getStartUserId, BpmTaskDonePageRespVO::getStartUserId); queryWrapperX.selectAs(BpmProcessInstanceExtDO::getStartUserId, BpmTaskDonePageRespVO::getStartUserId);
queryWrapperX.selectAs(BpmProcessInstanceExtDO::getProcessDefinitionId, BpmTaskDonePageRespVO::getProcessDefinitionId); queryWrapperX.selectAs(BpmProcessInstanceExtDO::getProcessDefinitionId, BpmTaskDonePageRespVO::getProcessDefinitionId);
queryWrapperX.selectAs(BpmProcessInstanceExtDO::getCcids, BpmTaskDonePageRespVO::getCcUserIds); queryWrapperX.selectAs(BpmProcessInstanceExtDO::getCcids, BpmTaskDonePageRespVO::getCcUserIds);
queryWrapperX.selectAs(BpmProcessInstanceExtDO::getStatus, BpmTaskDonePageRespVO::getStatus ) ;
queryWrapperX.innerJoin(BpmProcessInstanceExtDO.class, on -> on queryWrapperX.innerJoin(BpmProcessInstanceExtDO.class, on -> on
.eq(BpmTaskExtDO::getProcessInstanceId, BpmProcessInstanceExtDO::getProcessInstanceId) .eq(BpmTaskExtDO::getProcessInstanceId, BpmProcessInstanceExtDO::getProcessInstanceId)
@ -102,10 +101,6 @@ public interface BpmTaskExtMapper extends BaseMapperX<BpmTaskExtDO> {
queryWrapperX.likeRight(BpmProcessInstanceExtDO::getProcessDefinitionId, "oa_"); queryWrapperX.likeRight(BpmProcessInstanceExtDO::getProcessDefinitionId, "oa_");
queryWrapperX.eq(BpmTaskExtDO::getAssigneeUserId, userId); queryWrapperX.eq(BpmTaskExtDO::getAssigneeUserId, userId);
queryWrapperX.ne(BpmTaskExtDO::getReason, BpmConstants.AUTO_APPRAVAL); queryWrapperX.ne(BpmTaskExtDO::getReason, BpmConstants.AUTO_APPRAVAL);
// queryWrapperX.ne(BpmTaskExtDO::getResult,4); //还未开始审批发起人主动撤销的流程不显示
if (pageVO.getResult() != null) {
queryWrapperX.eq(BpmTaskExtDO::getResult,pageVO.getResult());
}
queryWrapperX.betweenIfPresent(BpmTaskExtDO::getCreateTime, pageVO.getCreateTime()); queryWrapperX.betweenIfPresent(BpmTaskExtDO::getCreateTime, pageVO.getCreateTime());
queryWrapperX.orderByDesc(BpmTaskExtDO::getEndTime); queryWrapperX.orderByDesc(BpmTaskExtDO::getEndTime);

View File

@ -58,12 +58,6 @@ public class BpmTaskEntryLeaderScript implements BpmTaskAssignScript {
//根据部门ID 获取部门信息 //根据部门ID 获取部门信息
DeptRespDTO dept = deptApi.getDept(deptId).getCheckedData(); DeptRespDTO dept = deptApi.getDept(deptId).getCheckedData();
// 获取4级部门信息
if (dept.getLevel() > 4) {
String[] level = dept.getFlag().split("-");
dept = deptApi.getDept(Long.valueOf(level[4])).getCheckedData();
}
return dept != null && dept.getLeaderUserId() != null ? asSet(dept.getLeaderUserId()) : emptySet(); return dept != null && dept.getLeaderUserId() != null ? asSet(dept.getLeaderUserId()) : emptySet();
} }

View File

@ -19,7 +19,6 @@ import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
@ -94,14 +93,9 @@ public class BpmTaskFactoryLeaderScript extends BpmTaskAssignLeaderAbstractScrip
if (salaryDO != null) { if (salaryDO != null) {
// 获取申请部门信息 // 获取申请部门信息
DeptRespDTO deptRespDTO = null; DeptRespDTO deptRespDTO = deptApi.getDept(salaryDO.getCompanyDeptId()).getCheckedData();
if (salaryDO.getCompanyDeptId() != null) {
deptRespDTO = deptApi.getDept(salaryDO.getCompanyDeptId()).getCheckedData();
}else if (CollUtil.isNotEmpty(salaryDO.getFactoryDeptId())) {
deptRespDTO = deptApi.getDeptByFactoryId(new ArrayList<>(salaryDO.getFactoryDeptId()).get(0)).getCheckedData();
}
// 判断是否是属于工厂部门 // 判断是否是属于工厂部门
if (deptRespDTO != null) { if (deptRespDTO != null && deptRespDTO.getFactoryId() != null) {
dept = deptApi.getDept(deptRespDTO.getParentId()).getCheckedData(); dept = deptApi.getDept(deptRespDTO.getParentId()).getCheckedData();
} }
} }

View File

@ -11,7 +11,6 @@ import cn.iocoder.yudao.module.product.api.storeproduct.StoreProductApi;
import cn.iocoder.yudao.module.product.api.storeproductattrvalue.StoreProductAttrValueApi; import cn.iocoder.yudao.module.product.api.storeproductattrvalue.StoreProductAttrValueApi;
import cn.iocoder.yudao.module.smartfactory.api.factoryInfo.FactoryInfoApi; import cn.iocoder.yudao.module.smartfactory.api.factoryInfo.FactoryInfoApi;
import cn.iocoder.yudao.module.smartfactory.api.staff.StaffApi; import cn.iocoder.yudao.module.smartfactory.api.staff.StaffApi;
import cn.iocoder.yudao.module.smartfactory.api.staffSalary.StaffSalaryApi;
import cn.iocoder.yudao.module.system.api.assetreceive.AssetReceiveApi; import cn.iocoder.yudao.module.system.api.assetreceive.AssetReceiveApi;
import cn.iocoder.yudao.module.system.api.assets.AssetsApi; import cn.iocoder.yudao.module.system.api.assets.AssetsApi;
import cn.iocoder.yudao.module.system.api.assets.AssetsTypeApi; import cn.iocoder.yudao.module.system.api.assets.AssetsTypeApi;
@ -46,8 +45,7 @@ import org.springframework.context.annotation.Configuration;
SubscribeMessageSendApi.class, SocialClientApi.class, UsersExtApi.class, AttendanceApi.class, BankApi.class, ConfigApi.class, PositionApi.class, SupplierApi.class, AssetsApi.class, SubscribeMessageSendApi.class, SocialClientApi.class, UsersExtApi.class, AttendanceApi.class, BankApi.class, ConfigApi.class, PositionApi.class, SupplierApi.class, AssetsApi.class,
AssetsTypeApi.class, AssetReceiveApi.class, AttendanceApi.class, AttendanceGroupApi.class, WorkOvertimeApi.class, HolidayApi.class, AssetsTypeApi.class, AssetReceiveApi.class, AttendanceApi.class, AttendanceGroupApi.class, WorkOvertimeApi.class, HolidayApi.class,
RentalOrderApi.class, RentalDepositRecordApi.class, ProjectApi.class, RentalItemsRecordApi.class,AdminOauthUserOtherInfoApi.class, StoreProductAttrValueApi.class, StoreProductApi.class, RentalOrderApi.class, RentalDepositRecordApi.class, ProjectApi.class, RentalItemsRecordApi.class,AdminOauthUserOtherInfoApi.class, StoreProductAttrValueApi.class, StoreProductApi.class,
ContractApi.class, BusinessApi.class, CrmCustomerApi.class, StaffApi.class, LoanApi.class, FactoryInfoApi.class, UserLiveTreeApi.class, SalesPerformanceSettlementApi.class, ContractApi.class, BusinessApi.class, CrmCustomerApi.class, StaffApi.class, LoanApi.class, FactoryInfoApi.class, UserLiveTreeApi.class, SalesPerformanceSettlementApi.class
StaffSalaryApi.class
}) })
public class RpcConfiguration { public class RpcConfiguration {
} }

View File

@ -89,13 +89,6 @@ public interface FinancialPaymentService {
*/ */
List<FinancialPaymentDO> getFinancialPaymentList(List<String> processInstanceIds); List<FinancialPaymentDO> getFinancialPaymentList(List<String> processInstanceIds);
/**
* 根据流程实例编号获取支付信息
* @param processInstanceId 流程实例编号
* @return 支付信息
*/
FinancialPaymentDO getFinancialPaymentByProcessInstanceId(String processInstanceId);
/** /**
* 获取支付信息 统计 * 获取支付信息 统计
* @param pageReqVO 查询条件 * @param pageReqVO 查询条件

View File

@ -1,6 +1,5 @@
package cn.iocoder.yudao.module.bpm.service.financialpayment; package cn.iocoder.yudao.module.bpm.service.financialpayment;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.common.Constants; import cn.iocoder.yudao.framework.common.Constants;
import cn.iocoder.yudao.framework.common.enums.SocialTypeEnum; import cn.iocoder.yudao.framework.common.enums.SocialTypeEnum;
@ -25,7 +24,6 @@ import cn.iocoder.yudao.module.bpm.dal.mysql.oa.*;
import cn.iocoder.yudao.module.bpm.dal.mysql.task.BpmProcessInstanceExtMapper; 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.enums.task.BpmProcessInstanceResultEnum;
import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceStatusEnum; import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceStatusEnum;
import cn.iocoder.yudao.module.bpm.service.oa.BpmOAExpensesService;
import cn.iocoder.yudao.module.system.api.auth.AdminOauthUserOtherInfoApi; import cn.iocoder.yudao.module.system.api.auth.AdminOauthUserOtherInfoApi;
import cn.iocoder.yudao.module.system.api.auth.dto.AdminOauthUserOtherInfoApiDTO; import cn.iocoder.yudao.module.system.api.auth.dto.AdminOauthUserOtherInfoApiDTO;
import cn.iocoder.yudao.module.system.api.auth.vo.AdminOauthUserOtherInfoApiVO; import cn.iocoder.yudao.module.system.api.auth.vo.AdminOauthUserOtherInfoApiVO;
@ -91,9 +89,6 @@ public class FinancialPaymentServiceImpl implements FinancialPaymentService {
@Resource @Resource
private BpmOASalaryMapper salaryMapper; private BpmOASalaryMapper salaryMapper;
@Resource
private BpmOAExpensesMapper expensesMapper;
@Override @Override
public Long createFinancialPayment(FinancialPaymentSaveVO vo) { public Long createFinancialPayment(FinancialPaymentSaveVO vo) {
FinancialPaymentItemSaveReqVO createReqVO = vo.getFinancialPaymentItemSaveReqVO(); FinancialPaymentItemSaveReqVO createReqVO = vo.getFinancialPaymentItemSaveReqVO();
@ -144,8 +139,6 @@ public class FinancialPaymentServiceImpl implements FinancialPaymentService {
case 8: case 8:
supplierPurchasePaymentMapper.updateById(new BpmOASupplierPurchasePaymentDO().setId(financialPayment.getObjectId()).setResult(BpmProcessInstanceResultEnum.BACK.getResult())); supplierPurchasePaymentMapper.updateById(new BpmOASupplierPurchasePaymentDO().setId(financialPayment.getObjectId()).setResult(BpmProcessInstanceResultEnum.BACK.getResult()));
break; break;
case 9:
expensesMapper.updateById(new BpmOAExpensesDO().setId(financialPayment.getObjectId()).setResult(BpmProcessInstanceResultEnum.BACK.getResult()));
} }
BpmProcessInstanceExtDO instanceExtDO = new BpmProcessInstanceExtDO().setProcessInstanceId(financialPayment.getProcessInstanceId()) BpmProcessInstanceExtDO instanceExtDO = new BpmProcessInstanceExtDO().setProcessInstanceId(financialPayment.getProcessInstanceId())
.setStatus(BpmProcessInstanceStatusEnum.FINISH.getStatus()) .setStatus(BpmProcessInstanceStatusEnum.FINISH.getStatus())
@ -154,31 +147,19 @@ public class FinancialPaymentServiceImpl implements FinancialPaymentService {
} }
this.updateById(financialPayment); this.updateById(financialPayment);
// 支付完成 // 判断是借支申请
if (financialPayment.getStatus() == 2) { if (financialPayment.getType() == 7 && financialPayment.getStatus() == 2) {
switch (financialPayment.getType()) { // 获取借支信息
case 7: // 借支申请时 BpmOALoanDO loanDO = loanMapper.selectById(financialPayment.getObjectId());
// 获取借支信息
BpmOALoanDO loanDO = loanMapper.selectById(financialPayment.getObjectId());
// 同步插入借支表中 // 同步插入借支表中
LoanDTO createDO = new LoanDTO() LoanDTO createDO = new LoanDTO()
.setUserId(loanDO.getSfUserId()) .setUserId(loanDO.getSfUserId())
.setDeptId(loanDO.getFactoryId()) .setDeptId(loanDO.getFactoryId())
.setLoanType(loanDO.getLoanType()) .setAmount(loanDO.getTotalMoney())
.setAmount(loanDO.getTotalMoney()) .setReturnAmount(BigDecimal.ZERO);
.setReturnAmount(BigDecimal.ZERO); loanApi.createLoan(createDO);
loanApi.createLoan(createDO);
break;
case 9: // 开支日报时
// 更新开支日报支付状态支付金额
expensesMapper.updateById(new BpmOAExpensesDO()
.setId(financialPayment.getObjectId())
.setStatus(1)
.setAmountPaid(financialPayment.getActualPayment()));
}
} }
// -- 获取发起人的openId // -- 获取发起人的openId
@ -272,15 +253,6 @@ public class FinancialPaymentServiceImpl implements FinancialPaymentService {
} }
@Override
public FinancialPaymentDO getFinancialPaymentByProcessInstanceId(String processInstanceId) {
List<FinancialPaymentDO> financialPaymentDO = financialPaymentMapper.selectList(FinancialPaymentDO::getProcessInstanceId, processInstanceId);
if (CollUtil.isNotEmpty(financialPaymentDO)) {
return financialPaymentDO.get(0);
}
return null;
}
@Override @Override
public FinancialPaymentDO getPaymentTotal(FinancialPaymentPageReqVO pageReqVO) { public FinancialPaymentDO getPaymentTotal(FinancialPaymentPageReqVO pageReqVO) {
pageReqVO.setReceiveUserId(getLoginUserId()); pageReqVO.setReceiveUserId(getLoginUserId());

View File

@ -229,16 +229,6 @@ public class BpmOACashServiceImpl extends BpmOABaseService implements BpmOACashS
BpmProcessInstanceExtDO processInstance = bpmProcessInstanceService.getProcessInstanceDO(processInstanceId); BpmProcessInstanceExtDO processInstance = bpmProcessInstanceService.getProcessInstanceDO(processInstanceId);
CommonResult<AdminUserRespDTO> user = userApi.getUser(cash.getUserId()); CommonResult<AdminUserRespDTO> user = userApi.getUser(cash.getUserId());
// 从缓存中部门所属公司信息
DeptRespDTO deptRespDTO = deptApi.getCompanyByDept(cashItemDOs.get(0).getDeptId()).getCheckedData();
// 获取收款人信息
BankRespDTO bankRespDTO = new BankRespDTO();
if (cash.getBankId() != null) {
bankRespDTO = bankApi.getBank(cash.getBankId()).getCheckedData();
}
// -- 插入到财务支付表中 // -- 插入到财务支付表中
financialPaymentService.save(new FinancialPaymentDO() financialPaymentService.save(new FinancialPaymentDO()
.setUserId(cash.getUserId()) .setUserId(cash.getUserId())
@ -252,8 +242,6 @@ public class BpmOACashServiceImpl extends BpmOABaseService implements BpmOACashS
.setAmountPayable(isImprest == 1 ? amount.abs() : cash.getTotalMoney()) .setAmountPayable(isImprest == 1 ? amount.abs() : cash.getTotalMoney())
.setBeginTime(processInstance.getCreateTime()) .setBeginTime(processInstance.getCreateTime())
.setEndTime(processInstance.getEndTime()) .setEndTime(processInstance.getEndTime())
.setRecipientName(bankRespDTO.getNickname())
.setCompanyId(deptRespDTO != null ? deptRespDTO.getId() : null)
); );
} }
} }

View File

@ -54,10 +54,4 @@ public interface BpmOAEvectionService {
* @return 出差申请列表 * @return 出差申请列表
*/ */
List<BpmOAEvectionDO> getEvectionListByEndTime(LocalDate date); List<BpmOAEvectionDO> getEvectionListByEndTime(LocalDate date);
/**
* 获得我的出差申请列表
* @return 出差申请列表
*/
List<BpmOAEvectionDO> getEvectionList();
} }

View File

@ -20,7 +20,6 @@ import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.OA_EVECTION_IS_EXISTS; import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.OA_EVECTION_IS_EXISTS;
import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.OA_EVECTION_NOT_EXISTS; import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.OA_EVECTION_NOT_EXISTS;
@ -151,10 +150,4 @@ public class BpmOAEvectionServiceImpl extends BpmOABaseService implements BpmOAE
.eq(BpmOAEvectionDO::getResult, BpmProcessInstanceResultEnum.APPROVE.getResult()) .eq(BpmOAEvectionDO::getResult, BpmProcessInstanceResultEnum.APPROVE.getResult())
.likeIfPresent(BpmOAEvectionDO::getEndTime, date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")))); .likeIfPresent(BpmOAEvectionDO::getEndTime, date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))));
} }
@Override
public List<BpmOAEvectionDO> getEvectionList() {
return evectionMapper.selectEvectionList(getLoginUserId());
}
} }

View File

@ -1,12 +1,14 @@
package cn.iocoder.yudao.module.bpm.service.oa; package cn.iocoder.yudao.module.bpm.service.oa;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.*; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesCreateReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesPageReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesPageRespVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesRespVO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAExpensesDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAExpensesDO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAExpensesItemDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAExpensesItemDO;
import javax.validation.Valid; import javax.validation.Valid;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
public interface BpmOAExpensesService { public interface BpmOAExpensesService {
@ -65,36 +67,4 @@ public interface BpmOAExpensesService {
* @return 分页结果 * @return 分页结果
*/ */
PageResult<BpmOAExpensesPageRespVO> getExpensesPage(BpmOAExpensesPageReqVO pageReqVO); PageResult<BpmOAExpensesPageRespVO> getExpensesPage(BpmOAExpensesPageReqVO pageReqVO);
/**
* 获得开支金额统计
* @return 统计信息
*/
BpmOAExpensesTotal getExpensesTotal(BpmOAExpensesPageReqVO pageReqVO);
/**
* 提前付款 | 手动插入至支付管理
* @param id 生产开支id
*/
void getPayment(Long id);
/**
* 更新生产开支 支付状态
* @param status 支付状态
* @param amountPaid 支付金额
*/
void updateExpenses(Long id ,Integer status, BigDecimal amountPaid);
/**
* 拒绝付款
* @param id 生产开支id
* @param processInstanceId 流程实例编号
*/
void refused(Long id, String processInstanceId);
/**
* 一键支付
* @param month 月份
*/
void oneClickPayment(String month);
} }

View File

@ -1,51 +1,41 @@
package cn.iocoder.yudao.module.bpm.service.oa; package cn.iocoder.yudao.module.bpm.service.oa;
import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.UploadUserFile; import cn.iocoder.yudao.framework.common.pojo.UploadUserFile;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils; import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils;
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.api.task.dto.BpmProcessInstanceCreateReqDTO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.*; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesCreateReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesPageReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesPageRespVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesRespVO;
import cn.iocoder.yudao.module.bpm.convert.oa.BpmOAExpensesConvert; import cn.iocoder.yudao.module.bpm.convert.oa.BpmOAExpensesConvert;
import cn.iocoder.yudao.module.bpm.dal.dataobject.financialpayment.FinancialPaymentDO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAExpensesDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAExpensesDO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAExpensesItemDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAExpensesItemDO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmProcessInstanceExtDO;
import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOAExpensesItemMapper; import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOAExpensesItemMapper;
import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOAExpensesMapper; import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOAExpensesMapper;
import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum;
import cn.iocoder.yudao.module.bpm.service.financialpayment.FinancialPaymentService;
import cn.iocoder.yudao.module.bpm.service.task.BpmHistoryProcessInstanceService; import cn.iocoder.yudao.module.bpm.service.task.BpmHistoryProcessInstanceService;
import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService;
import cn.iocoder.yudao.module.smartfactory.api.factoryInfo.FactoryInfoApi;
import cn.iocoder.yudao.module.smartfactory.api.factoryInfo.dto.FactoryInfoDTO;
import cn.iocoder.yudao.module.smartfactory.api.staff.StaffApi;
import cn.iocoder.yudao.module.smartfactory.api.staff.dto.StaffDTO;
import cn.iocoder.yudao.module.system.api.bank.BankApi; import cn.iocoder.yudao.module.system.api.bank.BankApi;
import cn.iocoder.yudao.module.system.api.bank.dto.BankRespDTO; import cn.iocoder.yudao.module.system.api.bank.dto.BankRespDTO;
import cn.iocoder.yudao.module.system.api.loan.LoanApi; import cn.iocoder.yudao.module.system.api.dept.DeptApi;
import cn.iocoder.yudao.module.system.api.loan.dto.LoanDTO; import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import org.flowable.engine.runtime.ProcessInstance;
import org.springframework.context.annotation.Lazy; import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.OA_EXPENSES_NOT_EXISTS; import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.OA_EXPENSES_NOT_EXISTS;
@ -70,30 +60,18 @@ public class BpmOAExpensesServiceImpl extends BpmOABaseService implements BpmOAE
private BpmOAExpensesItemMapper expensesItemMapper; private BpmOAExpensesItemMapper expensesItemMapper;
@Resource @Resource
private BpmProcessInstanceService processInstanceService; private BpmProcessInstanceApi processInstanceApi;
@Resource @Resource
private FactoryInfoApi factoryInfoApi; private DeptApi deptApi;
@Resource @Resource
private BankApi bankApi; private BankApi bankApi;
@Resource
private FinancialPaymentService financialPaymentService;
@Resource @Resource
@Lazy // 解决循环依赖 @Lazy // 解决循环依赖
private BpmHistoryProcessInstanceService historyProcessInstanceService; private BpmHistoryProcessInstanceService historyProcessInstanceService;
@Resource
private AdminUserApi userApi;
@Resource
private LoanApi loanApi;
@Resource
private StaffApi staffApi;
@Override @Override
public Long createExpenses(Long userId, BpmOAExpensesCreateReqVO createReqVO) { public Long createExpenses(Long userId, BpmOAExpensesCreateReqVO createReqVO) {
@ -112,11 +90,9 @@ public class BpmOAExpensesServiceImpl extends BpmOABaseService implements BpmOAE
Map<String, Object> processInstanceVariables = new HashMap<>(); Map<String, Object> processInstanceVariables = new HashMap<>();
String type = bpmOAExpensesItemDOS.stream().map(item -> item.getType().toString()).collect(Collectors.joining(",")); String type = bpmOAExpensesItemDOS.stream().map(item -> item.getType().toString()).collect(Collectors.joining(","));
processInstanceVariables.put("type", type); processInstanceVariables.put("type", type);
processInstanceVariables.put("factoryType", expenses.getFactoryType()); String processInstanceId = processInstanceApi.createProcessInstance(userId,
processInstanceVariables.put("factory_id", bpmOAExpensesItemDOS.get(0).getDeptId());
String processInstanceId = processInstanceService.createProcessInstance(userId,
new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(PROCESS_KEY) new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(PROCESS_KEY)
.setVariables(processInstanceVariables).setBusinessKey(String.valueOf(expenses.getId()))); .setVariables(processInstanceVariables).setBusinessKey(String.valueOf(expenses.getId()))).getCheckedData();
// 将工作流的编号更新到 OA 生产开支单中 // 将工作流的编号更新到 OA 生产开支单中
expensesMapper.updateById(new BpmOAExpensesDO().setId(expenses.getId()).setProcessInstanceId(processInstanceId)); expensesMapper.updateById(new BpmOAExpensesDO().setId(expenses.getId()).setProcessInstanceId(processInstanceId));
@ -142,48 +118,7 @@ public class BpmOAExpensesServiceImpl extends BpmOABaseService implements BpmOAE
// 获得现金支出业务数据 // 获得现金支出业务数据
BpmOAExpensesDO expenses = validateLeaveExists(id); BpmOAExpensesDO expenses = validateLeaveExists(id);
//审核通过 最后节点 expensesMapper.updateById(new BpmOAExpensesDO().setId(id).setResult(result));
if (BpmProcessInstanceResultEnum.APPROVE.getResult().equals(result)) {
ProcessInstance instance = processInstanceService.getProcessInstance(processInstanceId);
if (instance.isEnded()) {
// 获取申请人对应的厂区员工编号
StaffDTO staffDTO = staffApi.getStaffByUserId(expenses.getUserId()).getCheckedData();
if (staffDTO != null) {
// 判断申请人是否存在 费用借支
LoanDTO loanDTO = loanApi.getByUserId(staffDTO.getId(), 2).getCheckedData();
if (loanDTO != null) {
if (loanDTO.getRemainingAmount().compareTo(expenses.getTotalMoney()) >= 0) {
// 设置开支日报支付状态为 已抵扣
expenses.setStatus(2).setAmountPaid(expenses.getTotalMoney());
}else {
// 设置开支日报支付状态为 未抵扣完毕
expenses.setStatus(3).setAmountPaid(loanDTO.getRemainingAmount());
}
// 更新借支表中 归还金额
loanApi.createLoan(new LoanDTO()
.setUserId(staffDTO.getId())
.setLoanType(2)
.setAmount(BigDecimal.ZERO)
.setReturnAmount(expenses.getAmountPaid()));
}
}
}
}
// 更新开支日报 审批结果支付状态以及支付金额
expensesMapper.updateById(new BpmOAExpensesDO()
.setId(id)
.setResult(result)
.setStatus(expenses.getStatus())
.setAmountPaid(expenses.getAmountPaid()));
} }
private BpmOAExpensesDO validateLeaveExists(Long id) { private BpmOAExpensesDO validateLeaveExists(Long id) {
@ -225,7 +160,8 @@ public class BpmOAExpensesServiceImpl extends BpmOABaseService implements BpmOAE
List<BpmOAExpensesItemDO> expensesItemDOs = getExpensesItem(expenses.getId()); List<BpmOAExpensesItemDO> expensesItemDOs = getExpensesItem(expenses.getId());
//获取部门信息map //获取部门信息map
Map<Long, FactoryInfoDTO> factoryInfoDTOS = factoryInfoApi.getFactoryMap(convertSet(expensesItemDOs, BpmOAExpensesItemDO::getDeptId)); List<DeptRespDTO> deptList = deptApi.getDeptByFactoryIds(convertSet(expensesItemDOs, BpmOAExpensesItemDO::getDeptId)).getCheckedData();
Map<Long, DeptRespDTO> deptMap = convertMap(deptList, DeptRespDTO::getFactoryId);
// 获取银行卡信息 // 获取银行卡信息
BankRespDTO bankRespDTO = null; BankRespDTO bankRespDTO = null;
@ -233,7 +169,7 @@ public class BpmOAExpensesServiceImpl extends BpmOABaseService implements BpmOAE
bankRespDTO = bankApi.getBank(expenses.getBankId()).getCheckedData(); bankRespDTO = bankApi.getBank(expenses.getBankId()).getCheckedData();
} }
return BpmOAExpensesConvert.INSTANCE.convert1(expenses, expensesItemDOs, factoryInfoDTOS, bankRespDTO); return BpmOAExpensesConvert.INSTANCE.convert1(expenses, expensesItemDOs, deptMap, bankRespDTO);
} }
@Override @Override
@ -241,84 +177,4 @@ public class BpmOAExpensesServiceImpl extends BpmOABaseService implements BpmOAE
IPage<BpmOAExpensesPageRespVO> page = expensesMapper.selectExpensesPage(MyBatisUtils.buildPage(pageReqVO) ,pageReqVO); IPage<BpmOAExpensesPageRespVO> page = expensesMapper.selectExpensesPage(MyBatisUtils.buildPage(pageReqVO) ,pageReqVO);
return new PageResult<>(page.getRecords(), page.getTotal()); return new PageResult<>(page.getRecords(), page.getTotal());
} }
@Override
public BpmOAExpensesTotal getExpensesTotal(BpmOAExpensesPageReqVO pageReqVO) {
return expensesMapper.selectTotal(pageReqVO);
}
@Override
public void getPayment(Long id) {
// 获取开支详情
BpmOAExpensesDO expenses = this.getExpenses(id);
List<BpmOAExpensesItemDO> expensesItems = this.getExpensesItem(id);
// 校验是否已添加至支付管理
if (financialPaymentService.getFinancialPaymentByProcessInstanceId(expenses.getProcessInstanceId()) == null) {
String reason = expensesItems.stream().map(BpmOAExpensesItemDO::getDetail)
.filter(StrUtil::isNotEmpty)
.collect(Collectors.joining(","));
BpmProcessInstanceExtDO processInstance = processInstanceService.getProcessInstanceDO(expenses.getProcessInstanceId());
// -- 插入到财务支付表中
CommonResult<AdminUserRespDTO> user = userApi.getUser(expenses.getUserId());
// 获取收款人信息
BankRespDTO bankRespDTO = null;
if (expenses.getBankId() != null) {
bankRespDTO = bankApi.getBank(expenses.getBankId()).getCheckedData();
}
// 获取付款公司信息
FactoryInfoDTO dto = new FactoryInfoDTO();
if (expenses.getFactoryType() == 1) {
dto = factoryInfoApi.getFactoryInfo(expensesItems.get(0).getDeptId()).getCheckedData();
}
financialPaymentService.save(new FinancialPaymentDO()
.setUserId(expenses.getUserId())
.setDeptId(user.getData() == null ? null : user.getData().getDeptId())
.setProcessInstanceId(expenses.getProcessInstanceId())
.setReason(reason)
.setObjectId(id)
.setType(9)
.setStatus(0)
.setAmountPayable(expenses.getTotalMoney())
.setProcessInstanceName(processInstance.getName())
.setBeginTime(processInstance.getCreateTime())
.setEndTime(processInstance.getEndTime())
.setRecipientName(bankRespDTO != null ? bankRespDTO.getNickname() : "")
.setCompanyFactoryId(dto.getId())
);
}
}
@Override
public void updateExpenses(Long id ,Integer status, BigDecimal amountPaid) {
expensesMapper.updateById(new BpmOAExpensesDO()
.setId(id)
.setStatus(status)
.setAmountPaid(amountPaid));
}
@Override
public void refused(Long id, String processInstanceId) {
// 设置状态为 驳回
expensesMapper.updateById(new BpmOAExpensesDO()
.setId(id)
.setResult(BpmProcessInstanceResultEnum.BACK.getResult()));
// 同步更新流程实例表
processInstanceService.updateProcessInstanceResult(processInstanceId, BpmProcessInstanceResultEnum.BACK.getResult());
}
@Override
public void oneClickPayment(String month) {
expensesMapper.oneClickPayment(month);
}
} }

View File

@ -14,10 +14,6 @@ import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum;
import cn.iocoder.yudao.module.bpm.service.financialpayment.FinancialPaymentService; import cn.iocoder.yudao.module.bpm.service.financialpayment.FinancialPaymentService;
import cn.iocoder.yudao.module.bpm.service.task.BpmHistoryProcessInstanceService; import cn.iocoder.yudao.module.bpm.service.task.BpmHistoryProcessInstanceService;
import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService; import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService;
import cn.iocoder.yudao.module.system.api.bank.BankApi;
import cn.iocoder.yudao.module.system.api.bank.dto.BankRespDTO;
import cn.iocoder.yudao.module.system.api.dept.DeptApi;
import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi; import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@ -44,7 +40,7 @@ import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.OA_IMPREST_NO
public class BpmOAImprestServiceImpl extends BpmOABaseService implements BpmOAImprestService { public class BpmOAImprestServiceImpl extends BpmOABaseService implements BpmOAImprestService {
/** /**
* OA 备用金对应的流程定义 KEY * OA 出差对应的流程定义 KEY
*/ */
public static final String PROCESS_KEY = "oa_imprest"; public static final String PROCESS_KEY = "oa_imprest";
@ -53,23 +49,14 @@ public class BpmOAImprestServiceImpl extends BpmOABaseService implements BpmOAIm
@Resource @Resource
private BpmProcessInstanceApi processInstanceApi; private BpmProcessInstanceApi processInstanceApi;
@Resource @Resource
@Lazy // 解决循环依赖 @Lazy // 解决循环依赖
private BpmProcessInstanceService bpmProcessInstanceService; private BpmProcessInstanceService bpmProcessInstanceService;
@Resource @Resource
private FinancialPaymentService financialPaymentService; private FinancialPaymentService financialPaymentService;
@Resource @Resource
private AdminUserApi userApi; private AdminUserApi userApi;
@Resource
private DeptApi deptApi;
@Resource
private BankApi bankApi;
@Resource @Resource
private BpmHistoryProcessInstanceService historyProcessInstanceService; private BpmHistoryProcessInstanceService historyProcessInstanceService;
@ -108,7 +95,7 @@ public class BpmOAImprestServiceImpl extends BpmOABaseService implements BpmOAIm
@Override @Override
public void updateImprestResult(String processInstanceId, Long id, Integer result) { public void updateImprestResult(String processInstanceId, Long id, Integer result) {
BpmOAImprestDO imprestDO = validateLeaveExists(id); validateLeaveExists(id);
imprestMapper.updateById(new BpmOAImprestDO().setId(id).setResult(result)); imprestMapper.updateById(new BpmOAImprestDO().setId(id).setResult(result));
//审核通过 最后节点 //审核通过 最后节点
@ -118,44 +105,31 @@ public class BpmOAImprestServiceImpl extends BpmOABaseService implements BpmOAIm
if (instance.isEnded()) { if (instance.isEnded()) {
//判断是否有采购报销 //判断是否有采购报销
BpmOAImprestDO cash = getImprest(id);
BpmProcessInstanceExtDO processInstance = bpmProcessInstanceService.getProcessInstanceDO(processInstanceId); BpmProcessInstanceExtDO processInstance = bpmProcessInstanceService.getProcessInstanceDO(processInstanceId);
CommonResult<AdminUserRespDTO> user = userApi.getUser(imprestDO.getUserId()); CommonResult<AdminUserRespDTO> user = userApi.getUser(cash.getUserId());
// 从缓存中部门所属公司信息
DeptRespDTO deptRespDTO = deptApi.getDept(imprestDO.getCompanyId()).getCheckedData();
// 获取收款人信息
BankRespDTO bankRespDTO = new BankRespDTO();
if (imprestDO.getBankId() != null) {
bankRespDTO = bankApi.getBank(imprestDO.getBankId()).getCheckedData();
}
// -- 插入到财务支付表中 // -- 插入到财务支付表中
financialPaymentService.save(new FinancialPaymentDO() financialPaymentService.save(new FinancialPaymentDO()
.setUserId(imprestDO.getUserId()) .setUserId(cash.getUserId())
.setDeptId(user.getData() == null ? null : user.getData().getDeptId()) .setDeptId(user.getData() == null ? null : user.getData().getDeptId())
.setProcessInstanceId(imprestDO.getProcessInstanceId()) .setProcessInstanceId(cash.getProcessInstanceId())
.setReason(imprestDO.getReason()) .setReason(cash.getReason())
.setObjectId(id) .setObjectId(id)
.setType(2) .setType(2)
.setStatus(0) .setStatus(0)
.setAmountPayable(imprestDO.getAmount()) .setAmountPayable(cash.getAmount())
.setProcessInstanceName(processInstance.getName()) .setProcessInstanceName(processInstance.getName())
.setBeginTime(processInstance.getCreateTime()) .setBeginTime(processInstance.getCreateTime())
.setEndTime(processInstance.getEndTime()) .setEndTime(processInstance.getEndTime())
.setRecipientName(bankRespDTO.getNickname())
.setCompanyId(deptRespDTO != null ? deptRespDTO.getId() : null)
); );
} }
} }
} }
private BpmOAImprestDO validateLeaveExists(Long id) { private void validateLeaveExists(Long id) {
BpmOAImprestDO imprestDO = imprestMapper.selectById(id); if (imprestMapper.selectById(id) == null) {
if (imprestDO == null) {
throw exception(OA_IMPREST_NOT_EXISTS); throw exception(OA_IMPREST_NOT_EXISTS);
} }
return imprestDO;
} }
@Override @Override

View File

@ -1,14 +1,9 @@
package cn.iocoder.yudao.module.bpm.service.oa; package cn.iocoder.yudao.module.bpm.service.oa;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.bpm.api.oa.vo.loan.BpmOALoanSumDTO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.loan.BpmOALoanCreateReqVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.loan.BpmOALoanCreateReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.loan.BpmOALoanPageReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.loan.BpmOAReturnVO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOALoanDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOALoanDO;
import javax.validation.Valid; import javax.validation.Valid;
import java.util.Collection;
import java.util.List; import java.util.List;
/** /**
@ -53,23 +48,9 @@ public interface BpmOALoanService {
BpmOALoanDO getByProcessInstanceId(String processInstanceId); BpmOALoanDO getByProcessInstanceId(String processInstanceId);
/** /**
* 获得指定用户的借支分页列表 * 获得指定用户的借支列表
* @param pageReqVO 分页参数 * @param staffId 员工编号
* @return 借支列表 * @return 借支列表
*/ */
PageResult<BpmOALoanDO> getListByStaffId(BpmOALoanPageReqVO pageReqVO); List<BpmOALoanDO> getListByStaffId(Long staffId);
/**
* 获取员工当月需抵扣的借支金额
* @param staffId 员工编号集合
* @return 借支金额统计
*/
List<BpmOALoanSumDTO> getListByStaffId(Collection<Long> staffId, String month);
/**
* 获取员工还款分页列表
* @param pageReqVO 分页信息
* @return 还款分页列表
*/
PageResult<BpmOAReturnVO> getReturnList(BpmOALoanPageReqVO pageReqVO);
} }

View File

@ -2,16 +2,11 @@ package cn.iocoder.yudao.module.bpm.service.oa;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.UploadUserFile; import cn.iocoder.yudao.framework.common.pojo.UploadUserFile;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils;
import cn.iocoder.yudao.module.bpm.api.oa.vo.loan.BpmOALoanSumDTO;
import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.loan.BpmOALoanCreateReqVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.loan.BpmOALoanCreateReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.loan.BpmOALoanPageReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.loan.BpmOAReturnVO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.financialpayment.FinancialPaymentDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.financialpayment.FinancialPaymentDO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOALoanDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOALoanDO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmProcessInstanceExtDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmProcessInstanceExtDO;
@ -20,28 +15,19 @@ import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum;
import cn.iocoder.yudao.module.bpm.service.financialpayment.FinancialPaymentService; import cn.iocoder.yudao.module.bpm.service.financialpayment.FinancialPaymentService;
import cn.iocoder.yudao.module.bpm.service.task.BpmHistoryProcessInstanceService; import cn.iocoder.yudao.module.bpm.service.task.BpmHistoryProcessInstanceService;
import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService; import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService;
import cn.iocoder.yudao.module.smartfactory.api.factoryInfo.FactoryInfoApi;
import cn.iocoder.yudao.module.smartfactory.api.factoryInfo.dto.FactoryInfoDTO;
import cn.iocoder.yudao.module.smartfactory.api.staff.StaffApi;
import cn.iocoder.yudao.module.smartfactory.api.staff.dto.StaffDTO;
import cn.iocoder.yudao.module.system.api.bank.BankApi;
import cn.iocoder.yudao.module.system.api.bank.dto.BankRespDTO;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi; import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.flowable.engine.runtime.ProcessInstance; import org.flowable.engine.runtime.ProcessInstance;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.OA_LOAN_NOT_CREATE;
import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.OA_LOAN_NOT_EXISTS; import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.OA_LOAN_NOT_EXISTS;
/** /**
@ -73,48 +59,18 @@ public class BpmOALoanServiceImpl extends BpmOABaseService implements BpmOALoanS
@Resource @Resource
private FinancialPaymentService financialPaymentService; private FinancialPaymentService financialPaymentService;
@Resource
private StaffApi staffApi;
@Resource
private BankApi bankApi;
@Resource
private FactoryInfoApi factoryInfoApi;
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Long createLoan(Long userId, BpmOALoanCreateReqVO vo) { public Long createLoan(Long userId, BpmOALoanCreateReqVO vo) {
// 提交是费用借支时
if (vo.getLoanType() == 2) {
// 校验创建
StaffDTO staffDTO = validateCreate(userId, vo);
vo.setSfUserId(staffDTO.getId());
vo.setFactoryId(staffDTO.getFactoryId());
}
//插入OA 借支申请 //插入OA 借支申请
BpmOALoanDO loan = BeanUtils.toBean(vo, BpmOALoanDO.class) BpmOALoanDO loan = BeanUtils.toBean(vo, BpmOALoanDO.class)
.setUserId(userId) .setUserId(userId)
.setResult(BpmProcessInstanceResultEnum.PROCESS.getResult()); .setResult(BpmProcessInstanceResultEnum.PROCESS.getResult());
loanMapper.insert(loan); loanMapper.insert(loan);
// 发起 BPM 流程 // 发起 BPM 流程
Map<String, Object> processInstanceVariables = new HashMap<>(); Map<String, Object> processInstanceVariables = new HashMap<>();
// 提交是费用借支时
if (vo.getLoanType() == 2) {
// 获取借支人所属厂区信息
FactoryInfoDTO factoryInfoDTO = factoryInfoApi.getFactoryInfo(loan.getFactoryId()).getCheckedData();
processInstanceVariables.put("factoryType", factoryInfoDTO.getType());
}
processInstanceVariables.put("loanType", loan.getLoanType());
String processInstanceId = processInstanceService.createProcessInstance(userId, String processInstanceId = processInstanceService.createProcessInstance(userId,
new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(PROCESS_KEY) new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(PROCESS_KEY)
.setVariables(processInstanceVariables).setBusinessKey(String.valueOf(loan.getId()))); .setVariables(processInstanceVariables).setBusinessKey(String.valueOf(loan.getId())));
@ -134,19 +90,9 @@ public class BpmOALoanServiceImpl extends BpmOABaseService implements BpmOALoanS
return loan.getId(); return loan.getId();
} }
private StaffDTO validateCreate(Long userId, BpmOALoanCreateReqVO vo) {
StaffDTO staffDTO = staffApi.getStaffByUserId(userId).getCheckedData();
if (staffDTO == null) {
throw exception(OA_LOAN_NOT_CREATE);
}
return staffDTO;
}
@Override @Override
public void updateLoanResult(String processInstanceId, Long id, Integer result) { public void updateLoanResult(String processInstanceId, Long id, Integer result) {
BpmOALoanDO loanDO = validateLoanExists(id); BpmOALoanDO loanDO = validateLeaveExists(id);
loanMapper.updateById(new BpmOALoanDO().setId(id).setResult(result)); loanMapper.updateById(new BpmOALoanDO().setId(id).setResult(result));
//审核通过 最后节点 //审核通过 最后节点
@ -158,15 +104,11 @@ public class BpmOALoanServiceImpl extends BpmOABaseService implements BpmOALoanS
BpmProcessInstanceExtDO processInstance = processInstanceService.getProcessInstanceDO(processInstanceId); BpmProcessInstanceExtDO processInstance = processInstanceService.getProcessInstanceDO(processInstanceId);
// -- 插入到财务支付表中 // -- 插入到财务支付表中
CommonResult<AdminUserRespDTO> user = userApi.getUser(loanDO.getUserId()); CommonResult<AdminUserRespDTO> user = userApi.getUser(loanDO.getUserId());
// 获取收款人信息
BankRespDTO bankRespDTO = bankApi.getBank(loanDO.getBankId()).getCheckedData();
financialPaymentService.save(new FinancialPaymentDO() financialPaymentService.save(new FinancialPaymentDO()
.setUserId(loanDO.getUserId()) .setUserId(loanDO.getUserId())
.setDeptId(user.getData() == null ? null : user.getData().getDeptId()) .setDeptId(user.getData() == null ? null : user.getData().getDeptId())
.setProcessInstanceId(loanDO.getProcessInstanceId()) .setProcessInstanceId(loanDO.getProcessInstanceId())
.setReason(loanDO.getReason()) .setReason("")
.setObjectId(id) .setObjectId(id)
.setType(7) .setType(7)
.setStatus(0) .setStatus(0)
@ -174,13 +116,12 @@ public class BpmOALoanServiceImpl extends BpmOABaseService implements BpmOALoanS
.setProcessInstanceName(processInstance.getName()) .setProcessInstanceName(processInstance.getName())
.setBeginTime(processInstance.getCreateTime()) .setBeginTime(processInstance.getCreateTime())
.setEndTime(processInstance.getEndTime()) .setEndTime(processInstance.getEndTime())
.setRecipientName(bankRespDTO.getNickname())
); );
} }
} }
} }
private BpmOALoanDO validateLoanExists(Long id) { private BpmOALoanDO validateLeaveExists(Long id) {
BpmOALoanDO loanDO = loanMapper.selectById(id); BpmOALoanDO loanDO = loanMapper.selectById(id);
if (loanDO == null) { if (loanDO == null) {
throw exception(OA_LOAN_NOT_EXISTS); throw exception(OA_LOAN_NOT_EXISTS);
@ -205,26 +146,9 @@ public class BpmOALoanServiceImpl extends BpmOABaseService implements BpmOALoanS
} }
@Override @Override
public PageResult<BpmOALoanDO> getListByStaffId(BpmOALoanPageReqVO pageReqVO) { public List<BpmOALoanDO> getListByStaffId(Long staffId) {
return loanMapper.selectPage(pageReqVO, new LambdaQueryWrapperX<BpmOALoanDO>() return loanMapper.selectList(new LambdaQueryWrapperX<BpmOALoanDO>()
.eq(BpmOALoanDO::getSfUserId, pageReqVO.getStaffId()) .eq(BpmOALoanDO::getSfUserId, staffId)
.eq(BpmOALoanDO::getLoanType, pageReqVO.getLoanType())
.eq(BpmOALoanDO::getResult, BpmProcessInstanceResultEnum.APPROVE.getResult())); .eq(BpmOALoanDO::getResult, BpmProcessInstanceResultEnum.APPROVE.getResult()));
} }
@Override
public List<BpmOALoanSumDTO> getListByStaffId(Collection<Long> staffId, String month) {
return loanMapper.selectSumByStaffId(staffId, month);
}
@Override
public PageResult<BpmOAReturnVO> getReturnList(BpmOALoanPageReqVO pageReqVO) {
// 过滤之前老数据
if (pageReqVO.getLoanType() == null) {
return PageResult.empty();
}
IPage<BpmOAReturnVO> page = loanMapper.selectReturnList(pageReqVO, MyBatisUtils.buildPage(pageReqVO));
return new PageResult<>(page.getRecords(), page.getTotal());
}
} }

View File

@ -125,16 +125,6 @@ public class BpmOAPaymentServiceImpl extends BpmOABaseService implements BpmOAPa
BpmProcessInstanceExtDO processInstance = processInstanceService.getProcessInstanceDO(processInstanceId); BpmProcessInstanceExtDO processInstance = processInstanceService.getProcessInstanceDO(processInstanceId);
// -- 插入到财务支付表中 // -- 插入到财务支付表中
CommonResult<AdminUserRespDTO> user = userApi.getUser(paymentDO.getUserId()); CommonResult<AdminUserRespDTO> user = userApi.getUser(paymentDO.getUserId());
// 从缓存中部门所属公司信息
DeptRespDTO deptRespDTO = deptApi.getDept(paymentDO.getPaymentCompany()).getCheckedData();
// 获取收款人信息
BankRespDTO bankRespDTO = new BankRespDTO();
if (paymentDO.getBankId() != null) {
bankRespDTO = bankApi.getBank(paymentDO.getBankId()).getCheckedData();
}
financialPaymentService.save(new FinancialPaymentDO() financialPaymentService.save(new FinancialPaymentDO()
.setUserId(paymentDO.getUserId()) .setUserId(paymentDO.getUserId())
.setDeptId(user.getData() == null ? null : user.getData().getDeptId()) .setDeptId(user.getData() == null ? null : user.getData().getDeptId())
@ -147,8 +137,6 @@ public class BpmOAPaymentServiceImpl extends BpmOABaseService implements BpmOAPa
.setProcessInstanceName(processInstance.getName()) .setProcessInstanceName(processInstance.getName())
.setBeginTime(processInstance.getCreateTime()) .setBeginTime(processInstance.getCreateTime())
.setEndTime(processInstance.getEndTime()) .setEndTime(processInstance.getEndTime())
.setRecipientName(bankRespDTO.getNickname())
.setCompanyId(deptRespDTO != null ? deptRespDTO.getId() : null)
); );
} }
} }
@ -276,9 +264,9 @@ public class BpmOAPaymentServiceImpl extends BpmOABaseService implements BpmOAPa
// 获取银行卡信息 // 获取银行卡信息
BankRespDTO bankResp = bankApi.getBank(payment.getBankId()).getCheckedData(); BankRespDTO bankResp = bankApi.getBank(payment.getBankId()).getCheckedData();
// 设置银行卡信息 // 设置银行卡信息
respVO.setBankName(bankResp != null ? bankResp.getBankName() : null); respVO.setBankName(bankResp.getBankName());
respVO.setBankNo(bankResp != null ? bankResp.getBankNo() : null); respVO.setBankNo(bankResp.getBankNo());
respVO.setNickname(bankResp != null ? bankResp.getNickname() : null); respVO.setNickname(bankResp.getNickname());
} }
} }
return respVO; return respVO;

View File

@ -100,7 +100,6 @@ public class BpmOAReimbursementServiceImpl extends BpmOABaseService implements B
@Override @Override
@Transactional(rollbackFor = Exception.class)
public Long createReimbursement(Long userId, BpmOAReimbursementCreateReqVO createReqVO) { public Long createReimbursement(Long userId, BpmOAReimbursementCreateReqVO createReqVO) {
BpmOAReimbursementDO reimbursement = BpmOAReimbursementConvert.INSTANCE.convert(createReqVO).setUserId(userId) BpmOAReimbursementDO reimbursement = BpmOAReimbursementConvert.INSTANCE.convert(createReqVO).setUserId(userId)
.setResult(BpmProcessInstanceResultEnum.PROCESS.getResult()); .setResult(BpmProcessInstanceResultEnum.PROCESS.getResult());
@ -120,8 +119,6 @@ public class BpmOAReimbursementServiceImpl extends BpmOABaseService implements B
createDO.forEach(item -> item.setReimbursementId(reimbursement.getId())); createDO.forEach(item -> item.setReimbursementId(reimbursement.getId()));
reimbursementItemMapper.insertBatch(createDO); reimbursementItemMapper.insertBatch(createDO);
// 同步更新
// 发起 BPM 流程 // 发起 BPM 流程
Map<String, Object> processInstanceVariables = new HashMap<>(); Map<String, Object> processInstanceVariables = new HashMap<>();
String processInstanceId = processInstanceApi.createProcessInstance(userId, String processInstanceId = processInstanceApi.createProcessInstance(userId,
@ -184,6 +181,12 @@ public class BpmOAReimbursementServiceImpl extends BpmOABaseService implements B
//判断是否有采购报销 //判断是否有采购报销
List<Long> procureIds = new ArrayList<>(); List<Long> procureIds = new ArrayList<>();
// List<Reimbursement> reimbursements = bpmOAReimbursementDO.getReimbursements();
//
// //直接从数据库取出来的List<Reimbursement> 实际上是List<LinkedHashMap>类型 所以不能直接遍历
// //将list再次转为json串然后由json串再转为list
// String json = JsonUtils.toJsonString(reimbursements);
// reimbursements = JsonUtils.parseArray(json, Reimbursement.class);
for (BpmOAReimbursementItemDO reimbursement : reimbursements) { for (BpmOAReimbursementItemDO reimbursement : reimbursements) {
//报销类别为 采购费时 //报销类别为 采购费时
if ("4".equals(reimbursement.getType())) { if ("4".equals(reimbursement.getType())) {
@ -235,10 +238,6 @@ public class BpmOAReimbursementServiceImpl extends BpmOABaseService implements B
BpmProcessInstanceExtDO processInstance = bpmProcessInstanceService.getProcessInstanceDO(processInstanceId); BpmProcessInstanceExtDO processInstance = bpmProcessInstanceService.getProcessInstanceDO(processInstanceId);
// -- 插入到财务支付表中 // -- 插入到财务支付表中
CommonResult<AdminUserRespDTO> user = userApi.getUser(bpmOAReimbursementDO.getUserId()); CommonResult<AdminUserRespDTO> user = userApi.getUser(bpmOAReimbursementDO.getUserId());
// 从缓存中部门所属公司信息
DeptRespDTO deptRespDTO = deptApi.getCompanyByDept(reimbursements.get(0).getDeptId()).getCheckedData();
financialPaymentService.save(new FinancialPaymentDO() financialPaymentService.save(new FinancialPaymentDO()
.setUserId(bpmOAReimbursementDO.getUserId()) .setUserId(bpmOAReimbursementDO.getUserId())
.setDeptId(user.getData() == null ? null : user.getData().getDeptId()) .setDeptId(user.getData() == null ? null : user.getData().getDeptId())
@ -251,8 +250,6 @@ public class BpmOAReimbursementServiceImpl extends BpmOABaseService implements B
.setProcessInstanceName(processInstance.getName()) .setProcessInstanceName(processInstance.getName())
.setBeginTime(processInstance.getCreateTime()) .setBeginTime(processInstance.getCreateTime())
.setEndTime(processInstance.getEndTime()) .setEndTime(processInstance.getEndTime())
.setRecipientName(bpmOAReimbursementDO.getNickname())
.setCompanyId(deptRespDTO != null ? deptRespDTO.getId() : null)
); );
} }
} }

View File

@ -13,7 +13,6 @@ import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum;
import cn.iocoder.yudao.module.bpm.service.financialpayment.FinancialPaymentService; import cn.iocoder.yudao.module.bpm.service.financialpayment.FinancialPaymentService;
import cn.iocoder.yudao.module.bpm.service.task.BpmHistoryProcessInstanceService; import cn.iocoder.yudao.module.bpm.service.task.BpmHistoryProcessInstanceService;
import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService; import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService;
import cn.iocoder.yudao.module.smartfactory.api.staffSalary.StaffSalaryApi;
import cn.iocoder.yudao.module.system.api.dept.DeptApi; import cn.iocoder.yudao.module.system.api.dept.DeptApi;
import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi; import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
@ -62,9 +61,6 @@ public class BpmOASalaryServiceImpl extends BpmOABaseService implements BpmOASal
@Resource @Resource
private FinancialPaymentService financialPaymentService; private FinancialPaymentService financialPaymentService;
@Resource
private StaffSalaryApi staffSalaryApi;
@Override @Override
public Long createSalary(Long userId, BpmOASalaryCreateReqVO createReqVO) { public Long createSalary(Long userId, BpmOASalaryCreateReqVO createReqVO) {
@ -73,14 +69,12 @@ public class BpmOASalaryServiceImpl extends BpmOABaseService implements BpmOASal
.setResult(BpmProcessInstanceResultEnum.PROCESS.getResult()); .setResult(BpmProcessInstanceResultEnum.PROCESS.getResult());
salaryMapper.insert(salary) ; salaryMapper.insert(salary) ;
// 获取申请公司或工厂信息
DeptRespDTO dto = deptApi.getDept(salary.getCompanyDeptId()).getCheckedData();
// 配置申请公司或工厂部门flag // 配置申请公司或工厂部门flag
Map<String, Object> processInstanceVariables = new HashMap<>(); Map<String, Object> processInstanceVariables = new HashMap<>();
if (createReqVO.getDeptType() == 1) { processInstanceVariables.put("company_dept_flag", dto.getFlag());
// 获取申请公司信息
DeptRespDTO dto = deptApi.getDept(salary.getCompanyDeptId()).getCheckedData();
processInstanceVariables.put("company_dept_flag", dto.getFlag());
}
processInstanceVariables.put("dept_type", createReqVO.getDeptType());
// 发起 BPM 流程 // 发起 BPM 流程
String processInstanceId = processInstanceService.createProcessInstance(userId, String processInstanceId = processInstanceService.createProcessInstance(userId,
new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(PROCESS_KEY) new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(PROCESS_KEY)
@ -100,18 +94,12 @@ public class BpmOASalaryServiceImpl extends BpmOABaseService implements BpmOASal
if (fileItems != null && !fileItems.isEmpty()) { if (fileItems != null && !fileItems.isEmpty()) {
uploadBpmFileProcessInstanceId(processInstanceId,fileItems) ; uploadBpmFileProcessInstanceId(processInstanceId,fileItems) ;
} }
// 同步更新 员工薪资表已发放工资状态
staffSalaryApi.updateIsGrant(salary.getStaffSalaryIds(), 1);
return salary.getId(); return salary.getId();
} }
@Override @Override
public void updateSalaryResult(String processInstanceId, Long id, Integer result) { public void updateSalaryResult(String processInstanceId, Long id, Integer result) {
BpmOASalaryDO salaryDO = validateLeaveExists(id); BpmOASalaryDO salaryDO = validateLeaveExists(id);
salaryMapper.updateById(new BpmOASalaryDO().setId(id).setResult(result));
//审核通过 最后节点 //审核通过 最后节点
if (BpmProcessInstanceResultEnum.APPROVE.getResult().equals(result)) { if (BpmProcessInstanceResultEnum.APPROVE.getResult().equals(result)) {
@ -122,7 +110,6 @@ public class BpmOASalaryServiceImpl extends BpmOABaseService implements BpmOASal
BpmProcessInstanceExtDO processInstance = processInstanceService.getProcessInstanceDO(processInstanceId); BpmProcessInstanceExtDO processInstance = processInstanceService.getProcessInstanceDO(processInstanceId);
// -- 插入到财务支付表中 // -- 插入到财务支付表中
CommonResult<AdminUserRespDTO> user = userApi.getUser(salaryDO.getUserId()); CommonResult<AdminUserRespDTO> user = userApi.getUser(salaryDO.getUserId());
financialPaymentService.save(new FinancialPaymentDO() financialPaymentService.save(new FinancialPaymentDO()
.setUserId(salaryDO.getUserId()) .setUserId(salaryDO.getUserId())
.setDeptId(user.getData() == null ? null : user.getData().getDeptId()) .setDeptId(user.getData() == null ? null : user.getData().getDeptId())
@ -135,21 +122,10 @@ public class BpmOASalaryServiceImpl extends BpmOABaseService implements BpmOASal
.setProcessInstanceName(processInstance.getName()) .setProcessInstanceName(processInstance.getName())
.setBeginTime(processInstance.getCreateTime()) .setBeginTime(processInstance.getCreateTime())
.setEndTime(processInstance.getEndTime()) .setEndTime(processInstance.getEndTime())
.setCompanyId(salaryDO.getDeptType() == 1 ? salaryDO.getCompanyDeptId() : null)
); );
} }
} }
salaryMapper.updateById(new BpmOASalaryDO().setId(id).setResult(result));
// -- 自己取消
// -- 审核拒绝
//所有关联的采购申请改为 未支付状态
if (BpmProcessInstanceResultEnum.REJECT.getResult().equals(result)
|| BpmProcessInstanceResultEnum.CANCEL.getResult().equals(result)
|| BpmProcessInstanceResultEnum.BACK.getResult().equals(result)) {
// 还原员工薪资表已发放工资状态
staffSalaryApi.updateIsGrant(salaryDO.getStaffSalaryIds(), 0);
}
} }
private BpmOASalaryDO validateLeaveExists(Long id) { private BpmOASalaryDO validateLeaveExists(Long id) {

View File

@ -146,14 +146,6 @@ public interface BpmProcessInstanceService {
*/ */
void updateProcessInstanceExtReject(String id, String reason); void updateProcessInstanceExtReject(String id, String reason);
/**
* 更新 ProcessInstance 拓展记录结果
*
* @param id 流程编号
* @param result 结果
*/
void updateProcessInstanceResult(String id, Integer result);
/** /**
* /** * /**
* 流程实例数量统计查询 * 流程实例数量统计查询

View File

@ -28,8 +28,6 @@ import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionServic
import cn.iocoder.yudao.module.bpm.service.message.BpmMessageService; import cn.iocoder.yudao.module.bpm.service.message.BpmMessageService;
import cn.iocoder.yudao.module.bpm.service.oa.BpmOASalaryService; import cn.iocoder.yudao.module.bpm.service.oa.BpmOASalaryService;
import cn.iocoder.yudao.module.bpm.service.task.dto.ProcessInstanceVariablesDTO; import cn.iocoder.yudao.module.bpm.service.task.dto.ProcessInstanceVariablesDTO;
import cn.iocoder.yudao.module.smartfactory.api.factoryInfo.FactoryInfoApi;
import cn.iocoder.yudao.module.smartfactory.api.factoryInfo.dto.FactoryInfoDTO;
import cn.iocoder.yudao.module.system.api.dept.DeptApi; import cn.iocoder.yudao.module.system.api.dept.DeptApi;
import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi; import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
@ -101,9 +99,6 @@ public class BpmTaskServiceImpl implements BpmTaskService {
@Resource @Resource
private DeptApi deptApi; private DeptApi deptApi;
@Resource
private FactoryInfoApi factoryInfoApi;
@Resource @Resource
private BpmTaskExtMapper taskExtMapper; private BpmTaskExtMapper taskExtMapper;
@ -217,45 +212,16 @@ public class BpmTaskServiceImpl implements BpmTaskService {
// 获取薪资付款列表 // 获取薪资付款列表
List<BpmOASalaryDO> salaryDOS = salaryService.getListByProcessInstanceIds(processInstanceIds); List<BpmOASalaryDO> salaryDOS = salaryService.getListByProcessInstanceIds(processInstanceIds);
// 获取公司编号map
Map<String, Long> salaryDeptMap = salaryDOS.stream() Map<String, Long> salaryDeptMap = salaryDOS.stream()
.filter(item -> item.getCompanyDeptId() != null)
.collect(Collectors.toMap(BpmOASalaryDO::getProcessInstanceId, BpmOASalaryDO::getCompanyDeptId)); .collect(Collectors.toMap(BpmOASalaryDO::getProcessInstanceId, BpmOASalaryDO::getCompanyDeptId));
// 获取工厂编号Map
Map<String, Set<Long>> factoryDeptMap = salaryDOS.stream()
.filter(item -> CollUtil.isNotEmpty(item.getFactoryDeptId()))
.collect(Collectors.toMap(BpmOASalaryDO::getProcessInstanceId, BpmOASalaryDO::getFactoryDeptId));
// 获取付款部门信息 // 获取付款部门信息
Map<Long, DeptRespDTO> dtoMap = deptApi.getDeptMap(convertSet(salaryDOS, BpmOASalaryDO::getCompanyDeptId)); Map<Long, DeptRespDTO> dtoMap = deptApi.getDeptMap(convertSet(salaryDOS, BpmOASalaryDO::getCompanyDeptId));
// 获取付款工厂信息
Map<Long, FactoryInfoDTO> factoryInfoDTOMap = factoryInfoApi.getFactoryMap(factoryDeptMap.values()
.stream()
.flatMap(Set::stream)
.collect(Collectors.toSet()));
// 组合数据
Map<String, List<FactoryInfoDTO>> groupedMap = factoryDeptMap.entrySet()
.stream()
.collect(Collectors.toMap(
Map.Entry::getKey,
entry -> entry.getValue().stream()
.map(factoryInfoDTOMap::get)
.filter(Objects::nonNull)
.collect(Collectors.toList())
));
pageResp.getRecords().forEach(item -> { pageResp.getRecords().forEach(item -> {
if (salaryDeptMap.containsKey(item.getProcessInstanceId())) { if (salaryDeptMap.containsKey(item.getProcessInstanceId())) {
item.setStartUserNickname(item.getStartUserNickname() + item.setStartUserNickname(item.getStartUserNickname() +
"(" + "(" +
dtoMap.get(salaryDeptMap.get(item.getProcessInstanceId())).getName() + dtoMap.get(salaryDeptMap.get(item.getProcessInstanceId())).getName() +
")"); ")");
}else if (factoryDeptMap.containsKey(item.getProcessInstanceId())) {
item.setStartUserNickname(item.getStartUserNickname() +
"(" +
groupedMap.get(item.getProcessInstanceId()).stream()
.map(FactoryInfoDTO::getShortName)
.collect(Collectors.joining(",")) +
")");
} }
}); });
@ -297,31 +263,10 @@ public class BpmTaskServiceImpl implements BpmTaskService {
// 获取薪资付款列表 // 获取薪资付款列表
List<BpmOASalaryDO> salaryDOS = salaryService.getListByProcessInstanceIds(processInstanceIds); List<BpmOASalaryDO> salaryDOS = salaryService.getListByProcessInstanceIds(processInstanceIds);
Map<String, Long> salaryDeptMap = salaryDOS.stream() Map<String, Long> salaryDeptMap = salaryDOS.stream()
.filter(item -> item.getCompanyDeptId() != null)
.collect(Collectors.toMap(BpmOASalaryDO::getProcessInstanceId, BpmOASalaryDO::getCompanyDeptId)); .collect(Collectors.toMap(BpmOASalaryDO::getProcessInstanceId, BpmOASalaryDO::getCompanyDeptId));
// 获取付款部门信息 // 获取付款部门信息
Map<Long, DeptRespDTO> dtoMap = deptApi.getDeptMap(convertSet(salaryDOS, BpmOASalaryDO::getCompanyDeptId)); Map<Long, DeptRespDTO> dtoMap = deptApi.getDeptMap(convertSet(salaryDOS, BpmOASalaryDO::getCompanyDeptId));
// 获取工厂编号Map
Map<String, Set<Long>> factoryDeptMap = salaryDOS.stream()
.filter(item -> CollUtil.isNotEmpty(item.getFactoryDeptId()))
.collect(Collectors.toMap(BpmOASalaryDO::getProcessInstanceId, BpmOASalaryDO::getFactoryDeptId));
// 获取付款工厂信息
Map<Long, FactoryInfoDTO> factoryInfoDTOMap = factoryInfoApi.getFactoryMap(factoryDeptMap.values()
.stream()
.flatMap(Set::stream)
.collect(Collectors.toSet()));
// 组合数据
Map<String, List<FactoryInfoDTO>> groupedMap = factoryDeptMap.entrySet()
.stream()
.collect(Collectors.toMap(
Map.Entry::getKey,
entry -> entry.getValue().stream()
.map(factoryInfoDTOMap::get)
.filter(Objects::nonNull)
.collect(Collectors.toList())
));
pageResult.getList().forEach(item -> { pageResult.getList().forEach(item -> {
item.setStartUserNickname(userMap.get(item.getStartUserId()).getNickname()); item.setStartUserNickname(userMap.get(item.getStartUserId()).getNickname());
if (salaryDeptMap.containsKey(item.getProcessInstanceId())) { if (salaryDeptMap.containsKey(item.getProcessInstanceId())) {
@ -329,13 +274,6 @@ public class BpmTaskServiceImpl implements BpmTaskService {
"(" + "(" +
dtoMap.get(salaryDeptMap.get(item.getProcessInstanceId())).getName() + dtoMap.get(salaryDeptMap.get(item.getProcessInstanceId())).getName() +
")"); ")");
}else if (factoryDeptMap.containsKey(item.getProcessInstanceId())) {
item.setStartUserNickname(item.getStartUserNickname() +
"(" +
groupedMap.get(item.getProcessInstanceId()).stream()
.map(FactoryInfoDTO::getShortName)
.collect(Collectors.joining(",")) +
")");
} }
}); });
} }

View File

@ -15,14 +15,11 @@
a.*, a.*,
b.nickname as nickname, b.nickname as nickname,
c.name as deptName, c.name as deptName,
d.nickname as receiveUserNickName, d.nickname as receiveUserNickName
case when ISNULL(a.company_id) THEN sf.short_name ELSE company.short_name END as companyName
from bpm_financial_payment as a from bpm_financial_payment as a
left join system_users as b on a.user_id = b.id left join system_users as b on a.user_id = b.id
left join system_dept as c on b.dept_id = c.id left join system_dept as c on b.dept_id = c.id
left join system_users as d on a.receive_user_id = d.id left join system_users as d on a.receive_user_id = d.id
left join system_dept as company on company.id = a.company_id
left join sf_factory_info as sf on sf.id = a.company_factory_id
<where> <where>
a.deleted = 0 a.deleted = 0
<if test="vo.deptIds != null and vo.deptIds.size() > 0"> <if test="vo.deptIds != null and vo.deptIds.size() > 0">

View File

@ -1,37 +0,0 @@
<?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.BpmOAEvectionMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
<select id="selectEvectionList" resultType="cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAEvectionDO">
SELECT
a.*
FROM
bpm_oa_evection a
WHERE
a.id NOT IN (
SELECT
c.object_id
FROM
bpm_oa_reimbursement b,
bpm_oa_reimbursement_item c
WHERE
b.user_id = #{userId}
AND b.deleted = 0
AND b.id = c.reimbursement_id
AND b.result IN ( 1, 2 )
AND c.type = 1
AND c.object_id IS NOT NULL
)
AND a.user_id = #{userId}
AND a.deleted = 0
ORDER BY
a.create_time DESC
</select>
</mapper>

View File

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?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"> <!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.BpmOAExpensesMapper"> <mapper namespace="cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOAExpensesMapper">
<!-- <!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。 一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。 无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
@ -24,9 +25,7 @@
ub.bank_no AS bankNo, ub.bank_no AS bankNo,
ub.bank_name AS bankName, ub.bank_name AS bankName,
b.total_money AS totalMoney, b.total_money AS totalMoney,
b.process_instance_id AS processInstanceId, b.process_instance_id AS processInstanceId
c.end_time AS endTime,
b.status AS status
FROM bpm_oa_expenses b FROM bpm_oa_expenses b
JOIN bpm_oa_expenses_item a ON a.expenses_id = b.id JOIN bpm_oa_expenses_item a ON a.expenses_id = b.id
JOIN bpm_process_instance_ext c ON c.process_instance_id = b.process_instance_id JOIN bpm_process_instance_ext c ON c.process_instance_id = b.process_instance_id
@ -49,72 +48,14 @@
<if test="pageReqVO.costSection != null"> <if test="pageReqVO.costSection != null">
AND a.cost_section = #{pageReqVO.costSection} AND a.cost_section = #{pageReqVO.costSection}
</if> </if>
<if test="pageReqVO.payeeName != null">
AND ub.nickname LIKE CONCAT('%', #{pageReqVO.payeeName}, '%')
</if>
<if test="pageReqVO.endTime != null and pageReqVO.endTime.length > 0"> <if test="pageReqVO.endTime != null and pageReqVO.endTime.length > 0">
<if test="pageReqVO.endTime[0] != null"> <if test="pageReqVO.endTime[0] != null">
and DATE_FORMAT(c.end_time, '%Y-%m-%d') &gt;= #{pageReqVO.endTime[0]} and c.end_time &gt;= #{pageReqVO.endTime[0]}
</if> </if>
<if test="pageReqVO.endTime[1] != null"> <if test="pageReqVO.endTime[1] != null">
and DATE_FORMAT(c.end_time, '%Y-%m-%d') &lt;= #{pageReqVO.endTime[1]} and c.end_time &lt;= #{pageReqVO.endTime[1]}
</if> </if>
</if> </if>
ORDER BY c.end_time DESC, a.expenses_id ORDER BY c.end_time DESC, a.expenses_id
</select> </select>
<select id="selectTotal" resultType="cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.expenses.BpmOAExpensesTotal">
SELECT
SUM(a.total_money) AS payableAmount,
SUM(a.amount_paid) AS amountPaid,
SUM(a.total_money) - SUM(a.amount_paid) AS remainingPayable
FROM
bpm_oa_expenses a
LEFT JOIN bpm_process_instance_ext c ON c.process_instance_id = a.process_instance_id
LEFT JOIN system_bank ub ON ub.id = a.bank_id
WHERE
a.deleted = 0
AND a.result = 2
<if test="pageReqVO.userId != null">
AND a.user_id = #{pageReqVO.userId}
</if>
AND EXISTS (
SELECT
1
FROM
bpm_oa_expenses_item b
WHERE
b.expenses_id = a.id
<if test="pageReqVO.factoryId != null">
AND b.dept_id = #{pageReqVO.factoryId}
</if>
<if test="pageReqVO.type != null">
AND b.type = #{pageReqVO.type}
</if>
<if test="pageReqVO.costSection != null">
AND b.cost_section = #{pageReqVO.costSection}
</if>
)
<if test="pageReqVO.payeeName != null">
AND ub.nickname LIKE CONCAT('%', #{pageReqVO.payeeName}, '%')
</if>
<if test="pageReqVO.endTime != null and pageReqVO.endTime.length > 0">
<if test="pageReqVO.endTime[0] != null">
and DATE_FORMAT(c.end_time, '%Y-%m-%d') &gt;= #{pageReqVO.endTime[0]}
</if>
<if test="pageReqVO.endTime[1] != null">
and DATE_FORMAT(c.end_time, '%Y-%m-%d') &lt;= #{pageReqVO.endTime[1]}
</if>
</if>
</select>
<update id="oneClickPayment">
UPDATE bpm_oa_expenses e
JOIN bpm_process_instance_ext b ON e.process_instance_id = b.process_instance_id
SET e.STATUS = 1, e.amount_paid = e.total_money
WHERE
e.result = 2
AND e.STATUS != 2
AND DATE_FORMAT( b.end_time, '%Y-%m' ) = #{month}
</update>
</mapper> </mapper>

View File

@ -1,74 +0,0 @@
<?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.BpmOALoanMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
<select id="selectSumByStaffId" resultType="cn.iocoder.yudao.module.bpm.api.oa.vo.loan.BpmOALoanSumDTO">
SELECT
sf_user_id AS sfUserId,
SUM(total_money) AS totalAmount
FROM
bpm_oa_loan
WHERE
deleted = 0
AND result = 2
AND return_date = #{month}
AND sf_user_id IN
<foreach item="item" index="index" collection="staffId" open="(" separator="," close=")">
#{item}
</foreach>
GROUP BY
sf_user_id
</select>
<select id="selectReturnList" resultType="cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.loan.BpmOAReturnVO">
<if test="pageReqVO.loanType == 1">
SELECT
s.staff_id AS staffId,
st.nick_name AS staffName,
s.factory_id AS factoryId,
sf.short_name AS factoryName,
s.month AS month,
s.return_amount AS repaymentAmount,
2 AS type
FROM
sf_staff_salary s
LEFT JOIN sf_staff st ON s.staff_id = st.id
LEFT JOIN sf_factory_info sf ON s.factory_id = sf.id
WHERE
s.staff_id = #{pageReqVO.staffId}
AND s.return_amount &gt; 0
AND s.deleted = 0
AND st.deleted = 0
AND sf.deleted = 0
</if>
<if test="pageReqVO.loanType == 2">
SELECT
e.user_id AS staffId,
u.nickname AS staffName,
d.factory_id AS factoryId,
d.name AS factoryName,
DATE_FORMAT( p.end_time, '%Y-%m' ) AS month,
e.amount_paid AS repaymentAmount,
1 AS type
FROM
bpm_oa_expenses e
LEFT JOIN system_users u ON e.user_id = u.id
LEFT JOIN system_dept d ON u.dept_id = d.id
LEFT JOIN bpm_process_instance_ext p ON e.process_instance_id = p.process_instance_id
WHERE
e.deleted = 0
AND e.result = 2
AND e.status = 2
AND u.deleted = 0
AND d.deleted = 0
AND p.deleted = 0
</if>
</select>
</mapper>

View File

@ -17,8 +17,7 @@
bank.nickname as nickname, bank.nickname as nickname,
bank.bank_no as bankNo, bank.bank_no as bankNo,
bank.bank_name as bankName, bank.bank_name as bankName,
COALESCE(SUM( b.payment_ratio ), 0) + COALESCE(a.payment_ratio,0) AS ratio, COALESCE(SUM( b.payment_ratio ), 0) + COALESCE(a.payment_ratio,0) AS ratio
COALESCE(SUM( b.amount ), 0) + COALESCE(a.amount, 0) AS paymentAmount
FROM FROM
bpm_oa_payment a bpm_oa_payment a
<if test="method != 1"> <if test="method != 1">
@ -36,6 +35,6 @@
GROUP BY GROUP BY
a.id a.id
HAVING HAVING
amount &lt; total_amount ratio &lt; 100
</select> </select>
</mapper> </mapper>

View File

@ -62,24 +62,21 @@
<select id="getReceiptSettlement" <select id="getReceiptSettlement"
resultType="cn.iocoder.yudao.module.bpm.api.oa.vo.receipt.ReceiptSettlementDTO"> resultType="cn.iocoder.yudao.module.bpm.api.oa.vo.receipt.ReceiptSettlementDTO">
SELECT SELECT
a.user_id AS userId, user_id AS userId,
SUM( a.money ) AS money, SUM(money) AS money
SUM( CASE WHEN b.is_channel = 1 THEN a.money ELSE 0 END ) AS channelAmount
FROM FROM
bpm_oa_receipt a bpm_oa_receipt
INNER JOIN bpm_oa_contract c on a.contract_id = c.id
INNER JOIN crm_business b on b.id = c.business_id
WHERE WHERE
deleted = 0 deleted = 0
AND result = 2 AND result = 2
<if test="vo.createTime != null and vo.createTime.length > 0"> <if test="vo.createTime != null and vo.createTime.length > 0">
<if test="vo.createTime[0] != null"> <if test="vo.createTime[0] != null">
and create_time &gt;= #{vo.createTime[0]} and create_time &gt;= #{vo.createTime[0]}
</if>
<if test="vo.createTime[1] != null">
and create_time &lt;= #{vo.createTime[1]}
</if>
</if> </if>
<if test="vo.createTime[1] != null">
and create_time &lt;= #{vo.createTime[1]}
</if>
</if>
GROUP BY user_id GROUP BY user_id
</select> </select>
</mapper> </mapper>

View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>yudao</artifactId>
<version>2.0.0-jdk8-snapshot</version>
</parent>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>yudao-module-crm</artifactId>
<version>2.0.0-jdk8-snapshot</version>
<packaging>pom</packaging>
<name>${project.artifactId}</name>
<description>infra 模块,主要提供两块能力:
1. 我们放基础设施的运维与管理,支撑上层的通用与核心业务。 例如说:定时任务的管理、服务器的信息等等
2. 研发工具,提升研发效率与质量。 例如说:代码生成器、接口文档等等</description>
<modules>
<module>yudao-module-crm-api</module>
<module>yudao-module-crm-biz</module>
</modules>
</project>

View File

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>yudao-module-crm</artifactId>
<version>2.0.0-jdk8-snapshot</version>
</parent>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>yudao-module-crm-api</artifactId>
<version>2.0.0-jdk8-snapshot</version>
<name>${project.artifactId}</name>
<description>infra 模块 API暴露给其它模块调用</description>
<dependencies>
<dependency>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>yudao-common</artifactId>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
</project>

View File

@ -22,9 +22,6 @@ public class CrmContractProductSettlementDTO {
@Schema(description = "数量") @Schema(description = "数量")
private Integer nums; private Integer nums;
@Schema(description = "渠道商转介数量")
private Integer channelNums;
@Schema(description = "折扣") @Schema(description = "折扣")
private BigDecimal discount; private BigDecimal discount;

View File

@ -0,0 +1,153 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>yudao-module-crm</artifactId>
<version>2.0.0-jdk8-snapshot</version>
</parent>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>yudao-module-crm-biz</artifactId>
<version>2.0.0-jdk8-snapshot</version>
<name>${project.artifactId}</name>
<description>infra 模块,主要提供两块能力:
1. 我们放基础设施的运维与管理,支撑上层的通用与核心业务。 例如说:定时任务的管理、服务器的信息等等
2. 研发工具,提升研发效率与质量。 例如说:代码生成器、接口文档等等</description>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<dependency>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>yudao-module-crm-api</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>yudao-module-product-api</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>yudao-module-system-api</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>yudao-spring-boot-starter-banner</artifactId>
</dependency>
<dependency>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>yudao-spring-boot-starter-biz-operatelog</artifactId>
</dependency>
<dependency>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>yudao-spring-boot-starter-biz-tenant</artifactId>
</dependency>
<dependency>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>yudao-spring-boot-starter-biz-error-code</artifactId>
</dependency>
<dependency>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>yudao-spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>yudao-spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>yudao-spring-boot-starter-mybatis</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
</dependency>
<dependency>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>yudao-spring-boot-starter-redis</artifactId>
</dependency>
<dependency>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>yudao-spring-boot-starter-rpc</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>yudao-spring-boot-starter-job</artifactId>
</dependency>
<dependency>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>yudao-spring-boot-starter-mq</artifactId>
</dependency>
<dependency>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>yudao-spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>yudao-spring-boot-starter-excel</artifactId>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
</dependency>
<dependency>
<groupId>cn.smallbun.screw</groupId>
<artifactId>screw-core</artifactId>
</dependency>
<dependency>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>yudao-spring-boot-starter-monitor</artifactId>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
</dependency>
<dependency>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>yudao-spring-boot-starter-file</artifactId>
</dependency>
<dependency>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>yudao-module-bpm-api</artifactId>
<version>2.0.0-jdk8-snapshot</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring.boot.version}</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@ -2,7 +2,6 @@ package cn.iocoder.yudao.module.crm.controller.admin.crmanalysis;
import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.crm.controller.admin.crmanalysis.vo.ContractVO; import cn.iocoder.yudao.module.crm.controller.admin.crmanalysis.vo.ContractVO;
import cn.iocoder.yudao.module.crm.controller.admin.crmanalysis.vo.TimeQueryVO;
import cn.iocoder.yudao.module.crm.service.crmanalysis.RankService; import cn.iocoder.yudao.module.crm.service.crmanalysis.RankService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
@ -29,14 +28,14 @@ public class RankController {
@GetMapping("/contract") @GetMapping("/contract")
@Operation(summary = "获得合同排名") @Operation(summary = "获得合同排名")
public CommonResult<List<ContractVO>> getContractRank(TimeQueryVO vo) { public CommonResult<List<ContractVO>> getContractRank() {
return success(rankService.getContractRank(vo)); return success(rankService.getContractRank());
} }
@GetMapping("/receivables") @GetMapping("/receivables")
@Operation(summary = "获得回款排名") @Operation(summary = "获得回款排名")
public CommonResult<List<ContractVO>> getRecevablesRank(TimeQueryVO vo) { public CommonResult<List<ContractVO>> getRecevablesRank() {
return success(rankService.getReceivablesRank(vo)); return success(rankService.getReceivablesRank());
} }

Some files were not shown because too many files have changed in this diff Show More