home %!s(int64=2) %!d(string=hai) anos
pai
achega
f1744b68b0
Modificáronse 22 ficheiros con 1019 adicións e 2 borrados
  1. 9 0
      hx-common/common-tool/src/main/java/com/fjhx/base/Condition.java
  2. 75 0
      hx-service-api/storage-api/src/main/java/com/fjhx/entity/material/MaterialReceiving.java
  3. 49 0
      hx-service-api/storage-api/src/main/java/com/fjhx/entity/material/MaterialReceivingDetails.java
  4. 17 0
      hx-service-api/storage-api/src/main/java/com/fjhx/params/material/MaterialReceivingDetailsEx.java
  5. 17 0
      hx-service-api/storage-api/src/main/java/com/fjhx/params/material/MaterialReceivingDetailsVo.java
  6. 17 0
      hx-service-api/storage-api/src/main/java/com/fjhx/params/material/MaterialReceivingEx.java
  7. 29 0
      hx-service-api/storage-api/src/main/java/com/fjhx/params/material/MaterialReceivingVo.java
  8. 6 0
      hx-service/storage/src/main/java/com/fjhx/applet/controller/MaterialReceiveController.java
  9. 2 0
      hx-service/storage/src/main/java/com/fjhx/applet/service/MaterialReceiveService.java
  10. 8 0
      hx-service/storage/src/main/java/com/fjhx/applet/service/impl/MaterialReceiveServiceImpl.java
  11. 123 0
      hx-service/storage/src/main/java/com/fjhx/material/controller/MaterialReceivingController.java
  12. 56 0
      hx-service/storage/src/main/java/com/fjhx/material/controller/MaterialReceivingDetailsController.java
  13. 16 0
      hx-service/storage/src/main/java/com/fjhx/material/mapper/MaterialReceivingDetailsMapper.java
  14. 5 0
      hx-service/storage/src/main/java/com/fjhx/material/mapper/MaterialReceivingDetailsMapper.xml
  15. 41 0
      hx-service/storage/src/main/java/com/fjhx/material/mapper/MaterialReceivingMapper.java
  16. 81 0
      hx-service/storage/src/main/java/com/fjhx/material/mapper/MaterialReceivingMapper.xml
  17. 54 0
      hx-service/storage/src/main/java/com/fjhx/material/mapper/impl/MaterialReceivingDetailsServiceImpl.java
  18. 337 0
      hx-service/storage/src/main/java/com/fjhx/material/mapper/impl/MaterialReceivingServiceImpl.java
  19. 1 1
      hx-service/storage/src/main/java/com/fjhx/material/mapper/impl/MaterialServiceImpl.java
  20. 28 0
      hx-service/storage/src/main/java/com/fjhx/material/service/MaterialReceivingDetailsService.java
  21. 45 0
      hx-service/storage/src/main/java/com/fjhx/material/service/MaterialReceivingService.java
  22. 3 1
      hx-service/storage/src/main/java/com/fjhx/stock/mapper/StockBackMapper.xml

+ 9 - 0
hx-common/common-tool/src/main/java/com/fjhx/base/Condition.java

@@ -3,6 +3,8 @@ package com.fjhx.base;
 import cn.hutool.core.convert.Convert;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.parser.ParserConfig;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.utils.Assert;
 import com.fjhx.utils.PageUtil;
@@ -11,6 +13,7 @@ import org.springblade.core.log.exception.ServiceException;
 import java.math.BigDecimal;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.List;
 
 /**
  * 条件实体
@@ -138,4 +141,10 @@ public class Condition extends HashMap<String, Object> {
         return Convert.toBigDecimal(get(str));
     }
 
+    /**
+     * 获取List
+     */
+    public <T> List<T> getArray(String str, Class<T> clazz) {
+        return JSONObject.parseArray(this.getStr(str), clazz, ParserConfig.global);
+    }
 }

+ 75 - 0
hx-service-api/storage-api/src/main/java/com/fjhx/entity/material/MaterialReceiving.java

@@ -0,0 +1,75 @@
+package com.fjhx.entity.material;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 物料接收
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-10-11
+ */
+@Data
+public class MaterialReceiving implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
+    private Long id;
+
+    /**
+     * 提交用户账号
+     */
+    private String submitUserAccount;
+
+    /**
+     * 提交时间
+     */
+    private Date submitTime;
+
+    /**
+     * 接收用户账号
+     */
+    private String receiveUserAccount;
+
+    /**
+     * 1:出库  2:补出库
+     */
+    private Integer type;
+
+    /**
+     * 审批状态 (枚举定义:0=待审批,1=审批中,2=已审批,3=已驳回,4=已撤回)
+     */
+    @TableField("ApproveBillState")
+    private Integer ApproveBillState;
+
+    /**
+     * 审批流关联id
+     */
+    @TableField("FlowLinkId")
+    private String FlowLinkId;
+
+    @TableField("userId")
+    private String userId;
+
+    @TableField("plcCode")
+    private String plcCode;
+
+    @TableField("stockChangeType")
+    private String stockChangeType;
+
+    private String remark;
+
+    private String token;
+
+}

+ 49 - 0
hx-service-api/storage-api/src/main/java/com/fjhx/entity/material/MaterialReceivingDetails.java

@@ -0,0 +1,49 @@
+package com.fjhx.entity.material;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 物料接收明细
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-10-11
+ */
+@Data
+public class MaterialReceivingDetails implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
+    private Long id;
+
+    /**
+     * 物料接收id
+     */
+    private Long materialReceivingId;
+
+    /**
+     * rfid
+     */
+    private String rfid;
+
+    /**
+     * 领料状态 1审批中 2待处理 3确认接收 4退回 5退回已忽略
+     */
+    private Integer status;
+
+    /**
+     * 接收时间
+     */
+    private Date handleTime;
+
+}

+ 17 - 0
hx-service-api/storage-api/src/main/java/com/fjhx/params/material/MaterialReceivingDetailsEx.java

@@ -0,0 +1,17 @@
+package com.fjhx.params.material;
+
+import com.fjhx.entity.material.MaterialReceivingDetails;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 物料接收明细
+ *
+ * @author ${author}
+ * @since 2022-10-11
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class MaterialReceivingDetailsEx extends MaterialReceivingDetails {
+
+}

+ 17 - 0
hx-service-api/storage-api/src/main/java/com/fjhx/params/material/MaterialReceivingDetailsVo.java

@@ -0,0 +1,17 @@
+package com.fjhx.params.material;
+
+import com.fjhx.entity.material.MaterialReceivingDetails;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 物料接收明细
+ *
+ * @author ${author}
+ * @since 2022-10-11
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class MaterialReceivingDetailsVo extends MaterialReceivingDetails {
+
+}

+ 17 - 0
hx-service-api/storage-api/src/main/java/com/fjhx/params/material/MaterialReceivingEx.java

@@ -0,0 +1,17 @@
+package com.fjhx.params.material;
+
+import com.fjhx.entity.material.MaterialReceiving;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 物料接收
+ *
+ * @author ${author}
+ * @since 2022-10-11
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class MaterialReceivingEx extends MaterialReceiving {
+
+}

+ 29 - 0
hx-service-api/storage-api/src/main/java/com/fjhx/params/material/MaterialReceivingVo.java

@@ -0,0 +1,29 @@
+package com.fjhx.params.material;
+
+import com.fjhx.entity.material.MaterialReceiving;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+/**
+ * 物料接收
+ *
+ * @author ${author}
+ * @since 2022-10-11
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class MaterialReceivingVo extends MaterialReceiving {
+
+    /**
+     * rfid列表
+     */
+    private List<String> rfidItems;
+
+    /**
+     * 提交人id
+     */
+    private String submitUserId;
+
+}

+ 6 - 0
hx-service/storage/src/main/java/com/fjhx/applet/controller/MaterialReceiveController.java

@@ -50,4 +50,10 @@ public class MaterialReceiveController {
         return R.success();
     }
 
+    @PostMapping("/receiveBackupList")
+    public R receiveBackupList(@RequestBody Map<String, String> condition) {
+        List<Map<String, Object>> list = materialReceiveService.getReceiveBackupList(condition.get("account"));
+        return R.success(list);
+    }
+
 }

+ 2 - 0
hx-service/storage/src/main/java/com/fjhx/applet/service/MaterialReceiveService.java

@@ -18,4 +18,6 @@ public interface MaterialReceiveService extends BaseService<BaseEntity> {
 
     void handleFlow(Map<String, String> condition);
 
+    List<Map<String, Object>> getReceiveBackupList(String account);
+
 }

+ 8 - 0
hx-service/storage/src/main/java/com/fjhx/applet/service/impl/MaterialReceiveServiceImpl.java

@@ -142,4 +142,12 @@ public class MaterialReceiveServiceImpl extends ServiceImpl<MaterialReceiveMappe
 
     }
 
+    @Override
+    public List<Map<String, Object>> getReceiveBackupList(String account) {
+
+
+
+        return null;
+    }
+
 }

+ 123 - 0
hx-service/storage/src/main/java/com/fjhx/material/controller/MaterialReceivingController.java

@@ -0,0 +1,123 @@
+package com.fjhx.material.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.base.Condition;
+import com.fjhx.entity.material.MaterialReceiving;
+import com.fjhx.entity.material.MaterialReceivingDetails;
+import com.fjhx.material.service.MaterialReceivingService;
+import com.fjhx.params.material.MaterialReceivingVo;
+import org.springblade.core.tool.api.R;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 物料接收 前端控制器
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-10-11
+ */
+@RestController
+@RequestMapping("/materialReceiving")
+public class MaterialReceivingController {
+
+    @Autowired
+    private MaterialReceivingService materialReceivingService;
+
+    @PostMapping("/page")
+    public R page(@RequestBody Map<String, String> condition) {
+        Page<MaterialReceiving> result = materialReceivingService.getPage(condition);
+        return R.success(result);
+    }
+
+    @PostMapping("/add")
+    public R add(@RequestBody MaterialReceivingVo materialReceivingVo) {
+        materialReceivingService.add(materialReceivingVo);
+        return R.success();
+    }
+
+    @PostMapping("/edit")
+    public R edit(@RequestBody MaterialReceivingVo materialReceivingVo) {
+        materialReceivingService.edit(materialReceivingVo);
+        return R.success();
+    }
+
+    @PostMapping("/delete")
+    public R delete(@RequestBody MaterialReceivingVo materialReceivingVo) {
+        materialReceivingService.delete(materialReceivingVo);
+        return R.success();
+    }
+
+    /**
+     * 出库提交
+     */
+    @PostMapping("/submit")
+    public R submit(@RequestBody MaterialReceivingVo materialReceivingVo) {
+        materialReceivingService.submit(materialReceivingVo);
+        return R.success();
+    }
+
+    /**
+     * 物料接收列表
+     */
+    @PostMapping("/list")
+    public R list(@RequestBody MaterialReceivingVo materialReceivingVo) {
+        List<Map<String, Object>> result = materialReceivingService.getList(materialReceivingVo);
+        return R.success(result);
+    }
+
+    /**
+     * 物料接收操作
+     */
+    @PostMapping("/operation")
+    public R operation(@RequestBody Condition condition) {
+        materialReceivingService.operation(condition);
+        return R.success();
+    }
+
+    /**
+     * 流程详情
+     */
+    @PostMapping("flowDetails")
+    public R flowDetails(@RequestBody Condition condition) {
+        List<Map<String, Object>> result = materialReceivingService.flowDetails(condition);
+        return R.success(result);
+    }
+
+    /**
+     * 流程处理
+     */
+    @PostMapping("handleFlow")
+    public R handleFlow(@RequestBody Condition condition) {
+        materialReceivingService.handleFlow(condition);
+        return R.success();
+    }
+
+
+    /**
+     * 待出库物料
+     */
+    @PostMapping("toBeReceivedList")
+    public R toBeReceivedList(@RequestBody Condition condition) {
+        List<Map<String, Object>> result = materialReceivingService.toBeReceivedList(condition);
+        return R.success(result);
+    }
+
+    /**
+     * 忽略驳回
+     */
+    @PostMapping("ignore")
+    public R ignore(@RequestBody MaterialReceivingDetails materialReceivingDetails) {
+        materialReceivingService.ignore(materialReceivingDetails);
+        return R.success();
+    }
+
+}
+

+ 56 - 0
hx-service/storage/src/main/java/com/fjhx/material/controller/MaterialReceivingDetailsController.java

@@ -0,0 +1,56 @@
+package com.fjhx.material.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.springblade.core.tool.api.R;
+import com.fjhx.entity.material.MaterialReceivingDetails;
+import com.fjhx.params.material.MaterialReceivingDetailsVo;
+import com.fjhx.material.service.MaterialReceivingDetailsService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 物料接收明细 前端控制器
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-10-11
+ */
+@RestController
+@RequestMapping("/materialReceivingDetails")
+public class MaterialReceivingDetailsController {
+
+    @Autowired
+    private MaterialReceivingDetailsService materialReceivingDetailsService;
+
+    @PostMapping("/page")
+    public R page(@RequestBody Map<String, String> condition){
+        Page<MaterialReceivingDetails> result = materialReceivingDetailsService.getPage(condition);
+        return R.success(result);
+    }
+
+    @PostMapping("/add")
+    public R add(@RequestBody MaterialReceivingDetailsVo materialReceivingDetailsVo){
+        materialReceivingDetailsService.add(materialReceivingDetailsVo);
+        return R.success();
+    }
+
+    @PostMapping("/edit")
+    public R edit(@RequestBody MaterialReceivingDetailsVo materialReceivingDetailsVo){
+        materialReceivingDetailsService.edit(materialReceivingDetailsVo);
+        return R.success();
+    }
+
+    @PostMapping("/delete")
+    public R delete(@RequestBody MaterialReceivingDetailsVo materialReceivingDetailsVo){
+        materialReceivingDetailsService.delete(materialReceivingDetailsVo);
+        return R.success();
+    }
+
+}
+

+ 16 - 0
hx-service/storage/src/main/java/com/fjhx/material/mapper/MaterialReceivingDetailsMapper.java

@@ -0,0 +1,16 @@
+package com.fjhx.material.mapper;
+
+import com.fjhx.entity.material.MaterialReceivingDetails;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 物料接收明细 Mapper 接口
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-10-11
+ */
+public interface MaterialReceivingDetailsMapper extends BaseMapper<MaterialReceivingDetails> {
+
+}

+ 5 - 0
hx-service/storage/src/main/java/com/fjhx/material/mapper/MaterialReceivingDetailsMapper.xml

@@ -0,0 +1,5 @@
+<?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="com.fjhx.material.mapper.MaterialReceivingDetailsMapper">
+
+</mapper>

+ 41 - 0
hx-service/storage/src/main/java/com/fjhx/material/mapper/MaterialReceivingMapper.java

@@ -0,0 +1,41 @@
+package com.fjhx.material.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fjhx.entity.material.MaterialReceiving;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 物料接收 Mapper 接口
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-10-11
+ */
+public interface MaterialReceivingMapper extends BaseMapper<MaterialReceiving> {
+
+    void insertFlowApplyCheck(@Param("id") String id,
+                              @Param("flowId") String flowId,
+                              @Param("nodeId") String nodeId,
+                              @Param("preNodeId") String preNodeId,
+                              @Param("nextNodeId") String nextNodeId,
+                              @Param("checkUserId") String checkUserId,
+                              @Param("checkState") Integer checkState,
+                              @Param("suggestions") String suggestions,
+                              @Param("linkId") String linkId,
+                              @Param("approvalItem") String approvalItem
+    );
+
+    List<Map<String, Object>> getList(@Param("receiveUserAccount") String receiveUserAccount);
+
+    List<Map<String, String>> getUserNameByAccount(@Param("ew") QueryWrapper<Object> wrapper);
+
+    List<Map<String, Object>> flowDetails(@Param("flowLinkId") String flowLinkId);
+
+    List<Map<String, Object>> toBeReceivedList(@Param("submitUserAccount") String submitUserAccount);
+
+}

+ 81 - 0
hx-service/storage/src/main/java/com/fjhx/material/mapper/MaterialReceivingMapper.xml

@@ -0,0 +1,81 @@
+<?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="com.fjhx.material.mapper.MaterialReceivingMapper">
+
+    <insert id="insertFlowApplyCheck">
+        insert into flow_applycheck(id, IsDelete, CreatedTime, UpdatedTime, FlowId, NodeId, PreNodeId, NextNodeId,
+                                    CheckUserId, CheckState, Suggestions, LinkId, ApprovalItem)
+        values (#{id},
+                0,
+                now(),
+                now(),
+                #{flowId},
+                #{nodeId},
+                #{preNodeId},
+                #{nextNodeId},
+                #{checkUserId},
+                #{checkState},
+                #{suggestions},
+                #{linkId},
+                #{approvalItem})
+    </insert>
+
+    <select id="getList" resultType="java.util.Map">
+        select mrd.id,
+               m.Name                  materialName,
+               m.Code                  materialCode,
+               mr.submit_time          submitTime,
+               st.Quantity             quantity,
+               mr.submit_user_account  submitUserAccount,
+               mr.receive_user_account receiveUserAccount
+        from material_receiving mr
+                 inner join material_receiving_details mrd on mrd.status = 2 and mr.id = mrd.material_receiving_id
+                 inner join stock_tag st on mrd.rfid = st.RfidCode
+                 inner join material m on st.MaterialCode = m.Code
+        where mr.receive_user_account = #{receiveUserAccount}
+          and mrd.status = 2
+    </select>
+
+    <select id="getUserNameByAccount" resultType="java.util.Map">
+        select aa.AccountNo account,
+               uu.RealName  userName
+        from acc_account aa
+                 left join u_user uu on aa.ID = uu.ID
+            ${ew.customSqlSegment}
+    </select>
+
+    <select id="flowDetails" resultType="java.util.Map">
+        select m.Name                  materialName,
+               m.Code                  materialCode,
+               mr.submit_time          createTime,
+               st.Quantity             changeNum,
+               mr.Remark               remark,
+               mr.submit_user_account  submitUserAccount,
+               mr.receive_user_account receiveUserAccount,
+               mr.id                   materialReceivingId,
+               mr.FlowLinkId           flowLinkId
+        from material_receiving mr
+                 left join material_receiving_details mrd on mr.id = mrd.material_receiving_id
+                 left join stock_tag st on mrd.rfid = mrd.rfid
+                 left join material m on st.MaterialCode = m.Code
+        where mr.FlowLinkId = #{linkId}
+    </select>
+
+    <select id="toBeReceivedList" resultType="java.util.Map">
+        select mrd.id,
+               m.Name                  materialName,
+               m.Code                  materialCode,
+               mr.submit_time          submitTime,
+               st.Quantity             quantity,
+               mr.submit_user_account  submitUserAccount,
+               mr.receive_user_account receiveUserAccount,
+               mrd.status              status
+        from material_receiving mr
+                 inner join material_receiving_details mrd on mrd.status = 2 and mr.id = mrd.material_receiving_id
+                 inner join stock_tag st on mrd.rfid = st.RfidCode
+                 inner join material m on st.MaterialCode = m.Code
+        where mr.submit_user_account = #{submitUserAccount}
+          and (mrd.status = 2 or mrd.status = 4)
+    </select>
+
+</mapper>

+ 54 - 0
hx-service/storage/src/main/java/com/fjhx/material/mapper/impl/MaterialReceivingDetailsServiceImpl.java

@@ -0,0 +1,54 @@
+package com.fjhx.material.mapper.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.utils.WrapperUtil;
+import com.fjhx.entity.material.MaterialReceivingDetails;
+import com.fjhx.params.material.MaterialReceivingDetailsVo;
+import com.fjhx.material.mapper.MaterialReceivingDetailsMapper;
+import com.fjhx.material.service.MaterialReceivingDetailsService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 物料接收明细 服务实现类
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-10-11
+ */
+@Service
+public class MaterialReceivingDetailsServiceImpl extends ServiceImpl<MaterialReceivingDetailsMapper, MaterialReceivingDetails> implements MaterialReceivingDetailsService {
+
+    @Override
+    public Page<MaterialReceivingDetails> getPage(Map<String, String> condition) {
+
+        QueryWrapper<MaterialReceivingDetails> wrapper = Wrappers.query();
+
+        WrapperUtil.init(condition, wrapper)
+                .createTimeDesc();
+
+        Page<MaterialReceivingDetails> page = page(condition, wrapper);
+        return page;
+    }
+
+    @Override
+    public void add(MaterialReceivingDetailsVo materialReceivingDetailsVo) {
+        save(materialReceivingDetailsVo);
+    }
+
+    @Override
+    public void edit(MaterialReceivingDetailsVo materialReceivingDetailsVo) {
+        updateById(materialReceivingDetailsVo);
+    }
+
+    @Override
+    public void delete(MaterialReceivingDetailsVo materialReceivingDetailsVo) {
+        removeById(materialReceivingDetailsVo.getId());
+    }
+
+}

+ 337 - 0
hx-service/storage/src/main/java/com/fjhx/material/mapper/impl/MaterialReceivingServiceImpl.java

@@ -0,0 +1,337 @@
+package com.fjhx.material.mapper.impl;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.base.Condition;
+import com.fjhx.entity.material.MaterialReceiving;
+import com.fjhx.entity.material.MaterialReceivingDetails;
+import com.fjhx.material.mapper.MaterialReceivingMapper;
+import com.fjhx.material.service.MaterialReceivingDetailsService;
+import com.fjhx.material.service.MaterialReceivingService;
+import com.fjhx.params.material.MaterialReceivingVo;
+import com.fjhx.utils.Assert;
+import com.fjhx.utils.WrapperUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springblade.core.log.exception.ServiceException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 物料接收 服务实现类
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-10-11
+ */
+@Slf4j
+@Service
+public class MaterialReceivingServiceImpl extends ServiceImpl<MaterialReceivingMapper, MaterialReceiving> implements MaterialReceivingService {
+
+    @Autowired
+    private MaterialReceivingDetailsService materialReceivingDetailsService;
+
+    private final RestTemplate restTemplate = new RestTemplate();
+
+    @Override
+    public Page<MaterialReceiving> getPage(Map<String, String> condition) {
+
+        QueryWrapper<MaterialReceiving> wrapper = Wrappers.query();
+
+        WrapperUtil.init(condition, wrapper)
+                .createTimeDesc();
+
+        Page<MaterialReceiving> page = page(condition, wrapper);
+        return page;
+    }
+
+    @Override
+    public void add(MaterialReceivingVo materialReceivingVo) {
+        save(materialReceivingVo);
+    }
+
+    @Override
+    public void edit(MaterialReceivingVo materialReceivingVo) {
+        updateById(materialReceivingVo);
+    }
+
+    @Override
+    public void delete(MaterialReceivingVo materialReceivingVo) {
+        removeById(materialReceivingVo.getId());
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void submit(MaterialReceivingVo materialReceivingVo) {
+
+        materialReceivingVo.setSubmitTime(new Date());
+
+        Integer type = materialReceivingVo.getType();
+        Assert.notEmpty(type, "提交类型不能为空");
+
+        if (type.equals(2)) {
+            String flowLinkId = IdWorker.getIdStr();
+
+            materialReceivingVo.setFlowLinkId(flowLinkId);
+            materialReceivingVo.setApproveBillState(0);
+
+            // 发起审批流
+            baseMapper.insertFlowApplyCheck(
+                    IdWorker.getIdStr(),
+                    "202208240000000000000000001",
+                    "20220824000000000000000000101",
+                    null,
+                    "20220824000000000000000000102",
+                    materialReceivingVo.getSubmitUserId(),
+                    0,
+                    null,
+                    flowLinkId,
+                    "物料接收"
+            );
+        }
+
+        save(materialReceivingVo);
+
+        // 物料接收id
+        Long materialReceivingId = materialReceivingVo.getId();
+
+        List<String> rfidItems = materialReceivingVo.getRfidItems();
+
+        List<MaterialReceivingDetails> materialReceivingDetailsList = rfidItems.stream().map(rfid -> {
+            MaterialReceivingDetails materialReceivingDetails = new MaterialReceivingDetails();
+            materialReceivingDetails.setMaterialReceivingId(materialReceivingId);
+            materialReceivingDetails.setRfid(rfid);
+            materialReceivingDetails.setStatus(type.equals(2) ? 1 : 2);
+
+            return materialReceivingDetails;
+        }).collect(Collectors.toList());
+
+        materialReceivingDetailsService.saveBatch(materialReceivingDetailsList);
+    }
+
+    @Override
+    public List<Map<String, Object>> getList(MaterialReceivingVo materialReceivingVo) {
+
+        List<Map<String, Object>> list = baseMapper.getList(materialReceivingVo.getReceiveUserAccount());
+
+        if (list.size() > 0) {
+            setUserName(list);
+        }
+
+        return list;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void operation(Condition condition) {
+        List<Long> idList = condition.getArray("idList", Long.class);
+        Integer operation = condition.getInt("operation", "操作类型不能为空");
+
+        Assert.notEmpty(idList, "物料接受id列表不能为空");
+
+        if (operation != 3 && operation != 4) {
+            throw new ServiceException("操作类型不正确");
+        }
+
+        List<MaterialReceivingDetails> list = materialReceivingDetailsService.listByIds(idList);
+
+        Set<Long> materialReceivingIdSet = new HashSet<>();
+        Date date = new Date();
+
+        for (MaterialReceivingDetails materialReceivingDetails : list) {
+            materialReceivingDetails.setStatus(operation);
+            materialReceivingDetails.setHandleTime(date);
+            materialReceivingIdSet.add(materialReceivingDetails.getMaterialReceivingId());
+        }
+
+        materialReceivingDetailsService.updateBatchById(list);
+
+        // 如果确认接收,出库
+        if (operation == 3) {
+
+            // 查询领料记录
+            List<MaterialReceiving> materialReceivingList = listByIds(materialReceivingIdSet);
+
+            // 根据领料记录把rfid分组
+            Map<Long, List<String>> rfidMap = list.stream().collect(Collectors.toMap(
+                    MaterialReceivingDetails::getMaterialReceivingId,
+                    item -> Collections.singletonList(item.getRfid()),
+                    (v1, v2) -> {
+                        v1.addAll(v2);
+                        return v1;
+                    }
+            ));
+
+            // 调用原出库接口
+            materialReceivingList.forEach(item -> issueRest(item, rfidMap.get(item.getId())));
+        }
+
+
+    }
+
+    @Override
+    public List<Map<String, Object>> flowDetails(Condition condition) {
+        String flowLinkId = condition.getStr("flowLinkId");
+        List<Map<String, Object>> list = baseMapper.flowDetails(flowLinkId);
+
+        if (list.size() > 0) {
+            setUserName(list);
+        }
+
+        return list;
+    }
+
+    @Override
+    public void handleFlow(Condition condition) {
+        // 操作人id
+        String checkUserId = condition.getStr("checkUserId");
+        // 流程关联id
+        String flowLinkId = condition.getStr("flowLinkId", "流程关联id不能为空");
+        // 2=审批通过,3=审批驳回
+        Integer checkState = condition.getInt("checkState", "审批结果不能为空");
+        // 审批意见
+        String suggestions = condition.getStr("suggestions");
+
+        String materialReceivingId = condition.getStr("materialReceivingId", "物料出库id不能为空");
+
+        // 修改审批流
+        baseMapper.insertFlowApplyCheck(
+                IdWorker.getIdStr(),
+                "202208240000000000000000001",
+                "20220824000000000000000000102",
+                "20220824000000000000000000101",
+                null,
+                checkUserId,
+                checkState,
+                suggestions,
+                flowLinkId,
+                "物料接收"
+        );
+
+        if (checkState == 2) {
+            materialReceivingDetailsService.update(
+                    Wrappers.<MaterialReceivingDetails>lambdaUpdate()
+                            .eq(MaterialReceivingDetails::getMaterialReceivingId, materialReceivingId)
+                            .set(MaterialReceivingDetails::getStatus, 2)
+            );
+        }
+
+    }
+
+    @Override
+    public List<Map<String, Object>> toBeReceivedList(Condition condition) {
+        String submitUserAccount = condition.getStr("submitUserAccount", "提交人账号不能为空");
+
+        List<Map<String, Object>> list = baseMapper.toBeReceivedList(submitUserAccount);
+
+        if (list.size() > 0) {
+            setUserName(list);
+        }
+
+        return list;
+    }
+
+    @Override
+    public void ignore(MaterialReceivingDetails materialReceivingDetails) {
+        materialReceivingDetails.setStatus(5);
+        materialReceivingDetailsService.updateById(materialReceivingDetails);
+    }
+
+
+    /**
+     * 通过用户账号获取用户名称
+     *
+     * @param accountList 账号列表
+     * @return 账号、名称 Map
+     */
+    private Map<String, String> getUserNameByAccount(List<String> accountList) {
+        accountList = accountList.stream().distinct().collect(Collectors.toList());
+        return baseMapper.getUserNameByAccount(Wrappers.query().in("aa.AccountNo", accountList))
+                .stream().collect(Collectors.toMap(
+                        item -> item.get("account"),
+                        item -> item.get("userName")
+                ));
+    }
+
+    /**
+     * 赋值提交人名称和接收人名称
+     */
+    private void setUserName(List<Map<String, Object>> list) {
+        List<String> accountList = new ArrayList<>();
+
+        for (Map<String, Object> map : list) {
+            accountList.add(map.get("submitUserAccount").toString());
+            accountList.add(map.get("receiveUserAccount").toString());
+        }
+
+        Map<String, String> userNameByAccount = getUserNameByAccount(accountList);
+
+        for (Map<String, Object> map : list) {
+            map.put("submitUserName", userNameByAccount.get(map.get("submitUserAccount").toString()));
+            map.put("receiveUserName", userNameByAccount.get(map.get("receiveUserAccount").toString()));
+        }
+    }
+
+    /**
+     * 调用原出库接口
+     */
+    private void issueRest(MaterialReceiving materialReceiving, List<String> rfidList) {
+
+        JSONObject httpBody = new JSONObject();
+        httpBody.put("userId", materialReceiving.getUserId());
+        httpBody.put("plcCode", materialReceiving.getPlcCode());
+        httpBody.put("rfidItems", rfidList);
+        httpBody.put("stockChangeType", materialReceiving.getStockChangeType());
+        httpBody.put("remark", materialReceiving.getRemark());
+        httpBody.put("token", materialReceiving.getToken());
+
+        // 设置请求头
+        HttpHeaders httpHeaders = new HttpHeaders();
+        httpHeaders.set("TargetCode", "3");
+        httpHeaders.set("Content-Type", "application/json");
+
+        HttpEntity<String> httpEntity = new HttpEntity<>(httpBody.toJSONString(), httpHeaders);
+
+        String result = restTemplate.postForObject("http://120.79.80.64:8002/api/StockInOut/HandleMacStockInOut", httpEntity, String.class);
+
+        log.error("issueRest:" + result);
+    }
+
+//    public static void main(String[] args) {
+//        RestTemplate restTemplate = new RestTemplate();
+//
+//        JSONObject httpBody = new JSONObject();
+//        httpBody.put("userId", "1807047");
+//        httpBody.put("plcCode", "1");
+//        httpBody.put("rfidItems", Collections.singletonList("F00000000000000000001298"));
+//        httpBody.put("stockChangeType", "20");
+//        httpBody.put("remark", "");
+//        httpBody.put("token", "27b0717ff1f84379a3abc961f8651032");
+//
+//        // 设置请求头
+//        HttpHeaders httpHeaders = new HttpHeaders();
+//        httpHeaders.set("TargetCode", "3");
+//        httpHeaders.set("Content-Type", "application/json");
+//
+//        HttpEntity<String> httpEntity = new HttpEntity<>(httpBody.toJSONString(), httpHeaders);
+//
+//        String result = restTemplate.postForObject("http://120.79.80.64:8002/api/StockInOut/HandleMacStockInOut", httpEntity, String.class);
+//
+//        System.out.println(result);
+//
+//    }
+
+
+}

+ 1 - 1
hx-service/storage/src/main/java/com/fjhx/material/service/impl/MaterialServiceImpl.java → hx-service/storage/src/main/java/com/fjhx/material/mapper/impl/MaterialServiceImpl.java

@@ -1,4 +1,4 @@
-package com.fjhx.material.service.impl;
+package com.fjhx.material.mapper.impl;
 
 import com.alibaba.cloud.commons.lang.StringUtils;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;

+ 28 - 0
hx-service/storage/src/main/java/com/fjhx/material/service/MaterialReceivingDetailsService.java

@@ -0,0 +1,28 @@
+package com.fjhx.material.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.entity.material.MaterialReceivingDetails;
+import com.fjhx.params.material.MaterialReceivingDetailsVo;
+import com.fjhx.base.BaseService;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 物料接收明细 服务类
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-10-11
+ */
+public interface MaterialReceivingDetailsService extends BaseService<MaterialReceivingDetails> {
+
+    Page<MaterialReceivingDetails> getPage(Map<String, String> condition);
+
+    void add(MaterialReceivingDetailsVo materialReceivingDetailsVo);
+
+    void edit(MaterialReceivingDetailsVo materialReceivingDetailsVo);
+
+    void delete(MaterialReceivingDetailsVo materialReceivingDetailsVo);
+
+}

+ 45 - 0
hx-service/storage/src/main/java/com/fjhx/material/service/MaterialReceivingService.java

@@ -0,0 +1,45 @@
+package com.fjhx.material.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.base.Condition;
+import com.fjhx.entity.material.MaterialReceiving;
+import com.fjhx.entity.material.MaterialReceivingDetails;
+import com.fjhx.params.material.MaterialReceivingVo;
+import com.fjhx.base.BaseService;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 物料接收 服务类
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-10-11
+ */
+public interface MaterialReceivingService extends BaseService<MaterialReceiving> {
+
+    Page<MaterialReceiving> getPage(Map<String, String> condition);
+
+    void add(MaterialReceivingVo materialReceivingVo);
+
+    void edit(MaterialReceivingVo materialReceivingVo);
+
+    void delete(MaterialReceivingVo materialReceivingVo);
+
+    void submit(MaterialReceivingVo materialReceivingVo);
+
+    List<Map<String, Object>> getList(MaterialReceivingVo materialReceivingVo);
+
+    void operation(Condition condition);
+
+    List<Map<String, Object>> flowDetails(Condition condition);
+
+    void handleFlow(Condition condition);
+
+    List<Map<String, Object>> toBeReceivedList(Condition condition);
+
+    void ignore(MaterialReceivingDetails materialReceivingDetails);
+
+}

+ 3 - 1
hx-service/storage/src/main/java/com/fjhx/stock/mapper/StockBackMapper.xml

@@ -39,8 +39,10 @@
         select distinct uu.ID           userId,
                         uu.JobNo        jobNo,
                         uu.RealName     realName,
-                        uu.DepartmentID departmentID
+                        uu.DepartmentID departmentID,
+                        aa.AccountNo    account
         from u_user uu
+                 left join acc_account aa on uu.ID = aa.ID
             ${ew.customSqlSegment}
     </select>
     <select id="selectSchedule" resultType="java.lang.Double">