廖泽勇 il y a 1 mois
Parent
commit
6381043b2f

+ 27 - 0
src/main/java/com/jsh/erp/controller/pda/PdaController.java

@@ -7,12 +7,15 @@ import com.jsh.erp.base.TableDataInfo;
 import com.jsh.erp.datasource.entities.DepotHead;
 import com.jsh.erp.datasource.entities.Supplier;
 import com.jsh.erp.datasource.pda.dto.PDADepotHeadDTO;
+import com.jsh.erp.datasource.pda.dto.PDATaskStocktakingDTO;
 import com.jsh.erp.datasource.pda.vo.PDADepotHeadVO;
 import com.jsh.erp.datasource.pda.vo.PDADepotItemVO;
+import com.jsh.erp.datasource.pda.vo.PDATaskStocktakingVO;
 import com.jsh.erp.query.LambdaQueryWrapperX;
 import com.jsh.erp.service.DepotHeadService;
 import com.jsh.erp.service.DepotItemService;
 import com.jsh.erp.service.SupplierService;
+import com.jsh.erp.service.TaskStocktakingService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiOperation;
@@ -35,6 +38,9 @@ public class PdaController extends BaseController {
     @Resource
     private SupplierService supplierService;
 
+    @Resource
+    private TaskStocktakingService taskStocktakingService;
+
     /**
      * 采购入库
      * @return
@@ -99,6 +105,27 @@ public class PdaController extends BaseController {
         return getDataTable(list);
     }
 
+    @ApiOperation("盘点任务列表")
+    @PostMapping("/taskStocktakingList")
+    public TableDataInfo taskStocktakingList(@RequestBody PDATaskStocktakingDTO pdaTaskStocktakingDTO) {
+        startPage();
+        List<PDATaskStocktakingVO> list = taskStocktakingService.pdaList(pdaTaskStocktakingDTO.getNumber(), pdaTaskStocktakingDTO.getStatus());
+        return getDataTable(list);
+    }
+
+//    @ApiModelProperty(value = "盘点任务详情-商品列表")
+//    @GetMapping("/taskStocktakingItemList/{taskId}")
+//    public TableDataInfo taskStocktakingItemList(@PathVariable("taskId") Long taskId){
+//        startPage();
+//        return getDataTable();
+//    }
+
+    @ApiModelProperty("盘点任务详情")
+    @GetMapping("/taskStocktakingDetail/{taskId}")
+    public AjaxResult taskStocktakingDetail(@PathVariable("taskId") Long taskId) {
+        return AjaxResult.success();
+    }
+
     @ApiOperation("用于返回字段说明")
     @GetMapping("test")
     public AjaxResult test(PDADepotItemVO pdaDepotItemVO) {

+ 24 - 4
src/main/java/com/jsh/erp/controller/stocktaking/StocktakingController.java

@@ -6,14 +6,16 @@ import com.jsh.erp.base.BaseController;
 import com.jsh.erp.base.TableDataInfo;
 import com.jsh.erp.datasource.dto.TaskStocktakingDTO;
 import com.jsh.erp.datasource.dto.TaskStocktakingItemDTO;
-import com.jsh.erp.datasource.entities.TaskStocktaking;
 import com.jsh.erp.datasource.entities.TaskStocktakingItem;
+import com.jsh.erp.datasource.entities.User;
 import com.jsh.erp.datasource.vo.SpinnerVO;
-import com.jsh.erp.query.LambdaQueryWrapperX;
+import com.jsh.erp.datasource.vo.TaskStocktakingVO;
 import com.jsh.erp.service.TaskStocktakingItemService;
 import com.jsh.erp.service.TaskStocktakingService;
 import com.jsh.erp.service.UserService;
+import com.jsh.erp.utils.DateUtils;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.web.bind.annotation.*;
 
@@ -38,7 +40,7 @@ public class StocktakingController extends BaseController {
     @PostMapping("/list")
     public TableDataInfo list(){
         startPage();
-        List<TaskStocktaking> list = taskStocktakingService.list();
+        List<TaskStocktakingVO> list = taskStocktakingService.listBy();
         return getDataTable(list);
     }
 
@@ -61,6 +63,7 @@ public class StocktakingController extends BaseController {
      * @param id
      * @return
      */
+    @ApiModelProperty("任务详情")
     @GetMapping("/detail/{id}")
     public AjaxResult detail(@PathVariable("id") Long id) throws Exception{
         return AjaxResult.success(taskStocktakingService.detail(id));
@@ -71,6 +74,7 @@ public class StocktakingController extends BaseController {
      * @param taskStocktakingId 任务ID
      * @return
      */
+    @ApiModelProperty("任务详情-商品列表")
     @GetMapping("/detailByItemList/{taskStocktakingId}")
     public AjaxResult detailByItemList(@PathVariable("taskStocktakingId") Long taskStocktakingId) {
         return AjaxResult.success(taskStocktakingService.listByTaskStocktakingId(taskStocktakingId));
@@ -80,15 +84,31 @@ public class StocktakingController extends BaseController {
      * 任务详情-商品列表-编辑
      * @return
      */
+    @ApiModelProperty("任务详情-商品-编辑")
     @PostMapping("/itemUpdate")
-    public AjaxResult itemUpdate(@RequestBody TaskStocktakingItemDTO taskStocktakingItemDTO) {
+    public AjaxResult itemUpdate(@RequestBody TaskStocktakingItemDTO taskStocktakingItemDTO) throws Exception {
+        User currentUser = userService.getCurrentUser();
         taskStocktakingItemService.update(new UpdateWrapper<TaskStocktakingItem>()
                 .set("new_inventory", taskStocktakingItemDTO.getNewInventory())
                 .set("new_position", taskStocktakingItemDTO.getNewPosition())
                 .set("difference_count", taskStocktakingItemDTO.getDifferenceCount())
                 .set("difference_reason", taskStocktakingItemDTO.getDifferenceReason())
+                .set("creator", currentUser.getId())
+                .set("oper_time", DateUtils.getTime())
                 .eq("id", taskStocktakingItemDTO.getId()));
         return AjaxResult.success();
     }
 
+    /**
+     * 任务详情-商品-删除
+     * @param id 商品ID
+     * @return
+     */
+    @ApiModelProperty("任务详情-商品-删除")
+    @GetMapping("/itemDelete/{id}")
+    public AjaxResult itemDelete(@PathVariable("id") Long id) {
+        taskStocktakingItemService.update(new UpdateWrapper<TaskStocktakingItem>().set("delete_flag", true).eq("id", id));
+        return AjaxResult.success();
+    }
+
 }

+ 9 - 0
src/main/java/com/jsh/erp/datasource/entities/TaskStocktaking.java

@@ -37,6 +37,9 @@ public class TaskStocktaking {
     @ApiModelProperty("任务单号")
     private String number;
 
+    @ApiModelProperty("种类数")
+    private Integer categoryCount;
+
     @ApiModelProperty("商品数")
     private int materialCount;
 
@@ -49,4 +52,10 @@ public class TaskStocktaking {
     @ApiModelProperty("删除标记,0.未删除,1.已删除")
     private boolean deleteFlag;
 
+    @ApiModelProperty("盘点人")
+    private Long operBy;
+
+    @ApiModelProperty("盘点时间")
+    private Date operTime;
+
 }

+ 1 - 0
src/main/java/com/jsh/erp/datasource/mappers/TaskStocktakingItemMapper.java

@@ -2,6 +2,7 @@ package com.jsh.erp.datasource.mappers;
 
 import com.jsh.erp.datasource.entities.TaskStocktakingItem;
 import com.jsh.erp.datasource.vo.TaskStocktakingItemVO;
+import com.jsh.erp.datasource.vo.TaskStocktakingVO;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;

+ 9 - 0
src/main/java/com/jsh/erp/datasource/mappers/TaskStocktakingMapper.java

@@ -1,6 +1,15 @@
 package com.jsh.erp.datasource.mappers;
 
 import com.jsh.erp.datasource.entities.TaskStocktaking;
+import com.jsh.erp.datasource.pda.vo.PDATaskStocktakingVO;
+import com.jsh.erp.datasource.vo.TaskStocktakingVO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 public interface TaskStocktakingMapper extends BaseMapperX<TaskStocktaking> {
+
+    List<TaskStocktakingVO> listBy();
+
+    List<PDATaskStocktakingVO> pdaList(@Param("number") String number , @Param("taskStatus") Integer taskStatus);
 }

+ 15 - 0
src/main/java/com/jsh/erp/datasource/pda/dto/PDATaskStocktakingDTO.java

@@ -0,0 +1,15 @@
+package com.jsh.erp.datasource.pda.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class PDATaskStocktakingDTO {
+
+    @ApiModelProperty("任务状态")
+    private Integer status;
+
+    @ApiModelProperty("任务单号")
+    private String number;
+
+}

+ 47 - 0
src/main/java/com/jsh/erp/datasource/pda/vo/PDATaskStocktakingVO.java

@@ -0,0 +1,47 @@
+package com.jsh.erp.datasource.pda.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class PDATaskStocktakingVO {
+
+    @ApiModelProperty("任务ID")
+    private Long id;
+
+    @ApiModelProperty("任务名称")
+    private String taskName;
+
+    @ApiModelProperty("任务单号")
+    private String number;
+
+    @ApiModelProperty("仓库名称")
+    private String depotName;
+
+    @ApiModelProperty("创建人名称")
+    private String createByName;
+
+    @ApiModelProperty("负责人名称")
+    private String creatorName;
+
+    @ApiModelProperty("种类数")
+    private Integer categoryCount;
+
+    @ApiModelProperty("商品数")
+    private Integer materialCount;
+
+    @ApiModelProperty("盘点人名称")
+    private String operName;
+
+    @ApiModelProperty("创建时间")
+    private Date createTime;
+
+    @ApiModelProperty("盘点时间")
+    private Date operTime;
+
+    @ApiModelProperty("任务状态 0.未开始,1.进行中,2.已完成,3.已取消")
+    private Integer taskStatus;
+
+}

+ 3 - 0
src/main/java/com/jsh/erp/datasource/vo/TaskStocktakingItemVO.java

@@ -20,6 +20,9 @@ public class TaskStocktakingItemVO {
     @ApiModelProperty("任务ID")
     private Long taskStocktakingId;
 
+    @ApiModelProperty("商品种类名称")
+    private String categoryName;
+
     @ApiModelProperty("商品ID")
     private Long materialItemId;
 

+ 15 - 0
src/main/java/com/jsh/erp/service/TaskStocktakingService.java

@@ -3,6 +3,7 @@ package com.jsh.erp.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.jsh.erp.datasource.dto.TaskStocktakingDTO;
 import com.jsh.erp.datasource.entities.TaskStocktaking;
+import com.jsh.erp.datasource.pda.vo.PDATaskStocktakingVO;
 import com.jsh.erp.datasource.vo.TaskStocktakingItemVO;
 import com.jsh.erp.datasource.vo.TaskStocktakingVO;
 
@@ -11,6 +12,12 @@ import java.util.List;
 public interface TaskStocktakingService extends IService<TaskStocktaking> {
 
     /**
+     *
+     * @return
+     */
+    List<TaskStocktakingVO> listBy();
+
+    /**
      * 新增任务
      * @param taskStocktakingDTO
      * @return
@@ -30,5 +37,13 @@ public interface TaskStocktakingService extends IService<TaskStocktaking> {
      */
     List<TaskStocktakingItemVO> listByTaskStocktakingId(Long taskStocktakingId);
 
+    /**
+     * PDA-盘点任务列表
+     * @param number 盘点单号或者任务名称
+     * @param taskStatus 盘点任务状态
+     * @return
+     */
+    List<PDATaskStocktakingVO> pdaList(String number , Integer taskStatus);
+
 
 }

+ 74 - 12
src/main/java/com/jsh/erp/service/impl/TaskStocktakingServiceImpl.java

@@ -1,27 +1,30 @@
 package com.jsh.erp.service.impl;
 
+import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.jsh.erp.datasource.dto.TaskStocktakingDTO;
 import com.jsh.erp.datasource.entities.*;
-import com.jsh.erp.datasource.mappers.MaterialExtendMapper;
-import com.jsh.erp.datasource.mappers.TaskStocktakingItemMapper;
-import com.jsh.erp.datasource.mappers.TaskStocktakingMapper;
-import com.jsh.erp.datasource.mappers.UserMapper;
+import com.jsh.erp.datasource.mappers.*;
+import com.jsh.erp.datasource.pda.vo.PDATaskStocktakingVO;
 import com.jsh.erp.datasource.vo.TaskStocktakingItemVO;
 import com.jsh.erp.datasource.vo.TaskStocktakingVO;
 import com.jsh.erp.query.LambdaQueryWrapperX;
 import com.jsh.erp.service.DepotService;
 import com.jsh.erp.service.TaskStocktakingService;
+import com.jsh.erp.service.UserService;
+import com.jsh.erp.utils.DateUtils;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -39,22 +42,70 @@ public class TaskStocktakingServiceImpl extends ServiceImpl<TaskStocktakingMappe
 
     private final TaskStocktakingItemMapper taskStocktakingItemMapper;
 
+    private final TaskStocktakingMapper taskStocktakingMapper;
+
+    private final MaterialMapper materialMapper;
+
+    private final UserService userService;
+
+    @Override
+    public List<TaskStocktakingVO> listBy() {
+        return taskStocktakingMapper.listBy();
+    }
+
     /**
      * 创建盘点任务
      * @param taskStocktakingDTO
      * @return
      */
     @Override
+    @Transactional(value = "transactionManager", rollbackFor = Exception.class)
     public boolean add(TaskStocktakingDTO taskStocktakingDTO) {
-        //商品库位范围处理
-        List<String> collect;
-        if (taskStocktakingDTO.getTaskType() == 1) {
-            collect = materialExtendMapper.selectList(new LambdaQueryWrapper<MaterialExtend>().ne(MaterialExtend::getInventory, BigDecimal.ZERO)).stream().map(MaterialExtend::getPosition).collect(Collectors.toList());
-        } else {
-            collect = materialExtendMapper.selectList(new LambdaQueryWrapper<MaterialExtend>().in(MaterialExtend::getId, taskStocktakingDTO.getMaterialExtendIdList())).stream().map(MaterialExtend::getPosition).collect(Collectors.toList());
+        try {
+            List<String> collect;
+            List<MaterialExtend> materialExtendList;
+            //全盘,抽盘,处理任务明细
+            if (taskStocktakingDTO.getTaskType() == 1) {
+                materialExtendList = materialExtendMapper.selectList(new LambdaQueryWrapper<MaterialExtend>().ne(MaterialExtend::getInventory, BigDecimal.ZERO).isNotNull(MaterialExtend::getInventory));
+                collect = materialExtendList
+                        .stream()
+                        .map(MaterialExtend::getPosition)
+                        .collect(Collectors.toList());
+                List<Long> materialIdList = materialExtendList.stream().map(MaterialExtend::getMaterialId).distinct().collect(Collectors.toList());
+                List<Material> materialList = materialMapper.selectList(new LambdaQueryWrapperX<Material>().eq(Material::getId, materialIdList));
+                List<Long> categoryIdList = materialList.stream().map(Material::getCategoryId).distinct().collect(Collectors.toList());
+                taskStocktakingDTO.setCategoryCount(categoryIdList.size());
+                taskStocktakingDTO.setMaterialCount(materialExtendList.size());
+            } else {
+                materialExtendList = materialExtendMapper.selectList(new LambdaQueryWrapper<MaterialExtend>().in(MaterialExtend::getId, taskStocktakingDTO.getMaterialExtendIdList()));
+                collect = materialExtendList.stream().map(MaterialExtend::getPosition).collect(Collectors.toList());
+                List<Material> materialList = materialMapper.selectList(new LambdaQueryWrapperX<Material>().eq(Material::getId, materialExtendList.stream().map(MaterialExtend::getMaterialId)));
+                List<Long> categoryIdList = materialList.stream().map(Material::getCategoryId).distinct().collect(Collectors.toList());
+                taskStocktakingDTO.setCategoryCount(categoryIdList.size());
+                taskStocktakingDTO.setMaterialCount(materialExtendList.size());
+            }
+            //处理商品库位范围处理
+            String positionRange = extractRangePair(collect);
+            taskStocktakingDTO.setPositionRange(positionRange);
+            User currentUser = userService.getCurrentUser();
+            taskStocktakingDTO.setCreateBy(currentUser.getId());
+            taskStocktakingDTO.setCreateTime(new Date());
+            taskStocktakingDTO.setTaskStatus(0);
+            //生成任务
+            this.save(taskStocktakingDTO);
+            //生成任务明细
+            List<TaskStocktakingItem> taskStocktakingItemList = new ArrayList<>();
+            taskStocktakingDTO.getMaterialExtendIdList().forEach(materialExtendId -> {
+                TaskStocktakingItem taskStocktakingItem = new TaskStocktakingItem();
+                taskStocktakingItem.setTaskStocktakingId(taskStocktakingDTO.getId());
+                taskStocktakingItem.setMaterialItemId(materialExtendId);
+                taskStocktakingItemList.add(taskStocktakingItem);
+            });
+            taskStocktakingItemMapper.insertBatch(taskStocktakingItemList);
+        } catch (Exception e) {
+            log.error("创建盘点任务失败", e);
+            return false;
         }
-        String positionRange = extractRangePair(collect);
-        this.save(taskStocktakingDTO);
         return true;
     }
 
@@ -93,6 +144,17 @@ public class TaskStocktakingServiceImpl extends ServiceImpl<TaskStocktakingMappe
     }
 
     /**
+     * PDA-盘点任务列表
+     * @param number 盘点单号或者任务名称
+     * @param taskStatus 盘点任务状态
+     * @return
+     */
+    @Override
+    public List<PDATaskStocktakingVO> pdaList(String number , Integer taskStatus) {
+        return taskStocktakingMapper.pdaList(number , taskStatus);
+    }
+
+    /**
      * 计算库位范围
      * @param data 库位集合
      * @return

+ 4 - 2
src/main/resources/mapper_xml/TaskStocktakingItemMapper.xml

@@ -4,7 +4,8 @@
 
     <select id="listByTaskStocktakingId" resultType="com.jsh.erp.datasource.vo.TaskStocktakingItemVO">
         SELECT
-            m.`name` AS category_name,
+            tsi.id AS id,
+            mc.`name` AS category_name,
             m.`name` AS material_name,
             m.system_sku AS system_sku,
             m.commodity_unit AS commodity_unit,
@@ -25,7 +26,8 @@
                 LEFT JOIN jsh_supplier s ON me.supplier_id = s.id
                 LEFT JOIN jsh_depot d AS me.depot_id = d.id
         WHERE
-            tsi.task_stocktaking_id = #{taskStocktakingId}
+            tsi.delete_flag = 0
+            AND tsi.task_stocktaking_id = #{taskStocktakingId}
     </select>
 
 </mapper>

+ 56 - 0
src/main/resources/mapper_xml/TaskStocktakingMapper.xml

@@ -2,4 +2,60 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.jsh.erp.datasource.mappers.TaskStocktakingMapper">
 
+    <select id="pdaList" resultType="com.jsh.erp.datasource.pda.vo.PDATaskStocktakingVO">
+        SELECT
+            ts.id AS id,
+            ts.task_name AS task_name,
+            ts.number AS number,
+            d.`name` AS depot_name,
+            ju.username AS create_name,
+            u.username AS creator_name,
+            ts.category_count AS category_count,
+            ts.material_count AS material_count,
+            ts.position_range AS position_range,
+            ts.create_time AS create_time,
+            ts.oper_time AS oper_time,
+            ou.username AS oper_name,
+            ts.task_status AS task_status
+        FROM
+            task_stocktaking ts
+                LEFT JOIN jsh_depot d ON ts.depot_id = d.id
+                LEFT JOIN jsh_user ju ON ts.create_by = ju.id
+                LEFT JOIN jsh_user ou ON ts.oper_by = ou.id
+                LEFT JOIN jsh_user u ON ts.creator = u.id
+        <where>
+            ts.delete_flag = 0
+            <if test="number != null and number != ''">
+                AND (ts.task_name LIKE CONCAT('%',#{taskName},'%') OR ts.number LIKE CONCAT('%',#{number},'%'))
+            </if>
+            <if test="taskStatus != null and taskStatus != 0">
+                AND ts.task_status = #{taskStatus}
+            </if>
+        </where>
+    </select>
+
+    <select id="listBy" resultType="com.jsh.erp.datasource.vo.TaskStocktakingVO">
+        SELECT
+            ts.id AS id,
+            ts.number AS number,
+            ts.task_name AS task_name,
+            ts.task_type AS task_type,
+            d.`name` AS depot_name,
+            ts.position_range AS position_range,
+            ju.username AS create_name,
+            ts.create_time AS create_time,
+            u.username AS creator_name,
+            ts.task_status AS task_status,
+            ts.oper_time AS oper_time
+        FROM
+            task_stocktaking ts
+                LEFT JOIN jsh_depot d ON ts.depot_id = d.id
+                LEFT JOIN jsh_user ju ON ts.create_by = ju.id
+                LEFT JOIN jsh_user ou ON ts.oper_by = ou.id
+                LEFT JOIN jsh_user u ON ts.creator = u.id
+        <where>
+            ts.delete_flag = 0
+        </where>
+    </select>
+
 </mapper>