Эх сурвалжийг харах

母粒管理接口、页面

xuezizhuo 1 жил өмнө
parent
commit
a6df98a558

+ 33 - 3
zkqy-custom-business/src/main/java/com/zkqy/business/controller/MaterielController.java

@@ -91,7 +91,7 @@ public class MaterielController extends BaseController
     /**
      * 新增物料信息
      */
-//    //@PreAuthorize("@ss.hasPermi('system:materiel:add')")
+    @PreAuthorize("@ss.hasPermi('system:materiel:add')")
     @Log(title = "物料信息", businessType = BusinessType.INSERT)
     @PostMapping
     @ApiOperation(value = "新增物料信息")
@@ -103,7 +103,7 @@ public class MaterielController extends BaseController
     /**
      * 修改物料信息
      */
-//    //@PreAuthorize("@ss.hasPermi('system:materiel:edit')")
+    @PreAuthorize("@ss.hasPermi('system:materiel:edit')")
     @Log(title = "物料信息", businessType = BusinessType.UPDATE)
     @PutMapping
     @ApiOperation(value = "修改物料信息")
@@ -115,7 +115,7 @@ public class MaterielController extends BaseController
     /**
      * 删除物料信息
      */
-//    //@PreAuthorize("@ss.hasPermi('system:materiel:remove')")
+    @PreAuthorize("@ss.hasPermi('system:materiel:remove')")
     @Log(title = "物料信息", businessType = BusinessType.DELETE)
     @DeleteMapping("/{ids}")
     @ApiOperation(value = "删除物料信息")
@@ -132,4 +132,34 @@ public class MaterielController extends BaseController
         return AjaxResult.success(materielService.queryMaterielList());
     }
 
+    /**
+     * 查询母粒管理信息列表
+     */
+    @PreAuthorize("@ss.hasPermi('system:materiel:MaterielManageList')")
+    @GetMapping("/selectMaterielManageList")
+    @ApiOperation(value = "查询母粒管理信息列表")
+    public TableDataInfo selectMaterielManageList(Materiel materiel)
+    {
+        startPage();
+        List<Materiel> list = materielService.selectMaterielManageList(materiel);
+        return getDataTable(list);
+    }
+
+    /**
+     * 获取新增母粒编号
+     */
+    @GetMapping("/getMaterielCode")
+    public AjaxResult getMaterielCode(){
+        return AjaxResult.success("查询成功",materielService.getMaterielCode());
+    }
+
+    /**
+     * 母粒转码校验
+     */
+    @GetMapping("/checkMaterieEncoding")
+    public AjaxResult checkMaterieEncoding(@RequestParam(required = false) Long id, @RequestParam String materieEncoding){
+        return AjaxResult.success(materielService.checkMaterieEncoding(id,materieEncoding));
+    }
+
+
 }

+ 19 - 0
zkqy-custom-business/src/main/java/com/zkqy/business/mapper/MaterielMapper.java

@@ -73,4 +73,23 @@ public interface MaterielMapper
      * 销售订单查询色号并根据色号排序
      */
     List<Materiel> queryMaterielList();
+
+    /**
+     * 查询母粒管理信息列表
+     */
+    List<Materiel> selectMaterielManageList(Materiel materiel);
+
+    /**
+     * 获取当前最大物料编码加一
+     */
+    String getMaxMaterielCode();
+
+    /**
+     * 查询物料信息
+     *
+     * @param materieEncoding 物料转码
+     * @return 物料信息
+     */
+    Materiel selectMaterielBymaterieEncoding(String materieEncoding);
+
 }

+ 15 - 0
zkqy-custom-business/src/main/java/com/zkqy/business/service/IMaterielService.java

@@ -71,4 +71,19 @@ public interface IMaterielService
      * 销售订单查询色号并根据色号排序
      */
     List<Materiel> queryMaterielList();
+
+    /**
+     * 查询母粒管理信息列表
+     */
+    List<Materiel> selectMaterielManageList(Materiel materiel);
+
+    /**
+     * 获取新增母粒编号
+     */
+    String getMaterielCode();
+
+    /**
+     * 校验母粒转码是否唯一
+     */
+    boolean checkMaterieEncoding(Long id,String materieEncoding);
 }

+ 99 - 0
zkqy-custom-business/src/main/java/com/zkqy/business/service/impl/MaterielServiceImpl.java

@@ -1,7 +1,13 @@
 package com.zkqy.business.service.impl;
 
 import java.util.List;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.ReentrantLock;
+
+import com.zkqy.business.domain.SaleOrder;
+import com.zkqy.common.core.redis.RedisCache;
 import com.zkqy.common.utils.DateUtils;
+import com.zkqy.common.utils.SecurityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.zkqy.business.mapper.MaterielMapper;
@@ -20,6 +26,9 @@ public class MaterielServiceImpl implements IMaterielService
     @Autowired
     private MaterielMapper materielMapper;
 
+    @Autowired
+    private RedisCache redisCache;
+
     /**
      * 查询物料信息
      * 
@@ -59,6 +68,8 @@ public class MaterielServiceImpl implements IMaterielService
     public int insertMateriel(Materiel materiel)
     {
         materiel.setCreateTime(DateUtils.getNowDate());
+        materiel.setCreateById(SecurityUtils.getUserId());
+        materiel.setCreateBy(SecurityUtils.getUsername());
         return materielMapper.insertMateriel(materiel);
     }
 
@@ -104,4 +115,92 @@ public class MaterielServiceImpl implements IMaterielService
         return materielMapper.queryMaterielList();
     }
 
+    @Override
+    public List<Materiel> selectMaterielManageList(Materiel materiel) {
+        return materielMapper.selectMaterielManageList(materiel);
+    }
+
+    private ReentrantLock reentrantLock = new ReentrantLock();
+
+    @Override
+    public String getMaterielCode() {
+
+        try {
+            if (reentrantLock.tryLock(200, TimeUnit.MILLISECONDS)){
+                String code = redisCache.getCacheObject("huaxianmuliweiyibianhao");
+                //如果母粒编号为空查询最大值
+                if (code == null || code.isEmpty()){
+                    String maxMaterielCode = materielMapper.getMaxMaterielCode();
+                    if(maxMaterielCode != null && maxMaterielCode.contains("ML_")){
+                        redisCache.setCacheObject("huaxianmuliweiyibianhao", maxMaterielCode);
+                        return maxMaterielCode;
+                    }else {
+                        redisCache.setCacheObject("huaxianmuliweiyibianhao", "ML_001");
+                        return "ML_001";
+                    }
+                }else {
+                    //能拿到母粒编号+1
+                    String s = incrementNumberInString(code);
+                    redisCache.setCacheObject("huaxianmuliweiyibianhao", s);
+                    return s;
+                }
+            }else {
+                String maxMaterielCode = materielMapper.getMaxMaterielCode();
+                if(maxMaterielCode != null && maxMaterielCode.contains("ML_")){
+                    redisCache.setCacheObject("huaxianmuliweiyibianhao", maxMaterielCode);
+                    return maxMaterielCode;
+                }else {
+                    redisCache.setCacheObject("huaxianmuliweiyibianhao", "ML_001");
+                    return "ML_001";
+                }
+            }
+        }catch (InterruptedException e) {
+            throw new RuntimeException(e);
+        } finally {
+            reentrantLock.unlock();
+        }
+    }
+
+    @Override
+    public boolean checkMaterieEncoding(Long id, String materieEncoding) {
+        //判断新增还是修改
+        if (id != null) {
+            Materiel materiel = materielMapper.selectMaterielById(id);
+            if (materiel.getMaterieEncoding().equals(materieEncoding)) {
+                return true;
+            } else {
+                Materiel materiel1 = materielMapper.selectMaterielBymaterieEncoding(materieEncoding);
+
+                if (materiel1 != null) {
+                    return false;
+                } else {
+                    return true;
+                }
+            }
+        } else {
+            Materiel materiel1 = materielMapper.selectMaterielBymaterieEncoding(materieEncoding);
+            if (materiel1 != null) {
+                return false;
+            } else {
+                return true;
+            }
+        }
+    }
+
+    public static String incrementNumberInString(String str) {
+        // 使用正则表达式提取数字部分
+        String prefix = str.replaceAll("\\d", ""); // 提取非数字部分,即前缀 "ML_"
+        String numberPart = str.replaceAll("\\D", ""); // 提取数字部分,即 "001"
+
+        // 将数字部分转换为整数并加 1
+        int number = Integer.parseInt(numberPart);
+        number += 1;
+
+        // 格式化回原来的长度,前面补零
+        String newNumberPart = String.format("%03d", number);
+
+        // 组合成新的字符串
+        return prefix + newNumberPart;
+    }
+
 }

+ 26 - 12
zkqy-custom-business/src/main/resources/mapper/business/MaterielMapper.xml

@@ -82,14 +82,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="createById != null">create_by_id,</if>
             <if test="createBy != null">create_by,</if>
             <if test="createTime != null">create_time,</if>
-            <if test="updateById != null">update_by_id,</if>
-            <if test="updateBy != null">update_by,</if>
-            <if test="updateTime != null">update_time,</if>
-            <if test="delFlag != null">del_flag,</if>
             <if test="taskProcessKey != null">task_process_key,</if>
             <if test="taskNodeKey != null">task_node_key,</if>
             <if test="materieEncoding != null">materie_encoding,</if>
             <if test="materieColorNumber != null">materie_color_number,</if>
+            del_flag
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="materielCode != null">#{materielCode},</if>
@@ -106,14 +103,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="createById != null">#{createById},</if>
             <if test="createBy != null">#{createBy},</if>
             <if test="createTime != null">#{createTime},</if>
-            <if test="updateById != null">#{updateById},</if>
-            <if test="updateBy != null">#{updateBy},</if>
-            <if test="updateTime != null">#{updateTime},</if>
-            <if test="delFlag != null">#{delFlag},</if>
             <if test="taskProcessKey != null">#{taskProcessKey},</if>
             <if test="taskNodeKey != null">#{taskNodeKey},</if>
             <if test="materieEncoding != null">#{materieEncoding},</if>
             <if test="materieColorNumber != null">#{materieColorNumber},</if>
+            '0'
          </trim>
     </insert>
 
@@ -131,9 +125,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="status != null">status = #{status},</if>
             <if test="dataApprovalStatus != null">data_approval_status = #{dataApprovalStatus},</if>
             <if test="remark != null">remark = #{remark},</if>
-            <if test="createById != null">create_by_id = #{createById},</if>
-            <if test="createBy != null">create_by = #{createBy},</if>
-            <if test="createTime != null">create_time = #{createTime},</if>
             <if test="updateById != null">update_by_id = #{updateById},</if>
             <if test="updateBy != null">update_by = #{updateBy},</if>
             <if test="updateTime != null">update_time = #{updateTime},</if>
@@ -151,7 +142,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </delete>
 
     <delete id="deleteMaterielByIds" parameterType="String">
-        delete from {DBNAME}.materiel where id in
+        update {DBNAME}.materiel set del_flag = '2' where id in
         <foreach item="id" collection="array" open="(" separator="," close=")">
             #{id}
         </foreach>
@@ -161,4 +152,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <include refid="selectMaterielVo"/>
         where del_flag = '0' and materiel_species = '1' order by materiel_name desc
     </select>
+
+    <select id="selectMaterielManageList" parameterType="com.zkqy.business.domain.Materiel" resultMap="MaterielResult">
+        <include refid="selectMaterielVo"/>
+        where del_flag = '0' and materiel_species = '1'
+        <if test="materieEncoding != null  and materieEncoding != ''"> and materie_encoding like concat('%', #{materieEncoding}, '%')</if>
+        <if test="materieColorNumber != null  and materieColorNumber != ''"> and materie_color_number like concat('%',#{materieColorNumber}, '%' )</if>
+         order by id desc
+    </select>
+
+    <select id="getMaxMaterielCode" resultType="string">
+        SELECT
+            CONCAT('ML_', MAX(CAST(SUBSTRING(materiel_code, LOCATE('ML_', materiel_code) + 3) AS UNSIGNED)) + 1) AS next_value
+        FROM
+            {DBNAME}.materiel
+        WHERE
+            materiel_code LIKE 'ML_%';
+    </select>
+
+    <select id="selectMaterielBymaterieEncoding" parameterType="string" resultMap="MaterielResult">
+        <include refid="selectMaterielVo"/>
+        where materie_encoding = #{materieEncoding} and del_flag = '0'
+    </select>
+
 </mapper>

+ 61 - 0
zkqy-ui/src/api/masterbatchManage/materiel.js

@@ -0,0 +1,61 @@
+import request from '@/utils/request'
+
+// 查询母粒管理信息列表
+export function listMateriel(query) {
+  return request({
+    url: '/system/materiel/selectMaterielManageList',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询物料信息详细
+export function getMateriel(id) {
+  return request({
+    url: '/system/materiel/' + id,
+    method: 'get'
+  })
+}
+
+// 新增物料信息
+export function addMateriel(data) {
+  return request({
+    url: '/system/materiel',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改物料信息
+export function updateMateriel(data) {
+  return request({
+    url: '/system/materiel',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除物料信息
+export function delMateriel(id) {
+  return request({
+    url: '/system/materiel/' + id,
+    method: 'delete'
+  })
+}
+
+// 获取母粒编号
+export function getMaterielCode() {
+  return request({
+    url: '/system/materiel/getMaterielCode',
+    method: 'get'
+  })
+}
+
+//校验转码是否唯一
+export function checkMaterieEncoding(data) {
+  return request({
+    url: '/system/materiel/checkMaterieEncoding',
+    method: 'get',
+    params: data,
+  })
+}

+ 322 - 0
zkqy-ui/src/views/orderMange/masterbatchManage/index.vue

@@ -0,0 +1,322 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+
+      <el-form-item label="转码" prop="materieEncoding">
+        <el-input
+          v-model="queryParams.materieEncoding"
+          placeholder="请输入转码"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="色号" prop="materieColorNumber">
+        <el-input
+          v-model="queryParams.materieColorNumber"
+          placeholder="请输入色号"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:materiel:add']"
+        >新增
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:materiel:remove']"
+        >删除
+        </el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="materielList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center"/>
+      <el-table-column label="转码" align="center" prop="materieEncoding"/>
+      <el-table-column label="色号" align="center" prop="materieColorNumber"/>
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" v-if="false">
+        <template slot-scope="scope">
+          <el-dropdown>
+            <el-button type="warning" plain size="small">
+              处理<i class="el-icon-arrow-down el-icon--right"></i>
+            </el-button>
+            <el-dropdown-menu slot="dropdown">
+              <el-dropdown-item>
+                <el-button
+                  size="mini"
+                  type="text"
+                  icon="el-icon-edit"
+                  @click="handleUpdate(scope.row)"
+                  v-hasPermi="['system:materiel:edit']"
+                >修改
+                </el-button>
+              </el-dropdown-item>
+
+              <el-dropdown-item>
+                <el-button
+                  size="mini"
+                  type="text"
+                  icon="el-icon-delete"
+                  @click="handleDelete(scope.row)"
+                  v-hasPermi="['system:materiel:remove']"
+                >删除
+                </el-button>
+              </el-dropdown-item>
+            </el-dropdown-menu>
+          </el-dropdown>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改物料信息对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="转码" prop="materieEncoding">
+          <el-input v-model="form.materieEncoding" placeholder="请输入转码"/>
+        </el-form-item>
+        <el-form-item label="色号" prop="materieColorNumber">
+          <el-input v-model="form.materieColorNumber" placeholder="请输入色号"/>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  listMateriel,
+  getMateriel,
+  delMateriel,
+  addMateriel,
+  updateMateriel,
+  getMaterielCode,
+  checkMaterieEncoding
+} from "@/api/masterbatchManage/materiel";
+
+export default {
+  name: "Materiel",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 物料信息表格数据
+      materielList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      isEdit: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        materieEncoding: null,
+        materieColorNumber: null
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        materieEncoding: [
+          {required: true, message: '请输入转码', trigger: 'blur'},
+          {validator: this.validatematerieEncoding, trigger: "blur"}
+        ],
+        materieColorNumber: [
+          {required: true, message: '请输入色号', trigger: 'blur'}
+        ]
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询物料信息列表 */
+    getList() {
+      this.loading = true;
+      listMateriel(this.queryParams).then(response => {
+        this.materielList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        materielCode: null,
+        materielName: null,
+        materielAsname: null,
+        subordinateDepartmen: null,
+        materielSpecies: null,
+        materielUse: null,
+        units: null,
+        specificationModel: null,
+        status: null,
+        dataApprovalStatus: null,
+        remark: null,
+        createById: null,
+        createBy: null,
+        createTime: null,
+        updateById: null,
+        updateBy: null,
+        updateTime: null,
+        delFlag: null,
+        taskProcessKey: null,
+        taskNodeKey: null,
+        materieEncoding: null,
+        materieColorNumber: null
+      };
+      this.resetForm("form");
+    },
+    // 校验转码是否唯一
+    async validatematerieEncoding(rule, value, callback) {
+      console.log(value);
+      // 检验转码是否合法
+      let checkNoPayload = {
+        materieEncoding: value,
+      };
+      if (this.isEdit) {
+        checkNoPayload.id = this.form.id;
+      }
+      let result = await checkMaterieEncoding(checkNoPayload);
+      if (result.code == 200) {
+        if (result.data) {
+          callback();
+        } else {
+          callback(new Error("转码已存在"));
+        }
+      } else {
+        callback(new Error("校验失败,请稍后再试"));
+      }
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length !== 1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.isEdit = false;
+      this.reset();
+      getMaterielCode().then(response => {
+        console.log(response.data)
+        this.form.materielCode = response.data
+      });
+      this.open = true;
+      this.title = "添加物料信息";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getMateriel(id).then(response => {
+        this.isEdit = true;
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改物料信息";
+        console.log(response.data)
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            this.form.materielName = this.form.materieColorNumber;
+            updateMateriel(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            this.form.materielSpecies = '1';
+            this.form.materielName = this.form.materieColorNumber;
+            addMateriel(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除物料信息编号为"' + ids + '"的数据项?').then(function () {
+        return delMateriel(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {
+      });
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('system/materiel/export', {
+        ...this.queryParams
+      }, `materiel_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>