gongchunyi
8 小时以前 768b011a17b9e63e4b6570989824152145952eda
feat: 排产指派工人进行报工
已添加1个文件
已修改4个文件
130 ■■■■ 文件已修改
doc/长治-祥雨远见.sql 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/pojo/ProductWorkOrder.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/impl/ProductWorkOrderServiceImpl.java 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/production/ProductWorkOrderMapper.xml 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
doc/³¤ÖÎ-ÏéÓêÔ¶¼û.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,5 @@
ALTER TABLE `product_work_order`
    ADD COLUMN `worker_id`          bigint       NULL COMMENT '指派工人ID',
    ADD COLUMN `worker_name`        varchar(100) NULL COMMENT '指派工人姓名',
    ADD COLUMN `handover_user_id`   bigint       NULL COMMENT '交接人员ID',
    ADD COLUMN `handover_user_name` varchar(100) NULL COMMENT '交接人员名称';
src/main/java/com/ruoyi/production/pojo/ProductWorkOrder.java
@@ -122,4 +122,28 @@
    private BigDecimal completeQuantity;
    /**
     * æŒ‡æ´¾å·¥äººID
     */
    @ApiModelProperty(value = "指派工人ID")
    private Long workerId;
    /**
     * æŒ‡æ´¾å·¥äººå§“名
     */
    @ApiModelProperty(value = "指派工人姓名")
    private String workerName;
    /**
     * äº¤æŽ¥äººå‘˜ID
     */
    @ApiModelProperty(value = "交接人员ID")
    private Long handoverUserId;
    /**
     * äº¤æŽ¥äººå‘˜åç§°
     */
    @ApiModelProperty(value = "交接人员名称")
    private String handoverUserName;
}
src/main/java/com/ruoyi/production/service/impl/ProductWorkOrderServiceImpl.java
@@ -7,10 +7,9 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.data.PictureRenderData;
import com.deepoove.poi.data.Pictures;
import com.ruoyi.common.utils.HackLoopTableRenderPolicy;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.MatrixToImageWriter;
import com.ruoyi.production.dto.ProductWorkOrderDto;
import com.ruoyi.production.mapper.ProductWorkOrderFileMapper;
@@ -18,8 +17,8 @@
import com.ruoyi.production.pojo.ProductWorkOrder;
import com.ruoyi.production.pojo.ProductWorkOrderFile;
import com.ruoyi.production.service.ProductWorkOrderService;
import com.ruoyi.quality.pojo.QualityInspectParam;
import lombok.AllArgsConstructor;
import com.ruoyi.project.system.domain.SysUser;
import com.ruoyi.project.system.mapper.SysUserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@@ -46,16 +45,42 @@
    @Value("${file.temp-dir}")
    private String tempDir;
    @Autowired
    private SysUserMapper sysUserMapper;
    @Override
    public IPage<ProductWorkOrderDto> listPage(Page<ProductWorkOrderDto> page, ProductWorkOrderDto productWorkOrder) {
        return productWorkOrdermapper.pageProductWorkOrder(page, productWorkOrder);
    }
    @Override
    public int updateProductWorkOrder(ProductWorkOrderDto productWorkOrderDto) {
        return productWorkOrdermapper.updateById(productWorkOrderDto);
    }
    @Transactional(rollbackFor = Exception.class)
    public int updateProductWorkOrder(ProductWorkOrderDto dto) {
        if (dto == null) {
            throw new ServiceException("指派失败,数据不能为空");
        }
        if (dto.getWorkerId() == null) {
            throw new ServiceException("指派失败,指派工人不能为空");
        }
        SysUser worker = sysUserMapper.selectUserById(dto.getWorkerId());
        if (worker == null) {
            throw new ServiceException("指派失败,指派工人不存在");
        }
        if (dto.getHandoverUserId() != null) {
            if (dto.getWorkerId().equals(dto.getHandoverUserId())) {
                throw new ServiceException("交接失败,交接人不能与指派工人相同");
            }
            SysUser handoverUser = sysUserMapper.selectUserById(dto.getHandoverUserId());
            if (handoverUser == null) {
                throw new ServiceException("交接失败,交接人员不存在");
            }
            dto.setHandoverUserName(handoverUser.getNickName());
        }
        dto.setWorkerName(worker.getNickName());
        return productWorkOrdermapper.updateById(dto);
    }
    @Override
    public void down(HttpServletResponse response, ProductWorkOrder productWorkOrder) {
        ProductWorkOrderDto productWorkOrderDto = productWorkOrdermapper.getProductWorkOrderFlowCard(productWorkOrder.getId());
src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -92,6 +92,25 @@
    @Override
    public Boolean addProductMain(ProductionProductMainDto dto) {
        ProductWorkOrder workOrder = productWorkOrderMapper.selectById(dto.getWorkOrderId());
        if (workOrder == null) {
            throw new ServiceException("报工失败,工单不存在");
        }
        Long currentUserId = dto.getUserId();
        Long workerId = workOrder.getWorkerId();
        Long handoverUserId = workOrder.getHandoverUserId();
        boolean isWorker = workerId != null && workerId.equals(currentUserId);
        boolean isHandover = handoverUserId != null && handoverUserId.equals(currentUserId);
        if (!isWorker) {
            // ä¸æ˜¯æŒ‡æ´¾å·¥äºº
            if (handoverUserId == null) {
                throw new ServiceException("报工失败,当前工单未交接,只有指派工人可以报工");
            }
            if (!isHandover) {
                throw new ServiceException("报工失败,你不是该工单的交接人员");
            }
        }
        SysUser user = userMapper.selectUserById(dto.getUserId());
        ProductionProductMain productionProductMain = new ProductionProductMain();
        //当前工艺路线对应的工序详情
@@ -207,7 +226,7 @@
                                qualityInspectParamMapper.insert(param);
                            });
                }
            }else {
            } else {
                //直接入库
                stockUtils.addStock(productProcessRouteItem.getProductModelId(), productQty, StockInQualifiedRecordTypeEnum.PRODUCTION_REPORT_STOCK_IN.getCode(), productionProductMain.getId());
            }
@@ -264,10 +283,10 @@
    public Boolean removeProductMain(Long id) {
        //判断该条报工是否不合格处理,如果不合格处理了,则不允许删除
        List<QualityInspect> qualityInspects = qualityInspectMapper.selectList(Wrappers.<QualityInspect>lambdaQuery().eq(QualityInspect::getProductMainId, id));
        if (qualityInspects.size() > 0){
        if (qualityInspects.size() > 0) {
            List<QualityUnqualified> qualityUnqualifieds = qualityUnqualifiedMapper.selectList(Wrappers.<QualityUnqualified>lambdaQuery()
                    .in(QualityUnqualified::getInspectId, qualityInspects.stream().map(QualityInspect::getId).collect(Collectors.toList())));
            if (qualityUnqualifieds.size() > 0 && qualityUnqualifieds.get(0).getInspectState()==1) {
            if (qualityUnqualifieds.size() > 0 && qualityUnqualifieds.get(0).getInspectState() == 1) {
                throw new ServiceException("该条报工已经不合格处理了,不允许删除");
            }
        }
@@ -321,7 +340,7 @@
                    new LambdaQueryWrapper<QualityInspectParam>()
                            .eq(QualityInspectParam::getInspectId, q.getId()));
            qualityInspectMapper.deleteById(q.getId());
                stockUtils.deleteStockInRecord(q.getId(), StockInQualifiedRecordTypeEnum.QUALITYINSPECT_STOCK_IN.getCode());
            stockUtils.deleteStockInRecord(q.getId(), StockInQualifiedRecordTypeEnum.QUALITYINSPECT_STOCK_IN.getCode());
        });
        // åˆ é™¤äº§å‡ºè®°å½•
src/main/resources/mapper/production/ProductWorkOrderMapper.xml
@@ -5,17 +5,24 @@
<mapper namespace="com.ruoyi.production.mapper.ProductWorkOrderMapper">
    <resultMap id="BaseResultMap" type="com.ruoyi.production.pojo.ProductWorkOrder">
        <result column="id" property="id"/>
        <id column="id" property="id"/>
        <result column="product_process_route_item_id" property="productProcessRouteItemId"/>
        <result column="product_order_id" property="productOrderId"/>
        <result column="create_time" property="createTime"/>
        <result column="update_time" property="updateTime"/>
        <result column="work_order_no" property="workOrderNo"/>
        <result column="status" property="status"/>
        <result column="tenant_id" property="tenantId"/>
        <result column="actual_end_time" property="planStartTime"/>
        <result column="plan_start_time" property="planStartTime"/>
        <result column="plan_end_time" property="planEndTime"/>
        <result column="actual_start_time" property="actualStartTime"/>
        <result column="actualEndTime" property="actualEndTime"/>
        <result column="actual_end_time" property="actualEndTime"/>
        <result column="plan_quantity" property="planQuantity"/>
        <result column="complete_quantity" property="completeQuantity"/>
        <result column="worker_id" property="workerId"/>
        <result column="worker_name" property="workerName"/>
        <result column="handover_user_id" property="handoverUserId"/>
        <result column="handover_user_name" property="handoverUserName"/>
    </resultMap>
    <select id="pageProductWorkOrder" resultType="com.ruoyi.production.dto.ProductWorkOrderDto">
@@ -39,16 +46,20 @@
        LEFT JOIN product_model pm ON pm.id = ppri.product_model_id
        LEFT JOIN product p ON p.id = pm.product_id
        where 1=1
            <if test="c.workOrderNo != null and c.workOrderNo != ''">
               and pwo.work_order_no like concat('%',#{c.workOrderNo},'%')
            </if>
            <if test="c.planStartTime != null and c.planEndTime != null">
                and DATE(pwo.create_time) between #{c.planStartTime} and #{c.planEndTime}
            </if>
            <if test="c.productOrderId != null and c.productOrderId != ''">
               and pwo.product_order_id = #{c.productOrderId}
            </if>
        <if test="c.workOrderNo != null and c.workOrderNo != ''">
            and pwo.work_order_no like concat('%',#{c.workOrderNo},'%')
        </if>
        <if test="c.workerName != null and c.workerName != ''">
            and (pwo.worker_name like concat('%',#{c.workerName},'%') or pwo.handover_user_name like concat('%',#{c.workerName},'%'))
        </if>
        <if test="c.planStartTime != null and c.planEndTime != null">
            and DATE(pwo.create_time) between #{c.planStartTime} and #{c.planEndTime}
        </if>
        <if test="c.productOrderId != null and c.productOrderId != ''">
            and pwo.product_order_id = #{c.productOrderId}
        </if>
    </select>
    <select id="getProductWorkOrderFlowCard" resultType="com.ruoyi.production.dto.ProductWorkOrderDto">
        SELECT
        pwo.*,