Просмотр исходного кода

提交 修改工序单价工时 同步修改 total team report 表相关数据

Min 11 месяцев назад
Родитель
Сommit
bb4b237690

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

@@ -41,8 +41,8 @@ public class PlanController {
     private ReportService reportService;
 
     @RequestMapping("/list")
-    public HttpRespMsg list(String date,String steelStampNumber,@RequestParam(defaultValue = "3") Integer planType,Integer deptId,Integer pageIndex,Integer pageSize,Integer isMob){
-        return planService.getList(date,steelStampNumber,planType,deptId,pageIndex,pageSize,isMob);
+    public HttpRespMsg list(String date,String steelStampNumber,@RequestParam(defaultValue = "3") Integer planType,Integer deptId,Integer pageIndex,Integer pageSize,Integer isMob,Integer searchType,String searchValue){
+        return planService.getList(date,steelStampNumber,planType,deptId,pageIndex,pageSize,isMob,searchType,searchValue);
     }
     
     @RequestMapping("/getById")

+ 2 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/ProdProcedureController.java

@@ -8,6 +8,7 @@ import com.management.platform.entity.ProdProcedure;
 import com.management.platform.service.ProdProcedureService;
 import com.management.platform.util.HttpRespMsg;
 import com.sun.scenario.effect.impl.sw.java.JSWBlend_SRC_OUTPeer;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
@@ -48,6 +49,7 @@ public class ProdProcedureController {
      * 新增、修改工序
      */
     @RequestMapping("/changeProdProcedure")
+    @Transactional(rollbackFor = Exception.class)
     public HttpRespMsg changeProdProcedure ( Integer productId ,String productName,String version, String  prodProcedures){
         System.out.println(prodProcedures);
         List<ProdProcedure> prodProcedureList= null;

+ 28 - 2
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/entity/Plan.java

@@ -22,7 +22,7 @@ import org.springframework.format.annotation.DateTimeFormat;
  * </p>
  *
  * @author Seyason
- * @since 2024-01-11
+ * @since 2024-06-04
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -40,6 +40,12 @@ public class Plan extends Model<Plan> {
     @TableField("product_scheduling_num")
     private String productSchedulingNum;
 
+    /**
+     * 排产订单号
+     */
+    @TableField("product_order_num")
+    private String productOrderNum;
+
     /**
      * 产品ID
      */
@@ -58,6 +64,12 @@ public class Plan extends Model<Plan> {
     @TableField("project_code")
     private String projectCode;
 
+    /**
+     * 项目名称
+     */
+    @TableField("project_name")
+    private String projectName;
+
     /**
      * 公司ID
      */
@@ -235,6 +247,18 @@ public class Plan extends Model<Plan> {
     @TableField("vehicle_num_end")
     private Integer vehicleNumEnd;
 
+    /**
+     * 列序号
+     */
+    @TableField("column_num_start")
+    private Integer columnNumStart;
+
+    /**
+     * 列序号
+     */
+    @TableField("column_num_end")
+    private Integer columnNumEnd;
+
     /**
      * 是否隐藏0-否 1-是
      */
@@ -248,9 +272,11 @@ public class Plan extends Model<Plan> {
     private Integer isDelete;
 
     /**
-     * 实际完工日期
+     * 实际完工时间
      */
     @TableField("real_end_date")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat( pattern="yyyy-MM-dd")
     private LocalDate realEndDate;
 
     @TableField(exist = false)

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

@@ -19,7 +19,7 @@ import javax.servlet.http.HttpServletRequest;
  */
 public interface PlanService extends IService<Plan> {
 
-    HttpRespMsg getList(String date, String steelStampNumber, Integer planType,Integer deptId,Integer pageIndex,Integer pageSize,Integer isMob);
+    HttpRespMsg getList(String date, String steelStampNumber, Integer planType,Integer deptId,Integer pageIndex,Integer pageSize,Integer isMob,Integer searchType,String searchValue);
 
     HttpRespMsg addOrUpdatePlan(Plan plan);
 

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

@@ -99,7 +99,7 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
     private String path;
 
     @Override
-    public HttpRespMsg getList(String date, String steelStampNumber, Integer planType,Integer deptId,Integer pageIndex,Integer pageSize,Integer isMob) {
+    public HttpRespMsg getList(String date, String steelStampNumber, Integer planType,Integer deptId,Integer pageIndex,Integer pageSize,Integer isMob,Integer searchType,String searchValue) {
         HttpRespMsg msg=new HttpRespMsg();
         User user = userMapper.selectById(request.getHeader("token"));
         Integer companyId = user.getCompanyId();
@@ -118,6 +118,22 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
         }else {
             queryWrapper.eq(Plan::getPlanType,1);
         }
+        if(!StringUtils.isEmpty(searchValue)){
+            switch (searchType){
+                case 1:
+                    queryWrapper.like(Plan::getProductSchedulingNum,searchValue);
+                    break;
+                case 2:
+                    queryWrapper.like(Plan::getProjectName,searchValue);
+                    break;
+                case 3:
+                    queryWrapper.like(Plan::getProductName,searchValue);
+                    break;
+                case 4:
+                    queryWrapper.like(Plan::getProductOrderNum,searchValue);
+                    break;
+            }
+        }
         if(deptId!=null){
             //获取获取下级部门列表
             List<Department> departmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("superior_id", deptId));

+ 91 - 4
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/ProdProcedureServiceImpl.java

@@ -4,16 +4,17 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.management.platform.entity.*;
 import com.management.platform.mapper.*;
-import com.management.platform.service.PlanProcedureTotalService;
-import com.management.platform.service.ProdProcedureService;
+import com.management.platform.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.management.platform.service.ReportService;
 import com.management.platform.util.HttpRespMsg;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.web.bind.annotation.RequestParam;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -42,9 +43,13 @@ public class ProdProcedureServiceImpl extends ServiceImpl<ProdProcedureMapper, P
     private PlanProcedureTotalService planProcedureTotalService;
     @Resource
     private ReportService reportService;
+    @Resource
+    private ProdProcedureTeamService prodProcedureTeamService;
+    @Resource
+    private PlanService planService;
 
     @Override
-    public HttpRespMsg changeProdProcedure(HttpServletRequest request, List<ProdProcedure> prodProcedureList, Integer productId, String productName, String version) {
+    public HttpRespMsg changeProdProcedure(HttpServletRequest request, List<ProdProcedure> prodProcedureList, Integer productId, String productName, String version){
         HttpRespMsg msg = new HttpRespMsg();
         String token = request.getHeader("TOKEN");
         User user = userMapper.selectById(token);
@@ -104,6 +109,88 @@ public class ProdProcedureServiceImpl extends ServiceImpl<ProdProcedureMapper, P
                 if (updateList != null&&updateList.size()>0) {
                     System.out.println("updateList"+updateList);
                     this.updateBatchById(updateList);
+                    //todo:更新产品工序单价
+                    List<Integer> procedureIds = updateList.stream().map(ProdProcedure::getId).distinct().collect(Collectors.toList());
+                    //todo:找到用到当前工序的plan_procedure_total(计划指定工序总进度表) 更新 单价相关数据
+                    List<PlanProcedureTotal> planProcedureTotals = planProcedureTotalService.list(new LambdaQueryWrapper<PlanProcedureTotal>().in(PlanProcedureTotal::getProdProcedureId, procedureIds));
+                    if(planProcedureTotals.size()>0){
+                        List<Integer> planIds = planProcedureTotals.stream().map(PlanProcedureTotal::getPlanId).distinct().collect(Collectors.toList());
+                        List<Plan> planList = planService.list(new LambdaQueryWrapper<Plan>().in(Plan::getId, planIds));
+                        List<Integer> totalIds = planProcedureTotals.stream().map(PlanProcedureTotal::getId).distinct().collect(Collectors.toList());
+                        List<ProdProcedureTeam> allProdProcedureTeams = prodProcedureTeamService.list(new LambdaQueryWrapper<ProdProcedureTeam>().in(ProdProcedureTeam::getPlanProcedureId,totalIds));
+                        List<Integer> teamIdList = allProdProcedureTeams.stream().map(ProdProcedureTeam::getId).distinct().collect(Collectors.toList());
+                        List<Report> allReports = reportService.list(new LambdaQueryWrapper<Report>().select(Report::getId,Report::getUserProcedureTeamId, Report::getProdProcedureId,Report::getFinishNum).in(Report::getUserProcedureTeamId, teamIdList));
+                        List<ProdProcedureTeam> needUpdateTeamList=new ArrayList<>();
+                        List<Report> needUpdateReportList=new ArrayList<>();
+                        for (PlanProcedureTotal planProcedureTotal : planProcedureTotals) {
+                            Optional<ProdProcedure> first = updateList.stream().filter(u -> u.getId().equals(planProcedureTotal.getId())).findFirst();
+                            if(first.isPresent()){
+                                Optional<Plan> plan = planList.stream().filter(p -> p.getId().equals(planProcedureTotal.getPlanId())).findFirst();
+                                if(plan.isPresent()){
+                                    BigDecimal totalWages=new BigDecimal(String.valueOf(first.get().getUnitPrice()));
+                                    totalWages=totalWages.multiply(new BigDecimal(plan.get().getNum()));
+                                    planProcedureTotal.setTotalWages(totalWages.doubleValue());
+                                    BigDecimal totalWorkingHours=new BigDecimal(String.valueOf(first.get().getWorkingTime()));
+                                    totalWorkingHours=totalWorkingHours.multiply(new BigDecimal(plan.get().getNum()));
+                                    planProcedureTotal.setTotalWorkingHours(totalWorkingHours.doubleValue());
+                                    //todo:找到用到当前工序的prod_procedure_team (计划分配表) 更新 单价相关数据
+                                    List<ProdProcedureTeam> prodProcedureTeams =allProdProcedureTeams.stream().filter(a->a.getPlanProcedureId().equals(planProcedureTotal.getId())).collect(Collectors.toList());
+                                    prodProcedureTeams = prodProcedureTeams.stream().sorted(Comparator.comparing(ProdProcedureTeam::getId)).collect(Collectors.toList());
+                                    String teamIds = prodProcedureTeams.stream().map(ProdProcedureTeam::getUserId).collect(Collectors.joining(","));
+                                    BigDecimal overCountWages = new BigDecimal(0);
+                                    BigDecimal overWorkingHours = new BigDecimal(0);
+                                    if(!org.springframework.util.StringUtils.isEmpty(teamIds)){
+                                        String[] team = teamIds.split(",");
+                                        totalWages=totalWages.divide(new BigDecimal(team.length),1, RoundingMode.HALF_UP);
+                                        totalWorkingHours=totalWorkingHours.divide(new BigDecimal(team.length),1, RoundingMode.HALF_UP);
+                                        overCountWages=totalWages.multiply(new BigDecimal(team.length));
+                                        overWorkingHours=totalWorkingHours.multiply(new BigDecimal(team.length));
+                                        for (int i = 0; i < team.length; i++) {
+                                            int finalI = i;
+                                            //已存在的人员更新处理
+                                            Optional<ProdProcedureTeam> teamOptional = prodProcedureTeams.stream().filter(pl -> pl.getUserId().equals(team[finalI])).findFirst();
+                                            if(teamOptional.isPresent()){
+                                                ProdProcedureTeam prodProcedureTeam = teamOptional.get();
+                                                if(i==team.length-1){
+                                                    double wagesAbs =new BigDecimal(planProcedureTotal.getTotalWages()).subtract(overCountWages).doubleValue();
+                                                    double workTimesAbs =new BigDecimal(planProcedureTotal.getTotalWorkingHours()).subtract(overWorkingHours).doubleValue();
+                                                    prodProcedureTeam.setWorkTime(totalWorkingHours.add(new BigDecimal(workTimesAbs)).doubleValue());
+                                                    prodProcedureTeam.setJobOfMoney(totalWages.add(new BigDecimal(wagesAbs)));
+                                                }else {
+                                                    prodProcedureTeam.setWorkTime(totalWorkingHours.doubleValue());
+                                                    prodProcedureTeam.setJobOfMoney(totalWages);
+                                                }
+                                                if(plan.get().getPlanType()==1){
+                                                    prodProcedureTeam.setStatus(1);
+                                                }
+                                                needUpdateTeamList.add(prodProcedureTeam);
+                                                //todo:找到用到当前工序的report (报工表) 更新 单价相关数据
+                                                List<Report> reports = allReports.stream().filter(a -> a.getUserProcedureTeamId().equals(prodProcedureTeam.getId())).collect(Collectors.toList());
+                                                for (Report report : reports) {
+                                                    double curReportTime = 0.0;
+                                                    Integer num = plan.get().getNum();//总件数
+                                                    double addPercent = report.getFinishNum() / num;
+                                                    //新版计算报工的工时和价钱;根据填报件数的占比计算工时和价钱
+                                                    double earnMoney = planProcedureTotal.getTotalWages() * addPercent;
+                                                    curReportTime = planProcedureTotal.getTotalWorkingHours() * addPercent;
+                                                    report.setWorkingTime(curReportTime);//本次报工的工时数
+                                                    report.setCost(new BigDecimal(earnMoney));//本次报工的成本
+                                                    needUpdateReportList.add(report);
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                        planProcedureTotalService.updateBatchById(planProcedureTotals);
+                        if(needUpdateTeamList.size()>0){
+                            prodProcedureTeamService.updateBatchById(needUpdateTeamList);
+                        }
+                        if(needUpdateReportList.size()>0){
+                            reportService.updateBatchById(needUpdateReportList);
+                        }
+                    }
                 }
                 //4.新增的id
                 List<ProdProcedure> insertList = prodProcedureList.stream().filter(prodProcedure -> prodProcedure.getId() == null).collect(Collectors.toList());

Разница между файлами не показана из-за своего большого размера
+ 5 - 1
fhKeeper/formulahousekeeper/management-workshop/src/main/resources/mapper/PlanMapper.xml


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

@@ -18,6 +18,17 @@
             <span class="demonstration">{{ "钢印号" }}</span><el-input v-model="steelStampNumber" size="small"
               @change="getTableData(hasChooseDept)" placeholder="请输入内容" clearable="true"></el-input>
           </div>
+          <div class="OutSide" style="padding-bottom: 0;">
+              <el-input placeholder="请输入内容"  v-model="searchValue" class="input-with-select">
+              <el-select v-model="searchType" slot="prepend" placeholder="请选择">
+                <el-option label="排产工单号" value="1"></el-option>
+                <el-option label="项目名称" value="2"></el-option>
+                <el-option label="产品名称" value="3"></el-option>
+                <el-option label="订单号" value="3"></el-option>
+              </el-select>
+              <el-button slot="append" icon="el-icon-search" @click="getTableData()"></el-button>
+            </el-input>
+          </div>
         </div>
         <div class="OutSide_right">
           <!-- <el-link type="primary" :underline="false" @click="(deptSetDialog = true), getPlanDeptSet()">{{ "部门设置"
@@ -142,6 +153,9 @@
           <el-form-item label="项目代码" style="width: 100%" prop="projectCode">
             <el-input :disabled="todayPlanForm.id==null?false:true" v-model="todayPlanForm.projectCode" maxlength="50" readonly></el-input>
           </el-form-item>
+          <el-form-item label="项目名称" style="width: 100%" prop="projectCode">
+            <el-input  v-model="todayPlanForm.projectName" maxlength="50" ></el-input>
+          </el-form-item>
 
           <div v-for="(item, index) in todayPlanForm.steelStampNumberList" style="width: 100%;margin-bottom: 10px;">
             <el-form-item label="钢印号" :key="index" style="width: 100%" prop="steelStampNumberStart">
@@ -167,6 +181,11 @@
           <!-- <el-form-item label="进度"  :style="this.titleName==='编辑今日计划'?'':'width: 100%'" prop="progress">
             <el-input v-model="todayPlanForm.progress" maxlength="20"></el-input>
           </el-form-item> -->
+          <el-form-item label="列序号" style="width: 100%" prop="columnNumStart">
+            <el-input-number class="w45" v-model="todayPlanForm.columnNumStart" maxlength="20"></el-input-number>
+            {{ "-" }}
+            <el-input-number class="w45" v-model="todayPlanForm.columnNumEnd" maxlength="20"></el-input-number>
+          </el-form-item>
           <el-form-item label="车辆序号" style="width: 100%" prop="steelStampNumberStart">
             <el-input-number class="w45" v-model="todayPlanForm.vehicleNumStart" maxlength="20"></el-input-number>
             {{ "-" }}
@@ -397,6 +416,7 @@ export default {
         ],
         productId: [{ required: true, message: "产品名称", trigger: "blur" }],
         projectCode: [{ required: true, message: "项目代码", trigger: "blur" }],
+        projectName: [{ required: true, message: "项目名称", trigger: "blur" }],
         // steelStampNumberStart: [
         //   { required: true, message: "钢印号", trigger: "blur" },
         // ],
@@ -412,6 +432,8 @@ export default {
       },
       exportDialog: false,
       exportParam: { productId: null, rangeDatas: this.getCurrentRangeTime() },
+      searchType:'1',
+      searchValue:'',
     };
   },
   computed: {},
@@ -688,6 +710,8 @@ export default {
           steelStampNumber: this.steelStampNumber,
           pageIndex: this.pageIndex,
           pageSize: this.pageSize,
+          searchValue:this.searchValue,
+          searchType:this.searchType
         },
         (res) => {
           this.tableDataLoading = false;