ソースを参照

Merge branch 'master' of http://47.100.37.243:10191/wutt/manHourHousekeeper

Lijy 11 ヶ月 前
コミット
c12f8adbe1

+ 15 - 2
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/ProductController.java

@@ -6,6 +6,7 @@ import com.management.platform.mapper.UserMapper;
 import com.management.platform.service.PlanService;
 import com.management.platform.service.ProductService;
 import com.management.platform.util.HttpRespMsg;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
@@ -37,8 +38,8 @@ public class ProductController {
     PlanService planService;
 
     @RequestMapping("/getProductPage")
-    public HttpRespMsg getProductPage(Integer cateId, @RequestParam Integer pageIndex, @RequestParam Integer pageSize, String name, String code) {
-        return productService.getProductPage(cateId, pageIndex, pageSize, name, code, request);
+    public HttpRespMsg getProductPage(Integer cateId, @RequestParam Integer pageIndex, @RequestParam Integer pageSize, String name, String code,@RequestParam(defaultValue = "0")Integer status) {
+        return productService.getProductPage(cateId, pageIndex, pageSize, name, code,status, request);
     }
 
     @RequestMapping("/saveProductInfo")
@@ -76,6 +77,7 @@ public class ProductController {
      * @return
      */
     @RequestMapping(value = "/importData",method = RequestMethod.POST)
+    @Transactional(rollbackFor = Exception.class)
     public HttpRespMsg importData(@RequestParam("file") MultipartFile file,@RequestParam Integer categoryId){
         return productService.importData(file,categoryId,request);
     }
@@ -96,5 +98,16 @@ public class ProductController {
 
         return productService.insertProductInfo(name,id,request);
     }
+
+    @RequestMapping("/deactivate")
+    public HttpRespMsg deactivate(Integer id,Integer value){
+        HttpRespMsg msg=new HttpRespMsg();
+        Product product = productService.getById(id);
+        product.setStatus(value);
+        if(!productService.updateById(product)){
+            msg.setError("验证失败");
+        }
+        return msg;
+    }
 }
 

+ 7 - 7
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/entity/Product.java

@@ -8,12 +8,6 @@ import java.io.Serializable;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
-import org.springframework.validation.annotation.Validated;
-
-import javax.validation.Valid;
-import javax.validation.constraints.Max;
-import javax.validation.constraints.Min;
-import javax.validation.constraints.NotNull;
 
 /**
  * <p>
@@ -21,7 +15,7 @@ import javax.validation.constraints.NotNull;
  * </p>
  *
  * @author Seyason
- * @since 2023-07-21
+ * @since 2024-06-03
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -99,6 +93,12 @@ public class Product extends Model<Product> {
     @TableField("description")
     private String description;
 
+    /**
+     * 0-启用 1-停用
+     */
+    @TableField("status")
+    private Integer status;
+
 
     @Override
     protected Serializable pkVal() {

+ 1 - 1
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/ProductService.java

@@ -17,7 +17,7 @@ import javax.servlet.http.HttpServletRequest;
  */
 public interface ProductService extends IService<Product> {
 
-    HttpRespMsg getProductPage(Integer cateId, Integer pageIndex, Integer pageSize, String name, String code, HttpServletRequest request);
+    HttpRespMsg getProductPage(Integer cateId, Integer pageIndex, Integer pageSize, String name, String code,Integer status, HttpServletRequest request);
 
     HttpRespMsg saveProductInfo(Product product, HttpServletRequest request);
 

+ 8 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/PlanServiceImpl.java

@@ -613,6 +613,10 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
                         if(first.isPresent()){
                             throw new Exception("重复的排产工单号"+productSchedulingNumCell.getStringCellValue());
                         }
+                        Integer count = planMapper.selectCount(new LambdaQueryWrapper<Plan>().eq(Plan::getProductSchedulingNum, productSchedulingNumCell.getStringCellValue()));
+                        if(count>0){
+                            throw new Exception("已存在的排产工单号"+productSchedulingNumCell.getStringCellValue());
+                        }
                         plan.setProductSchedulingNum(productSchedulingNumCell.getStringCellValue());
                     }
                     if(steelStampNumberCell!=null&&!StringUtils.isEmpty(steelStampNumberCell.getStringCellValue())){
@@ -740,6 +744,10 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
                         if(first.isPresent()){
                             throw new Exception("重复的任务变更通知号"+taskChangeNoticeNumCell.getStringCellValue());
                         }
+                        Integer count = planMapper.selectCount(new LambdaQueryWrapper<Plan>().eq(Plan::getTaskChangeNoticeNum, taskChangeNoticeNumCell.getStringCellValue()));
+                        if(count>0){
+                            throw new Exception("已存在的排产工单号"+taskChangeNoticeNumCell.getStringCellValue());
+                        }
                         plan.setTaskChangeNoticeNum(taskChangeNoticeNumCell.getStringCellValue());
                     }
                     if(taskNameCell!=null){

+ 27 - 17
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/ProductServiceImpl.java

@@ -22,6 +22,7 @@ import org.apache.poi.xssf.usermodel.XSSFSheet;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
@@ -32,6 +33,7 @@ import javax.servlet.http.HttpServletRequest;
 import java.io.*;
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -71,7 +73,7 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
     private ExcelExportService excelExportService;
 
     @Override
-    public HttpRespMsg getProductPage(Integer cateId, Integer pageIndex, Integer pageSize, String name, String code, HttpServletRequest request) {
+    public HttpRespMsg getProductPage(Integer cateId, Integer pageIndex, Integer pageSize, String name, String code,Integer status, HttpServletRequest request) {
         QueryWrapper<Product> queryWrapper = new QueryWrapper<>();
         if (cateId != null) {
             queryWrapper.eq("category_id",cateId);
@@ -82,6 +84,7 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
         if (!StringUtils.isEmpty(code)) {
             queryWrapper.like("code",code);
         }
+        queryWrapper.eq("status",status);
         User user = userMapper.selectById(request.getHeader("Token"));
         queryWrapper.eq("company_id",user.getCompanyId()).orderByDesc("id");
 
@@ -310,17 +313,18 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
                     if(StringUtils.isEmpty(nameCell.getStringCellValue())){
                         continue;
                     }
-                    Integer count = productMapper.selectCount(new LambdaQueryWrapper<Product>()
+                    Product selectOne = productMapper.selectOne(new LambdaQueryWrapper<Product>()
                             .eq(companyId != null, Product::getCompanyId, companyId)
-                            .eq(!StringUtils.isEmpty( nameCell.getStringCellValue()), Product::getName,  nameCell.getStringCellValue())
+                            .eq(!StringUtils.isEmpty(nameCell.getStringCellValue()), Product::getName, nameCell.getStringCellValue())
                     );
-                    if(count==0){
+                    if(selectOne!=null){
                         product.setName(nameCell.getStringCellValue());
-
-                    }else{
-                        msg.setError("产品名和已存在的产品重复");
-                        return msg;
+                        product.setId(selectOne.getId());
                     }
+//                    else{
+//                        msg.setError("产品名和已存在的产品重复");
+//                        return msg;
+//                    }
 
                 }else{
                     msg.setError("产品名称不能为空");
@@ -472,16 +476,22 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
             }
 
             //插入数据
-            if(saveBatch(productList)) {
-
+            if(saveOrUpdateBatch(productList)) {
+                List<Integer> productIds = productList.stream().map(Product::getId).distinct().collect(Collectors.toList());
+                List<ProdProcedure> prodProcedures = prodProcedureMapper.selectList(new LambdaQueryWrapper<ProdProcedure>().in(ProdProcedure::getProductId, productIds));
                 for (Product product : productList) {
-                    prodProcedureList.stream()
-                            .filter(prodProcedure -> prodProcedure.getProductName().equals(product.getName()))
-                            .forEach(prodProcedure ->{
-                                prodProcedure.setProductId(product.getId());
-                                prodProcedure.setCompanyId(companyId);
-
-                            } );
+                    List<ProdProcedure> procedureList = prodProcedures.stream().filter(p -> p.getProductId().equals(product.getId())).collect(Collectors.toList());
+                    //找到当前产品下的工序版本号集合
+                    List<String> versionNumberList = procedureList.stream().map(ProdProcedure::getVersionNumber).distinct().collect(Collectors.toList());
+                    List<ProdProcedure> procedures = prodProcedureList.stream()
+                            .filter(prodProcedure -> prodProcedure.getProductName().equals(product.getName())).collect(Collectors.toList());
+                    for (ProdProcedure prodProcedure : procedures) {
+                        if(versionNumberList.contains(prodProcedure.getVersionNumber())){
+                            throw new Exception("产品["+product.getName()+"]下工序["+prodProcedure.getName()+"]版本号["+prodProcedure.getVersionNumber()+"]已存在");
+                        }
+                        prodProcedure.setProductId(product.getId());
+                        prodProcedure.setCompanyId(companyId);
+                    }
                 }
             }
             prodProcedureService.saveBatch(prodProcedureList);

+ 2 - 1
fhKeeper/formulahousekeeper/management-workshop/src/main/resources/mapper/ProductMapper.xml

@@ -16,11 +16,12 @@
         <result column="column_number" property="columnNumber" />
         <result column="vehicle_number" property="vehicleNumber" />
         <result column="description" property="description" />
+        <result column="status" property="status" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, name, category_id, company_id, category_name, code, group_number, order_number, unit, column_number, vehicle_number, description
+        id, name, category_id, company_id, category_name, code, group_number, order_number, unit, column_number, vehicle_number, description, status
     </sql>
 
 </mapper>

+ 7 - 7
fhKeeper/formulahousekeeper/timesheet-workshop/src/views/plan/planComponent.vue

@@ -427,13 +427,13 @@ export default {
     addInput() {
       console.log('===========', this.todayPlanForm.steelStampNumberList)
       console.log('===========', this.todayPlanForm)
-      if (this.todayPlanForm.steelStampNumberList.length >= 9) {
-        this.$message({
-          message: '超过最大条数(9)',
-          type: "error",
-        });
-        return
-      }
+      // if (this.todayPlanForm.steelStampNumberList.length >= 9) {
+      //   this.$message({
+      //     message: '超过最大条数(9)',
+      //     type: "error",
+      //   });
+      //   return
+      // }
       this.todayPlanForm.steelStampNumberList.push({
         id: null,
         steelStampNumberStart: '',

+ 56 - 3
fhKeeper/formulahousekeeper/timesheet-workshop/src/views/product/list.vue

@@ -14,6 +14,16 @@
                     <el-input v-model="code" placeholder="请输入" clearable="true" size="small">
                     </el-input>
                 </el-form-item>
+                <el-form-item label="产品状态">
+                    <el-select v-model="status" placeholder="请选择">
+                        <el-option
+                        v-for="item in productStatus"
+                        :key="item.value"
+                        :label="item.label"
+                        :value="item.value">
+                        </el-option>
+                    </el-select>
+                </el-form-item>
                 <el-form-item>
                     <el-button @click="getList" size="small">查询</el-button>
                 </el-form-item>
@@ -60,6 +70,10 @@
                             </el-form-item>
                             <el-form-item>
                                 <el-table :data="props.row.tableProdProcedure.procedureList" border style="width: 100%">
+                                    <el-table-column
+                                        type="index"
+                                        width="50">
+                                    </el-table-column>
                                     <el-table-column prop="name" label="工序名称" width="180">
                                     </el-table-column>
                                     <el-table-column prop="workingTime" label="单件工时" width="180">
@@ -120,10 +134,11 @@
             <el-table-column prop="groupNumber" label="编组"></el-table-column>
             <el-table-column prop="columnNumber" label="每列数量"></el-table-column>
             <el-table-column prop="vehicleNumber" label="每辆数量"></el-table-column>
-            <el-table-column label="操作" width="200" fixed="right">
+            <el-table-column label="操作" width="250" fixed="right">
                 <template slot-scope="scope">
                     <el-button size="mini" @click="handleAdd(scope.$index, scope.row)">编辑</el-button>
                     <el-button size="mini" @click="copyProduct(scope.row)">复制</el-button>
+                    <el-button size="mini" @click="deactivate(scope.row)">{{scope.row.status==0?'停用':'启用'}}</el-button>
                 </template>
             </el-table-column>
         </el-table>
@@ -885,7 +900,17 @@ export default {
             dataListBf: [],
             imgUrlLists: '',
             imgUrlListFlg: false,
-            estimatedWorkTime: ''
+            estimatedWorkTime: '',
+            productStatus:[
+                {
+                value: '0',
+                label: '启用'
+                }, {
+                value: '1',
+                label: '停用'
+                }
+            ],
+            status:'0'
         };
     },
     // 过滤器
@@ -1586,6 +1611,33 @@ export default {
                     });
                 });
         },
+        deactivate(item){
+            var value
+            item.status==0?value=1:value=0
+            this.http.post('/product/deactivate', {
+                id:item.id,value:value
+            },
+            res => {
+                if (res.code == "ok") {
+                    this.$message({
+                        message: item.status==0?'停用成功':'启用成功',
+                        type: "success"
+                    });
+                } else {
+                    this.$message({
+                        message: res.msg,
+                        type: "error"
+                    });
+                }
+                this.getList()
+            },
+            error => {
+                this.$message({
+                    message: error,
+                    type: "error"
+                });
+            });
+        },
         addProjectLevel(row) {
             this.addProjectLevelDialog = true
             if (!row) {
@@ -3007,7 +3059,8 @@ export default {
                 pageSize: this.size,
                 name: this.name,
                 code: this.code,
-                cateId: this.cateId
+                cateId: this.cateId,
+                status:this.status
             }
 
             this.http.post('/product/getProductPage', parameter,

+ 1 - 1
fhKeeper/formulahousekeeper/timesheet-workshop/src/views/workReport/daily.vue

@@ -4127,7 +4127,7 @@
                 let day = (this.choseDay +1)> 9 ? "-" + (this.choseDay + 1) : "-0" + (this.choseDay + 1);
                 sessionStorage.msg = this.date + day,
                 this.getReportList();
-                this.getDepartment();
+                // this.getDepartment();
                 this.curDate = item.date;
             },
             canClick(i, item){

+ 1 - 1
fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/index.vue

@@ -422,7 +422,7 @@
                                 placeholder="请输入加班时长" style="width: 5.2rem" @input="$forceUpdate()"></van-field>
                             <span :class="item.canEdit ? 'overListTime' : 'overListTime hoveOver'">小时</span>
                         </div>
-                        <van-tag style="position:absolute;right:10px;" v-if="isCorpWX && item.canEdit" type="primary"
+                        <van-tag style="position:absolute;right:10px;" v-if="user.companyId != 4281 && isCorpWX && item.canEdit" type="primary"
                             size="large" @click="takePhoto(index)">拍照上传</van-tag>
                         <!-- <van-tag style="position:absolute;right:10px;" type="primary" size="large" @click="takePhoto(index)">拍照上传</van-tag> -->
                         <!-- <van-tag style="position:absolute;right:10px;" type="primary" size="large" @click="takePhoto(index)">拍照上传</van-tag> -->

+ 1 - 1
fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/weekEdit.vue

@@ -362,7 +362,7 @@
                                 placeholder="请输入加班时长" style="width: 5rem"></van-field>
                                 <span :class="'overListTime'">小时</span>    
                             </div>
-                            <van-tag style="position:absolute;right:10px;" v-if="isCorpWX" type="primary" size="large" @click="takePhoto(index)">拍照上传</van-tag>
+                            <van-tag v-if="user.companyId != 4281&& isCorpWX&&canEdit"  style="position:absolute;right:10px;" v-if="isCorpWX" type="primary" size="large" @click="takePhoto(index)">拍照上传</van-tag>
                         </div>
                         <div style="padding:5px;text-align:center;" v-if="!isIOSystem">
                             <span v-for="(p, index) in item.pics"  :key="p" style="margin-right:15px;">