diff --git a/common-ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java b/common-ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java index 427cf0b..cb635bb 100644 --- a/common-ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java +++ b/common-ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java @@ -61,8 +61,8 @@ public class SysDept extends BaseEntity /** 父部门名称 */ private String parentName; - @ApiModelProperty("负责人ID") - private Long leaderId; + @ApiModelProperty("负责人ID列表") + private List leaderIds; @Excel(name = "负责工序") @ApiModelProperty("负责工序") diff --git a/common-ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/enums/BusinessType.java b/common-ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/enums/BusinessType.java index b74fed1..63ad879 100644 --- a/common-ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/enums/BusinessType.java +++ b/common-ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/enums/BusinessType.java @@ -73,4 +73,6 @@ public enum BusinessType SUBMIT, // 入库 STOCK_IN, + // 完工 + FINISH, } diff --git a/common-ruoyi/ruoyi-framework/src/main/java/com/ruoyi/framework/util/DataScopeUtil.java b/common-ruoyi/ruoyi-framework/src/main/java/com/ruoyi/framework/util/DataScopeUtil.java index 72eebd5..beea773 100644 --- a/common-ruoyi/ruoyi-framework/src/main/java/com/ruoyi/framework/util/DataScopeUtil.java +++ b/common-ruoyi/ruoyi-framework/src/main/java/com/ruoyi/framework/util/DataScopeUtil.java @@ -51,6 +51,10 @@ public class DataScopeUtil { * 仅本人数据权限 */ public static final String DATA_SCOPE_SELF = "5"; + /** + * 负责部门数据权限 + */ + public static final String DATA_SCOPE_LEADER_DEPT = "6"; public static String dataScope(String deptAlias, String userAlias, boolean needScope) { if (needScope) { @@ -126,6 +130,11 @@ public class DataScopeUtil { sqlString.append(" OR 1=0 "); } } + // 负责部门数据权限 + else if (DATA_SCOPE_LEADER_DEPT.equals(dataScope)) { + String sql = getForeachSql(" OR {}.dept_id in ( SELECT dept_id FROM sys_dept WHERE find_in_set({}, leader_ids) )", deptList, user.getUserId()); + sqlString.append(sql); + } conditions.add(dataScope); } diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/order/domain/enums/OrderStatus.java b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/order/domain/enums/OrderStatus.java index b75d721..9d40318 100644 --- a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/order/domain/enums/OrderStatus.java +++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/order/domain/enums/OrderStatus.java @@ -44,4 +44,9 @@ public enum OrderStatus { public static List asList(OrderStatus ...statuses) { return CollectionUtils.map(OrderStatus::getStatus, statuses); } + + // 允许上报产量的状态 + public static List canAddStore() { + return asList(RELEASED); + } } diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/order/service/OrderService.java b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/order/service/OrderService.java index 254d15a..41a0ed0 100644 --- a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/order/service/OrderService.java +++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/order/service/OrderService.java @@ -77,4 +77,9 @@ public interface OrderService * 逻辑删除 */ int logicDel(Long id); + + /** + * 完成订单 + */ + int finish(Long id); } diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/order/service/impl/OrderServiceImpl.java b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/order/service/impl/OrderServiceImpl.java index acd6b94..21cde18 100644 --- a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/order/service/impl/OrderServiceImpl.java +++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/order/service/impl/OrderServiceImpl.java @@ -6,6 +6,7 @@ import com.ruoyi.bst.order.domain.OrderQuery; import com.ruoyi.bst.order.domain.OrderVO; import com.ruoyi.bst.order.domain.enums.OrderStatus; import com.ruoyi.bst.order.mapper.OrderMapper; +import com.ruoyi.bst.order.service.OrderAssembler; import com.ruoyi.bst.order.service.OrderService; import com.ruoyi.bst.order.service.OrderValidator; import com.ruoyi.bst.orderProd.domain.OrderProd; @@ -25,6 +26,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.support.TransactionTemplate; +import java.math.BigDecimal; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @@ -52,6 +55,9 @@ public class OrderServiceImpl implements OrderService @Autowired private IProdProcessService prodProcessService; + @Autowired + private OrderAssembler orderAssembler; + /** * 查询生产订单 * @@ -214,6 +220,28 @@ public class OrderServiceImpl implements OrderService return result == null ? 0 : result; } + @Override + public int finish(Long id) { + if (id == null) { + return 0; + } + // 校验 + OrderVO old = selectOrderById(id); + ServiceUtil.assertion(old == null, "待完工的订单不存在"); + ServiceUtil.assertion(!OrderStatus.canFinished().contains(old.getStatus()), "当前订单状态不允许完工"); + + orderAssembler.assembleProgress(Collections.singletonList(old)); + ServiceUtil.assertion(old.getProgress().compareTo(new BigDecimal("100")) < 0, "当前订单进度:%s%%,暂不满足完工条件:100%%", old.getProgress()); + + // 更新订单状态 + Order data = new Order(); + data.setStatus(OrderStatus.FINISHED.getStatus()); + OrderQuery query = new OrderQuery(); + query.setId(id); + query.setStatusList(OrderStatus.canFinished()); + return updateByQuery(data, query); + } + private int updateByQuery(Order data, OrderQuery query) { return orderMapper.updateByQuery(data, query); } diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/domain/ProdProcessQuery.java b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/domain/ProdProcessQuery.java index 311c196..2c7c502 100644 --- a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/domain/ProdProcessQuery.java +++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/domain/ProdProcessQuery.java @@ -20,4 +20,7 @@ public class ProdProcessQuery extends ProdProcessVO{ @ApiModelProperty("ID列表") private List ids; + + @ApiModelProperty("订单状态列表") + private List orderStatusList; } diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/domain/ProdProcessVO.java b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/domain/ProdProcessVO.java index 30fd63d..558f5a6 100644 --- a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/domain/ProdProcessVO.java +++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/domain/ProdProcessVO.java @@ -19,6 +19,9 @@ public class ProdProcessVO extends ProdProcess{ @ApiModelProperty("订单编号") private String orderNo; + @ApiModelProperty("订单状态") + private String orderStatus; + @ApiModelProperty("生产车间名称") private String deptName; diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/mapper/ProdProcessMapper.xml b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/mapper/ProdProcessMapper.xml index b44edf6..cf030ad 100644 --- a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/mapper/ProdProcessMapper.xml +++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/mapper/ProdProcessMapper.xml @@ -25,6 +25,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" bop.name as order_prod_name, bop.order_id as order_id, bo.order_no as order_no, + bo.status as order_status, sd.dept_name as dept_name from bst_prod_process bpp left join bst_order_prod bop on bop.id = bpp.order_prod_id @@ -49,6 +50,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and bop.name like concat('%', #{query.orderProdName}, '%') and sd.dept_name like concat('%', #{query.deptName}, '%') and bop.order_id = #{query.orderId} + and bo.status = #{query.orderStatus} and bpp.order_prod_id in @@ -67,6 +69,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{item} + + and bo.status in + + #{item} + + ${query.params.dataScope} diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/store/domain/StoreVO.java b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/store/domain/StoreVO.java index 1f6e2de..8f04738 100644 --- a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/store/domain/StoreVO.java +++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/store/domain/StoreVO.java @@ -25,6 +25,9 @@ public class StoreVO extends Store{ @ApiModelProperty("工序部门ID") private Long processDeptId; + @ApiModelProperty("是否最终工序") + private Boolean processIsEnd; + @ApiModelProperty("负责工序") private String deptProcess; diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/store/mapper/StoreMapper.xml b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/store/mapper/StoreMapper.xml index b9aaa5d..1378944 100644 --- a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/store/mapper/StoreMapper.xml +++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/store/mapper/StoreMapper.xml @@ -26,6 +26,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" bop.order_id as order_id, bpp.dept_id as process_dept_id, bpp.dept_process as dept_process, + bpp.is_end as process_is_end, sd.dept_name as process_dept_name from bst_store bs left join bst_prod_process bpp on bpp.id = bs.process_id diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/store/service/StoreValidator.java b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/store/service/StoreValidator.java new file mode 100644 index 0000000..ed8bb19 --- /dev/null +++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/store/service/StoreValidator.java @@ -0,0 +1,16 @@ +package com.ruoyi.bst.store.service; + +import com.ruoyi.bst.store.domain.Store; + +/** + * @author wjh + * 2024/12/21 + */ +public interface StoreValidator { + + /** + * 新增前校验 + */ + void checkBefore(Store data); + +} diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/store/service/impl/StoreServiceImpl.java b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/store/service/impl/StoreServiceImpl.java index b3e4e92..94f109e 100644 --- a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/store/service/impl/StoreServiceImpl.java +++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/store/service/impl/StoreServiceImpl.java @@ -7,6 +7,7 @@ import com.ruoyi.bst.store.domain.enums.StoreGroupBy; import com.ruoyi.bst.store.domain.enums.StoreStatus; import com.ruoyi.bst.store.mapper.StoreMapper; import com.ruoyi.bst.store.service.IStoreService; +import com.ruoyi.bst.store.service.StoreValidator; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.ServiceUtil; @@ -32,6 +33,9 @@ public class StoreServiceImpl implements IStoreService @Autowired private StoreMapper storeMapper; + @Autowired + private StoreValidator storeValidator; + @Autowired private TransactionTemplate transactionTemplate; @@ -66,8 +70,10 @@ public class StoreServiceImpl implements IStoreService * @return 结果 */ @Override - public int insertStore(Store store) - { + public int insertStore(Store store) { + // 校验数据 + storeValidator.checkBefore(store); + store.setCreateTime(DateUtils.getNowDate()); return storeMapper.insertStore(store); } diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/store/service/impl/StoreValidatorImpl.java b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/store/service/impl/StoreValidatorImpl.java new file mode 100644 index 0000000..ef7a3d9 --- /dev/null +++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/store/service/impl/StoreValidatorImpl.java @@ -0,0 +1,38 @@ +package com.ruoyi.bst.store.service.impl; + +import com.ruoyi.bst.order.domain.enums.OrderStatus; +import com.ruoyi.bst.prodProcess.domain.ProdProcessVO; +import com.ruoyi.bst.prodProcess.service.IProdProcessService; +import com.ruoyi.bst.store.domain.Store; +import com.ruoyi.bst.store.service.StoreValidator; +import com.ruoyi.common.utils.ServiceUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * @author wjh + * 2024/12/21 + */ +@Service +public class StoreValidatorImpl implements StoreValidator { + + @Autowired + private IProdProcessService prodProcessService; + + /** + * 新增前校验 + * + * @param data + */ + @Override + public void checkBefore(Store data) { + ServiceUtil.assertion(data == null, "参数错误"); + + // 校验工序 + ServiceUtil.assertion(data.getProcessId() == null, "工序不允许为空"); + ProdProcessVO process = prodProcessService.selectProdProcessById(data.getProcessId()); + ServiceUtil.assertion(process == null, "待上报的工序不存在"); + ServiceUtil.assertion(!OrderStatus.canAddStore().contains(process.getOrderStatus()), "当前工序的订单状态不允许上报"); + + } +} diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/system/dept/domain/SysDeptQuery.java b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/system/dept/domain/SysDeptQuery.java index 4a6cf01..2f5aa73 100644 --- a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/system/dept/domain/SysDeptQuery.java +++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/system/dept/domain/SysDeptQuery.java @@ -24,4 +24,10 @@ public class SysDeptQuery extends SysDeptVO { @ApiModelProperty("排除部门ID列表") private List excludeDeptIds; + + @ApiModelProperty("负责人名称") + private String leaderName; + + @ApiModelProperty("负责人ID") + private Long leaderId; } diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/system/dept/domain/SysDeptVO.java b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/system/dept/domain/SysDeptVO.java index 4b4c2b3..bc05238 100644 --- a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/system/dept/domain/SysDeptVO.java +++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/system/dept/domain/SysDeptVO.java @@ -1,9 +1,12 @@ package com.ruoyi.system.dept.domain; import com.ruoyi.common.core.domain.entity.SysDept; +import com.ruoyi.system.user.domain.SysUserVO; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * @author wjh * 2024/12/19 @@ -11,6 +14,7 @@ import lombok.Data; @Data public class SysDeptVO extends SysDept { - @ApiModelProperty("负责人名称") - private String leaderName; + @ApiModelProperty("负责人列表") + private List leaderList; + } diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/system/dept/mapper/SysDeptMapper.xml b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/system/dept/mapper/SysDeptMapper.xml index 9e9ccd2..533d45d 100644 --- a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/system/dept/mapper/SysDeptMapper.xml +++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/system/dept/mapper/SysDeptMapper.xml @@ -4,7 +4,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + + + + + + + + select @@ -22,13 +29,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" d.create_time, d.erp_id, d.erp_number, - d.leader_id, + d.leader_ids, d.process, p.dept_name as parent_name, + l.user_id as leader_id, l.nick_name as leader_name from sys_dept d left join sys_dept p on d.parent_id = p.dept_id - left join sys_user l on l.user_id = d.leader_id + left join sys_user l on find_in_set(l.user_id, d.leader_ids)