chenlu
8 天以前 aece48b253b2e0b814bbdf5ee3d474e8cf697122
Merge branch 'master' of http://bore.pub:10439/r/ERP_override
11个文件已修改
330 ■■■■■ 已修改文件
north-glass-erp/northglass-erp/src/views/mm/stockReport/FinishedProductInventoryReport.vue 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/OptimizationRect.vue 139 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/sd/basicData/SearchProcessAttributeConfig.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/controller/mm/FinishedGoodsInventoryController.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/controller/pp/GlassOptimizeController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/mm/FinishedOperateLogMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/pp/ReportingWorkMapper.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/mm/FinishedGoodsInventoryService.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/mm/FinishedOperateLog.xml 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/pp/Report.xml 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/sd/BasicGlassTypeMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/mm/stockReport/FinishedProductInventoryReport.vue
@@ -1,13 +1,14 @@
<script setup>
import BasicTable from "@/components/BasicTable.vue"
import BasicTable from "@/components/BrokenReportTemplate.vue"
import request from "@/utils/request"
import { ref} from "vue"
import { useI18n } from 'vue-i18n'
import companyInfo from "@/stores/sd/companyInfo";
//语言获取
const { t } = useI18n()
const company = companyInfo()
const childrenData = ref({
  columns:[
    {type: 'seq',fixed:"left", title: t('basicData.Number'), width: '80' },
@@ -30,7 +31,7 @@
    {field: 'staterOperationOrderNumber', width: '150',title: t('productStock.staterOperationOrderNumber'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'endOperationOrderNumber', width: '100',title: t('productStock.endOperationOrderNumber'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'operator', width: '100',title: t('productStock.creator'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'operateTime', width:'140', title: t('productStock.productionDate'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'operateTime', width:'140', title: t('productStock.storageTime'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'processId', width:'140', title: t('processCard.processId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'type', width:'140', title: t('productStock.typeClaim'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'reviewed', width: '100',title: t('productStock.reviewed'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
@@ -40,7 +41,7 @@
  ],//表格表头字段
  data:[],//表格数据
  url :'/finishedGoodsInventory/getSelectFinishedOperateLogReport/入库',
  exportUrl :'/finishedGoodsInventory/exportFinishedOperateLogReport/入库',
  exportUrl :`/finishedGoodsInventory/exportFinishedOperateLogReportByDatetime/入库`,
  exportName:t('stockReport.finishedProductInventoryReport'),
  footList:['quantity','area','money','squareMillimeter']
})
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/OptimizationRect.vue
@@ -989,36 +989,153 @@
    }
    adjustGrayRectangles(layoutIndex);
  } else {
    // 旋转失败,恢复原始尺寸
    glassDetail.width = originalState.width;
    glassDetail.height = originalState.height;
    ElMessage.warning('无法旋转,存在重叠或超出边界');
    // 尝试向上移动并旋转
    const upResult = tryMoveAndRotate(layoutIndex, rectIndex, 'up');
    if (!upResult) {
      ElMessage.warning('无法旋转,即使移动后仍存在重叠或超出边界');
  }
  }
};
// 辅助方法:尝试移动并旋转
const tryMoveAndRotate = (layoutIndex, rectIndex, direction) => {
  // 保存原始状态
  const layout = layouts.value[layoutIndex];
  const glassDetail = layout.glassDetails[rectIndex];
  const originalPosition = {
    x: glassDetail.x,
    y: glassDetail.y,
    width: glassDetail.width,
    height: glassDetail.height
  };
  let success = false;
  if (direction === 'up') {
    // 尝试向上移动并旋转
    moveRectAndRotate(layoutIndex, rectIndex, 'down');
    // 检查是否成功
    const otherRects = layout.glassDetails.filter(r => !r.isRemain && r !== glassDetail);
    let hasOverlap = false;
    otherRects.forEach(otherRect => {
      if (checkOverlap(glassDetail, otherRect)) {
        hasOverlap = true;
      }
    });
    if (!hasOverlap &&
        glassDetail.x + glassDetail.width <= layout.width &&
        glassDetail.y + glassDetail.height <= layout.height &&
        glassDetail.x >= 0 && glassDetail.y >= 0) {
      success = true;
      // 如果向上移动并旋转成功,则再向下移动,让矩形靠近底部
      moveRect(layoutIndex, rectIndex, 'up');
    } else {
      // 向上移动并旋转失败,恢复原始状态
      glassDetail.x = originalPosition.x;
      glassDetail.y = originalPosition.y;
      glassDetail.width = originalPosition.width;
      glassDetail.height = originalPosition.height;
    }
  } else if (direction === 'down') {
    // 尝试向下移动并旋转
    moveRectAndRotate(layoutIndex, rectIndex, 'up');
    // 检查是否成功
    const otherRects = layout.glassDetails.filter(r => !r.isRemain && r !== glassDetail);
    let hasOverlap = false;
    otherRects.forEach(otherRect => {
      if (checkOverlap(glassDetail, otherRect)) {
        hasOverlap = true;
      }
    });
    if (!hasOverlap &&
        glassDetail.x + glassDetail.width <= layout.width &&
        glassDetail.y + glassDetail.height <= layout.height &&
        glassDetail.x >= 0 && glassDetail.y >= 0) {
      success = true;
      // 如果向下移动并旋转成功,则再向上移动,让矩形靠近顶部
      moveRect(layoutIndex, rectIndex, 'down');
    } else {
      // 向下移动并旋转失败,恢复原始状态
      glassDetail.x = originalPosition.x;
      glassDetail.y = originalPosition.y;
      glassDetail.width = originalPosition.width;
      glassDetail.height = originalPosition.height;
    }
  }
  return success;
};
//移动旋转方法
const moveRectAndRotate = (layoutIndex, rectIndex, direction) => {
  const layout = layouts.value[layoutIndex];
  const glassDetail = layout.glassDetails[rectIndex];
  const grayRects = layout.glassDetails.filter(r => r.isRemain);
  // 先移动
  moveRect(layoutIndex, rectIndex, direction);
  // 再旋转
  const originalState = { ...glassDetail };
  const temp = glassDetail.width;
  glassDetail.width = glassDetail.height;
  glassDetail.height = temp;
  const canPlace = grayRects.some(grayRect => {
    return grayRect.width >= glassDetail.width && grayRect.height >= glassDetail.height;
  const otherRects = layout.glassDetails.filter(r => !r.isRemain && r !== glassDetail);
  let isValidRotation = true;
  otherRects.forEach(otherRect => {
    if (checkOverlap(glassDetail, otherRect)) {
      isValidRotation = false;
    }
  });
  if (!canPlace) {
    const temp = glassDetail.width;
    glassDetail.width = glassDetail.height;
    glassDetail.height = temp;
    ElMessage.warning('无法旋转,没有足够的空间');
    return;
  if (glassDetail.x + glassDetail.width > layout.width || glassDetail.y + glassDetail.height > layout.height) {
    isValidRotation = false;
  }
  if (isValidRotation) {
    // 更新glassPoint坐标(如果存在)
    if (glassDetail.glassPoint && Array.isArray(glassDetail.glassPoint)) {
      const originalPoints = JSON.parse(JSON.stringify(glassDetail.glassPoint));
      glassDetail.glassPoint.forEach((point, index) => {
        const relX = originalPoints[index].X - originalState.x;
        const relY = originalPoints[index].Y - originalState.y;
        point.X = originalState.x + relY;
        point.Y = originalState.y + (originalState.width - relX);
        point.X = parseFloat(point.X.toFixed(2));
        point.Y = parseFloat(point.Y.toFixed(2));
      });
    }
  adjustGrayRectangles(layoutIndex);
  moveRect(layoutIndex, rectIndex, direction);
  } else {
    // 旋转失败,恢复原始尺寸和位置
    glassDetail.width = originalState.width;
    glassDetail.height = originalState.height;
    // 恢复移动前的位置
    moveRect(layoutIndex, rectIndex, getReverseDirection(direction));
    ElMessage.warning('无法旋转,存在重叠或超出边界');
  }
};
// 获取反向方向的辅助函数
const getReverseDirection = (direction) => {
  switch (direction) {
    case 'up': return 'down';
    case 'down': return 'up';
    case 'left': return 'right';
    case 'right': return 'left';
    default: return direction;
  }
};
//移动方法
north-glass-erp/northglass-erp/src/views/sd/basicData/SearchProcessAttributeConfig.vue
@@ -102,6 +102,12 @@
    if ($grid) {
      switch (code) {
        case 'add': {
          submit.value.glassLevel = [null,null]
          submit.value.processType = null
          submit.value.processName = null
          submit.value.inputType = null
          submit.value.id = null
          rowIndex.value = null
          dialogTableVisible.value = true
          break
        }
north-glass-erp/src/main/java/com/example/erp/controller/mm/FinishedGoodsInventoryController.java
@@ -23,6 +23,7 @@
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
@@ -169,6 +170,14 @@
        return Result.success(finishedGoodsInventoryService.getSelectFinishedOperateLogReport(type,pageNum,pageSize,selectDate,finishedOperateLog));
    }
    @ApiOperation("成品库存记录查询接口日期时间查询")
    @SaCheckPermission("warehouseReport.search")
    @PostMapping("/getSelectFinishedOperateLogReport/{type}/{pageNum}/{pageSize}/{selectDate}/{reportTime}")
    public Result getSelectFinishedOperateLogReportByDatetime(@PathVariable String type,@PathVariable Integer pageNum, @PathVariable Integer pageSize,@PathVariable List<String> selectDate,@PathVariable String reportTime, @RequestBody FinishedOperateLog finishedOperateLog){
        return Result.success(finishedGoodsInventoryService.getSelectFinishedOperateLogReportByDateTime(type,pageNum,pageSize,selectDate,reportTime,finishedOperateLog));
    }
    @ApiOperation("成品报表导出")
    @PostMapping("/exportFinishedOperateLogReport/{type}")
    public void exportFinishedOperateLogReport(@PathVariable String type,HttpServletResponse response, @RequestBody List<LocalDate> dates) throws IOException, IllegalAccessException, InstantiationException {
@@ -176,6 +185,15 @@
        DownExcel.download(response, FinishedOperateLogDTO.class, finishedGoodsInventoryService.exportFinishedOperateLogReport(dates,type),"orderReport");
    }
    @ApiOperation("成品报表导出日期时间")
    @PostMapping("/exportFinishedOperateLogReportByDatetime/{type}")
    public void exportFinishedOperateLogReportByDatetime(
            @PathVariable String type,HttpServletResponse response,
            @RequestBody List<String> dates) throws IOException, IllegalAccessException, InstantiationException {
        //参数:相应的数据,实体类信息,相应的方法(数据获取),生成的excel名字
        DownExcel.download(response, FinishedOperateLogDTO.class, finishedGoodsInventoryService.exportFinishedOperateLogReportByDatetime(dates,type),"orderReport");
    }
    /*订单一键入库*/
    @ApiOperation("订单一键入库")
north-glass-erp/src/main/java/com/example/erp/controller/pp/GlassOptimizeController.java
@@ -228,7 +228,7 @@
    }
    @PostMapping("/calculate")
    @PostMapping("/mesCalculate")
    public ResponseEntity<Map<String, Object>> receiveOptimizeRequest(
            @RequestBody Map<String, Object> requestData) {
@@ -240,7 +240,7 @@
            response.put("msg", "success");
            response.put("data", "");
            // 异步处理计算任务
            // todo 异步处理计算任务
//            glassOptimizeService.processExternalOptimizeRequest(requestData);
            System.out.println(requestData);
north-glass-erp/src/main/java/com/example/erp/mapper/mm/FinishedOperateLogMapper.java
@@ -80,14 +80,17 @@
    List<FinishedOperateLog> getSelectFinishedOperateLogReport(@Param("offset") Integer offset,
                                             @Param("pageSize") Integer pageSize,String startDate, String endDate,
                                             @Param("finishedOperateLog") FinishedOperateLog finishedOperateLog,String type);
                                             @Param("finishedOperateLog") FinishedOperateLog finishedOperateLog,String type,
                                             @Param("dateType")  String dateType);
    Map<String,Integer> getSelectFinishedOperateLogReportPageTotal(@Param("offset") Integer offset,
                                                           @Param("pageSize") Integer pageSize,String startDate, String endDate,
                                                           @Param("finishedOperateLog") FinishedOperateLog finishedOperateLog,String type);
                                                           @Param("finishedOperateLog") FinishedOperateLog finishedOperateLog,
                                                                   String type,
                                                           @Param("dateType") String dateType);
    List<FinishedOperateLogDTO> exportFinishedOperateLogReport(List<LocalDate> dates,String type);
    List<FinishedOperateLogDTO> exportFinishedOperateLogReportByDatetime(List<String> dates,String type);
    Boolean insertOrderFinishedOperateLog(@Param("orderDetail") OrderDetail orderDetail,@Param("userName") String userName,
                                          @Param("oddNumber") String oddNumber,@Param("processId") String processId);
north-glass-erp/src/main/java/com/example/erp/mapper/pp/ReportingWorkMapper.java
@@ -12,7 +12,12 @@
public interface ReportingWorkMapper extends MPJBaseMapper<ReportingWork> {
    ReportingWork AddSelectLastWorkMp(String processIdStr, String technologyStr, String previousProcess, String nextProcess, String process, String reportType);
    ReportingWork AddSelectLastWorkMp(String processIdStr,
                                      String technologyStr,
                                      String previousProcess,
                                      String nextProcess,
                                      String process,
                                      String reportType);
    List<BasicDataProduce> SelectWorkBasicDeviceMp(String process);
north-glass-erp/src/main/java/com/example/erp/service/mm/FinishedGoodsInventoryService.java
@@ -38,6 +38,8 @@
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
@Service
@@ -702,8 +704,8 @@
        }
        Map<String, Object> map = new HashMap<>();
        map.put("data", finishedOperateLogMapper.getSelectFinishedOperateLogReport(offset, pageSize,startDate, endDate, finishedOperateLog,type));
        map.put("total", finishedOperateLogMapper.getSelectFinishedOperateLogReportPageTotal(offset, pageSize,startDate, endDate, finishedOperateLog,type));
        map.put("data", finishedOperateLogMapper.getSelectFinishedOperateLogReport(offset, pageSize,startDate, endDate, finishedOperateLog,type,"date"));
        map.put("total", finishedOperateLogMapper.getSelectFinishedOperateLogReportPageTotal(offset, pageSize,startDate, endDate, finishedOperateLog,type,"date"));
        List<String> list = new ArrayList<>();
        list.add(startDate);
        list.add(endDate);
@@ -1463,4 +1465,56 @@
        return map;
    }
    public Map<String, Object> getSelectFinishedOperateLogReportByDateTime(String type, Integer pageNum, Integer pageSize, List<String> selectDate, String reportTime, FinishedOperateLog finishedOperateLog) {
        Integer offset = (pageNum-1)*pageSize;
        String startDate = toReportTime(LocalDate.now().minusDays(7).toString(), reportTime);
        String endDate   = toReportTime(LocalDate.now().toString(), reportTime);
        // 如果前端传了时间,就用前端日期 + reportTime
        if (selectDate != null && selectDate.size() == 2) {
            if (selectDate.get(0) != null && !selectDate.get(0).isEmpty()) {
                startDate = toReportTime(selectDate.get(0), reportTime);
            }
            if (selectDate.get(1) != null && !selectDate.get(1).isEmpty()) {
                endDate = toReportTime(selectDate.get(1), reportTime);
            }
        }
        Map<String, Object> map = new HashMap<>();
        map.put("data", finishedOperateLogMapper.getSelectFinishedOperateLogReport(offset, pageSize,startDate, endDate, finishedOperateLog,type,"datetime"));
        map.put("total", finishedOperateLogMapper.getSelectFinishedOperateLogReportPageTotal(offset, pageSize,startDate, endDate, finishedOperateLog,type,"datetime"));
        List<String> list = new ArrayList<>();
        list.add(startDate);
        list.add(endDate);
        map.put("selectDate",list);
        return map;
    }
    private static final DateTimeFormatter DATE_TIME_FMT =
            DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    private String toReportTime(String dateStr, String reportTime) {
        if (dateStr == null || dateStr.isEmpty()) {
            return null;
        }
        // 只保留 yyyy-MM-dd,防止前端传完整时间导致 parse 异常
        String onlyDate = dateStr.length() > 10 ? dateStr.substring(0, 10) : dateStr;
        String[] parts = reportTime.split(":");
        int hour   = Integer.parseInt(parts[0]);
        int minute = parts.length > 1 ? Integer.parseInt(parts[1]) : 0;
        int second = parts.length > 2 ? Integer.parseInt(parts[2]) : 0;
        LocalDate date = LocalDate.parse(onlyDate);
        LocalTime time = LocalTime.of(hour, minute, second);
        return LocalDateTime.of(date, time).format(DATE_TIME_FMT);
    }
    public List<FinishedOperateLogDTO>  exportFinishedOperateLogReportByDatetime(List<String> dates, String type) {
        return finishedOperateLogMapper.exportFinishedOperateLogReportByDatetime(dates,type);
    }
}
north-glass-erp/src/main/resources/mapper/mm/FinishedOperateLog.xml
@@ -518,7 +518,14 @@
        left join sd.`order` o on o.order_id=fol.order_id
        left join sd.product p on p.id=od.product_id
        <where>
            date(fol.operate_time)>=#{startDate} and date(fol.operate_time) &lt;= #{endDate} and fol.operate_type=#{type}
            <if test="dateType=='date'">
                date(fol.operate_time)>=#{startDate} and date(fol.operate_time) &lt;= #{endDate}
            </if>
            <if test="dateType=='datetime'">
                fol.operate_time>=#{startDate} and fol.operate_time &lt;= #{endDate}
            </if>
            and fol.operate_type=#{type}
            <if test="finishedOperateLog.operateType != null and finishedOperateLog.operateType != ''">
                and fol.operate_type regexp #{finishedOperateLog.operateType}
            </if>
@@ -599,7 +606,15 @@
        left join sd.`order` o on o.order_id=fol.order_id
        left join sd.product p on p.id=od.product_id
        <where>
            date(fol.operate_time)>=#{startDate} and date(fol.operate_time) &lt;= #{endDate} and fol.operate_type=#{type}
            <if test="dateType=='date'">
                date(fol.operate_time)>=#{startDate} and date(fol.operate_time) &lt;= #{endDate}
            </if>
            <if test="dateType=='datetime'">
                fol.operate_time>=#{startDate} and fol.operate_time &lt;= #{endDate}
            </if>
            and fol.operate_type=#{type}
            <if test="finishedOperateLog.operateType != null and finishedOperateLog.operateType != ''">
                and fol.operate_type regexp #{finishedOperateLog.operateType}
            </if>
@@ -817,7 +832,51 @@
                 left join sd.order_detail od on fol.order_id = od.order_id and fol.operation_number = od.order_number
                 left join sd.`order` o on o.order_id=fol.order_id
                 left join sd.product p on p.id=od.product_id
        where  date(fol.operate_time)>=#{dates[0]} and date(fol.operate_time) &lt;= #{dates[1]} and fol.operate_type=#{type}
        where
                date(fol.operate_time)>=#{dates[0]} and date(fol.operate_time) &lt;= #{dates[1]}
          and fol.operate_type=#{type}
    </select>
    <select id="exportFinishedOperateLogReportByDatetime">
        select fol.id,
               fol.operation_order_number,
               fol.order_id,
               fol.operate_type,
               fol.process_id,
               fol.operation_number,
               fol.quantity,
               fol.operator,
               od.product_id,
               od.product_name,
               od.width,
               od.height,
               fol.stater_operation_order_number,
               fol.end_operation_order_number,
               fol.operate_time,
               fol.`status`,
               fol.is_state,
               fol.reviewed,
               fol.reviewed_time,
               fol.type,
               fol.remarks,
               fol.area,
               fol.money,
               o.customer_name,
               o.project,
               od.price,
               o.order_type,
               p.thickness * fol.area as square_millimeter
        from (select *
              from mm.finished_operate_log aa where  aa.status!='已作废') fol
                 left join sd.order_detail od on fol.order_id = od.order_id and fol.operation_number = od.order_number
                 left join sd.`order` o on o.order_id=fol.order_id
                 left join sd.product p on p.id=od.product_id
        where
            fol.operate_time>=#{dates[0]} and fol.operate_time &lt;= #{dates[1]}
          and fol.operate_type=#{type}
    </select>
north-glass-erp/src/main/resources/mapper/pp/Report.xml
@@ -3460,8 +3460,13 @@
                 SELECT g.*
                      ,GROUP_CONCAT(g.glass_child SEPARATOR '+')  as childName
                 from( SELECT f.*,
        e.reporting_work_num_count+f.patchNumSum-f.reporting_work_num_count-f.broken_num as quantity,
        (e.reporting_work_num_count+f.patchNumSum-f.reporting_work_num_count-f.broken_num)*f.area as glassArea
        if((e.reporting_work_num_count+f.patchNumSum-f.reporting_work_num_count-f.broken_num-f.termination_quantity)>0,
        (e.reporting_work_num_count+f.patchNumSum-f.reporting_work_num_count-f.broken_num-f.termination_quantity),
            0
            ) as quantity,
        if((e.reporting_work_num_count+f.patchNumSum-f.reporting_work_num_count-f.broken_num-f.termination_quantity)>0,
        (e.reporting_work_num_count+f.patchNumSum-f.reporting_work_num_count-f.broken_num-f.termination_quantity)  ,
            0)*f.area as glassArea
                       from (SELECT a.order_id,
                                   if(a.batch!="",CONCAT(a.project,'(',a.batch,')'),a.project) as project,
                                    C.product_id,
@@ -3474,7 +3479,8 @@
                                    b.id,
                                    c.area,
                                    d.glass_child,
                                    ifnull(cb.patchNumSum,0) as patchNumSum
                                    ifnull(cb.patchNumSum,0) as patchNumSum,
                                    fc.termination_quantity
                             FROM sd.`order` as a
                                      LEFT JOIN sd.order_process_detail as b
@@ -3536,6 +3542,7 @@
             ) as h
        where h.quantity >0
        <choose>
            <when test="optionVal == 1">
                GROUP BY thisProcess
north-glass-erp/src/main/resources/mapper/sd/BasicGlassTypeMapper.xml
@@ -91,7 +91,7 @@
            process_attribute_config as a
        set a.process_type = #{processAttributeConfig.processType},
            a.process_name = #{processAttributeConfig.processName},
            a.input_type = #{processAttributeConfig.inputType},
            a.input_type = #{processAttributeConfig.inputType}
        where a.id = #{processAttributeConfig.id}
    </update>