schangxiang@126.com
2025-05-20 3a61cb05bd4339b89127b15c489ae76370905404
优化
已添加19个文件
已修改4个文件
4897 ■■■■■ 文件已修改
CommonDLL/公共前端组件/src/utils/myformUtils.ts 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/pipelinelems_web/src/utils/myformUtils.ts 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/pipelinelems_web/src/widgets/WorkTask/Controllers/WorkTaskDrawer.tsx 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/pipelinelems_web/src/widgets/WorkTask/Controllers/WorkTaskQueryDrawer.tsx 69 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkTask/GetWorkTaskInput.cs 578 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkTask/WorkTaskCreateDto.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkTask/WorkTaskCreateOrUpdateDtoBase.cs 260 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkTask/WorkTaskDto.cs 331 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkTask/WorkTaskExportModel.cs 277 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkTask/WorkTaskUpdateDto.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkTask/WorkTasksImportModel.cs 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Services/IWorkTaskAppService.cs 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/WorkTaskAppService.cs 623 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/MapperProfiles/WorkTaskAutoMapperProfile.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain/WorkTask/IWorkTaskRepository.cs 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain/WorkTask/WorkTask.cs 264 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WorkTask.cs 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.EntityFrameworkCore/Repositories/EfCoreWorkTaskRepository.cs 218 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.MySQL/Migrations/20250520032108_Update2.Designer.cs 978 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.MySQL/Migrations/20250520032108_Update2.cs 427 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/WorkTaskController.cs 240 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Resources/Templates/WorkTask导出模板.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/Code/Templete/Web/Controllers/EntityModeDrawer模板.txt 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CommonDLL/¹«¹²Ç°¶Ë×é¼þ/src/utils/myformUtils.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,102 @@
//表单工具文件
/**
 * é€šç”¨é«˜çº§æŸ¥è¯¢è¡¨å•数据收集函数
 * @param {Array} formItems - è¡¨å•配置项数组
 * @param {Object} formData - è¡¨å•数据对象
 * @returns {Object} - æ”¶é›†çš„表单数据
 */
export const collectFormDataForHighQuery = (formItems, formData) => {
     const data = {};
  // éåŽ†è¡¨å•é…ç½®æ”¶é›†æ•°æ®
  formItems.forEach(item => {
    // æ”¶é›†åŸºç¡€å­—段
    data[item.prop] = formData.value[item.prop] || '';
    // æ”¶é›†è¿‡æ»¤æ¨¡å¼å­—段
    if (item.highSelectAttrs && item.highSelectAttrs.prop) {
      const filterModeProp = item.highSelectAttrs.prop;
      data[filterModeProp] = formData.value[filterModeProp] || '';
    }
  });
  return data;
  }
 /**
 * é‡ç½®é«˜çº§æŸ¥è¯¢çš„过滤模式
 * @param formItems - è¡¨å•配置项数组
 * @param formData - è¡¨å•数据对象
 */
 export const onResetForHighSelect = (formItems, formData) => {
    // éåŽ†æ‰€æœ‰è¡¨å•å­—æ®µ
    formItems.forEach(item => {
      // æ£€æŸ¥å­—段是否有高级查询的过滤模式配置
      if (item.highSelectAttrs && item.highSelectAttrs.prop) {
        const filterModeProp = item.highSelectAttrs.prop;
        const options = item.highSelectAttrs.options || [];
        // å¦‚果存在选项,则设置为第一个选项的值
        if (options.length > 0) {
          // å‡è®¾é€‰é¡¹æ ¼å¼ä¸º { value, label } æˆ–类似结构
          const firstValue = options[0].value !== undefined ? options[0].value : options[0];
          formData.value[filterModeProp] = firstValue;
        }
      }
    });
}
/**
 * é‡ç½®é«˜çº§æŸ¥è¯¢
 * @param formItems - è¡¨å•配置项数组
 * @param formData - è¡¨å•数据对象
 */
export const onResetForHighQuery = (formItems, formData) => {
    // 1. æ¸…空所有基础字段(不包含过滤模式字段)
    const baseFields = formItems.reduce((acc, item) => {
        acc[item.prop] = '';
        return acc;
        }, {});
        // 2. åº”用基础字段初始值
        formData.value = { ...baseFields };
}
/**
 * ä»Žè¡¨å•数据中提取有效属性(排除无效字段),提交保存表单数据时用
 * @param formData è¡¨å•数据对象
 * @param excludeFields éœ€è¦æŽ’除的字段列表(默认为 ['id'])
 * @returns å¤„理后的有效数据对象
 */
export const extractFormDataForOnConfirm = (formData) => {
   //动态获取 formData çš„æ‰€æœ‰å±žæ€§å€¼ï¼ˆæŽ’除无效属性,如 id)
  const data = Object.entries(formData.value).reduce((acc, [key, value]) => {
    // è¿‡æ»¤æŽ‰ä¸éœ€è¦æäº¤çš„属性(如 id,可根据实际需求调整)
    if (key !== 'id') {
      acc[key] = value
    }
    return acc
  }, {} as Record<string, any>)
  return data;
  };
  /**
 * ä»Žå“åº”数据中提取有效字段并赋值给表单数据,打开表单数据时用
 * @param res å“åº”数据
 * @param formData è¡¨å•数据引用
 * @param options é…ç½®é€‰é¡¹
 * @returns å¤„理后的表单数据
 */
export function extractAndAssignFormData(res,formData) {
     // æå–有效字段(排除不需要的属性,如临时字段、非表单字段)
     const { id, ...validFormData } = res; // ä¿ç•™ id å¯æ ¹æ®éœ€æ±‚调整
     // ç›´æŽ¥èµ‹å€¼ï¼ˆè‡ªåŠ¨è¿‡æ»¤æ— æ•ˆå±žæ€§ï¼‰
     formData.value = {
       ...validFormData, // è‡ªåŠ¨ç»§æ‰¿æ‰€æœ‰æœ‰æ•ˆå­—æ®µ
       // å¦‚需额外处理特定字段(如日期格式化),可在此补充
       // plannedStartTime: formatDate(res.plannedStartTime),
     };
  }
PipeLineLems/pipelinelems_web/src/utils/myformUtils.ts
@@ -61,4 +61,42 @@
   
        // 2. åº”用基础字段初始值 
        formData.value = { ...baseFields }; 
}
}
/**
 * ä»Žè¡¨å•数据中提取有效属性(排除无效字段),提交保存表单数据时用
 * @param formData è¡¨å•数据对象
 * @param excludeFields éœ€è¦æŽ’除的字段列表(默认为 ['id'])
 * @returns å¤„理后的有效数据对象
 */
export const extractFormDataForOnConfirm = (formData) => {
   //动态获取 formData çš„æ‰€æœ‰å±žæ€§å€¼ï¼ˆæŽ’除无效属性,如 id)
  const data = Object.entries(formData.value).reduce((acc, [key, value]) => {
    // è¿‡æ»¤æŽ‰ä¸éœ€è¦æäº¤çš„属性(如 id,可根据实际需求调整)
    if (key !== 'id') {
      acc[key] = value
    }
    return acc
  }, {} as Record<string, any>)
  return data;
  };
  /**
 * ä»Žå“åº”数据中提取有效字段并赋值给表单数据,打开表单数据时用
 * @param res å“åº”数据
 * @param formData è¡¨å•数据引用
 * @param options é…ç½®é€‰é¡¹
 * @returns å¤„理后的表单数据
 */
export function extractAndAssignFormData(res,formData) {
     // æå–有效字段(排除不需要的属性,如临时字段、非表单字段)
     const { id, ...validFormData } = res; // ä¿ç•™ id å¯æ ¹æ®éœ€æ±‚调整
     // ç›´æŽ¥èµ‹å€¼ï¼ˆè‡ªåŠ¨è¿‡æ»¤æ— æ•ˆå±žæ€§ï¼‰
     formData.value = {
       ...validFormData, // è‡ªåŠ¨ç»§æ‰¿æ‰€æœ‰æœ‰æ•ˆå­—æ®µ
       // å¦‚需额外处理特定字段(如日期格式化),可在此补充
       // plannedStartTime: formatDate(res.plannedStartTime),
     };
  }
PipeLineLems/pipelinelems_web/src/widgets/WorkTask/Controllers/WorkTaskDrawer.tsx
@@ -18,7 +18,8 @@
import {   
  BOOLEAN_OPTIONS_AddEdit  
} from '@/utils/commonOptionConstants';  
// å¼•入公共表单工具文件
import { extractFormDataForOnConfirm,extractAndAssignFormData } from '@/utils/myformUtils';
export const useWorkTaskDrawer = (props: any, ctx?: any) => { 
  const workTaskDrawer = injectModel<WorkTaskDrawer>('workTaskDrawer') 
  /** 
@@ -502,46 +503,7 @@
   */ 
  const onConfirm = async () => { 
    await formRef.value?.validate() 
    const data = {
      son_TaskCode: formData.value.son_TaskCode,
taskCode: formData.value.taskCode,
workPlanStatus: formData.value.workPlanStatus,
callMaterialStatus: formData.value.callMaterialStatus,
dataIdentifier: formData.value.dataIdentifier,
materialMode: formData.value.materialMode,
length: formData.value.length,
markingContent: formData.value.markingContent,
markingPosition: formData.value.markingPosition,
cuttingPosition: formData.value.cuttingPosition,
quantity: formData.value.quantity,
flangeThickness: formData.value.flangeThickness,
flangeInnerDiameter: formData.value.flangeInnerDiameter,
weldingHeatInput: formData.value.weldingHeatInput,
pipeAllowableStress: formData.value.pipeAllowableStress,
pipeDiameter: formData.value.pipeDiameter,
pipeWallThickness: formData.value.pipeWallThickness,
factoryCode: formData.value.factoryCode,
productCode: formData.value.productCode,
workstationCode: formData.value.workstationCode,
equipmentCode: formData.value.equipmentCode,
prodLineCode: formData.value.prodLineCode,
shipNumber: formData.value.shipNumber,
projectNumber: formData.value.projectNumber,
processName: formData.value.processName,
pipeFittingCode: formData.value.pipeFittingCode,
preSerialNumber: formData.value.preSerialNumber,
pipeSpecCode: formData.value.pipeSpecCode,
pipeSectionName: formData.value.pipeSectionName,
outerDiameter: formData.value.outerDiameter,
thickness: formData.value.thickness,
material: formData.value.material,
processRouteNumber: formData.value.processRouteNumber,
plannedStartTime: formData.value.plannedStartTime,
plannedEndTime: formData.value.plannedEndTime,
teamInfo: formData.value.teamInfo,
timestamp: formData.value.timestamp,
remark: formData.value.remark,
    }
    const data=extractFormDataForOnConfirm(formData);
    if (!current.value) { 
      await workTaskDrawer.addWorkTask(data) 
    } else { 
@@ -590,47 +552,7 @@
    if (current.value) { 
      const res = await workTaskDrawer.getWorkTaskDetail(current.value) 
 
      formData.value = {
        son_TaskCode: res.son_TaskCode,
taskCode: res.taskCode,
workPlanStatus: res.workPlanStatus,
callMaterialStatus: res.callMaterialStatus,
dataIdentifier: res.dataIdentifier,
materialMode: res.materialMode,
length: res.length,
markingContent: res.markingContent,
markingPosition: res.markingPosition,
cuttingPosition: res.cuttingPosition,
quantity: res.quantity,
flangeThickness: res.flangeThickness,
flangeInnerDiameter: res.flangeInnerDiameter,
weldingHeatInput: res.weldingHeatInput,
pipeAllowableStress: res.pipeAllowableStress,
pipeDiameter: res.pipeDiameter,
pipeWallThickness: res.pipeWallThickness,
factoryCode: res.factoryCode,
productCode: res.productCode,
workstationCode: res.workstationCode,
equipmentCode: res.equipmentCode,
prodLineCode: res.prodLineCode,
shipNumber: res.shipNumber,
projectNumber: res.projectNumber,
processName: res.processName,
pipeFittingCode: res.pipeFittingCode,
preSerialNumber: res.preSerialNumber,
pipeSpecCode: res.pipeSpecCode,
pipeSectionName: res.pipeSectionName,
outerDiameter: res.outerDiameter,
thickness: res.thickness,
material: res.material,
processRouteNumber: res.processRouteNumber,
plannedStartTime: res.plannedStartTime,
plannedEndTime: res.plannedEndTime,
teamInfo: res.teamInfo,
timestamp: res.timestamp,
remark: res.remark,
        id: res.id,
      }
      extractAndAssignFormData(res,formData);
      disabled.value = true 
      updateCheckData() 
    } else { 
PipeLineLems/pipelinelems_web/src/widgets/WorkTask/Controllers/WorkTaskQueryDrawer.tsx
@@ -20,8 +20,8 @@
  FILTER_MODE_OPTIONS_NUM, 
  FILTER_MODE_OPTIONS_BOOL 
} from '@/components/DyFormForHighQuery/DyFormForHighQueryOptions'; 
// å¼•入公共表单工具文件
import { collectFormDataForHighQuery,onResetForHighSelect,onResetForHighQuery } from '@/utils/myformUtils';
// å¼•入公共表单工具文件
import { collectFormDataForHighQuery,onResetForHighSelect,onResetForHighQuery } from '@/utils/myformUtils';
import {  
  BOOLEAN_OPTIONS 
} from '@/utils/commonOptionConstants'; 
@@ -748,30 +748,11 @@
    const check = isEqual(initiateData.value, data) 
    return check 
  } 
//   /**
//  * èŽ·å–è¡¨å•æ•°æ® - ä¼˜åŒ–版
//  */
// const commonGetFormData = () => {
//   const data = {};
//   // éåŽ†è¡¨å•é…ç½®æ”¶é›†æ•°æ®
//   formItems.forEach(item => {
//     // æ”¶é›†åŸºç¡€å­—段
//     data[item.prop] = formData.value[item.prop] || '';
//     // æ”¶é›†è¿‡æ»¤æ¨¡å¼å­—段
//     if (item.highSelectAttrs && item.highSelectAttrs.prop) {
//       const filterModeProp = item.highSelectAttrs.prop;
//       data[filterModeProp] = formData.value[filterModeProp] || '';
//     }
//   });
//   return data;
// }
  const onClose = (done: () => void) => { 
    if (visible.value) { 
      visible.value = false 
      const data =collectFormDataForHighQuery(formItems,formData);
      const data =collectFormDataForHighQuery(formItems,formData);
      ctx.emit('close', data) 
    } 
  } 
@@ -779,48 +760,20 @@
   * ç¡®è®¤æŸ¥è¯¢ 
   */ 
  const onConfirmQuery = async () => { 
    const data =collectFormDataForHighQuery(formItems,formData);
    const data =collectFormDataForHighQuery(formItems,formData);
    ctx.emit('confirmQuery', data) 
  } 
  // /**
  //  * é‡ç½®å…¬å…±select查询
  //  */
  // const onResetForHighSelect = () => {
  //     // éåŽ†æ‰€æœ‰è¡¨å•å­—æ®µ
  //     formItems.forEach(item => {
  //       // æ£€æŸ¥å­—段是否有高级查询的过滤模式配置
  //       if (item.highSelectAttrs && item.highSelectAttrs.prop) {
  //         const filterModeProp = item.highSelectAttrs.prop;
  //         const options = item.highSelectAttrs.options || [];
  //         // å¦‚果存在选项,则设置为第一个选项的值
  //         if (options.length > 0) {
  //           // å‡è®¾é€‰é¡¹æ ¼å¼ä¸º { value, label } æˆ–类似结构
  //           const firstValue = options[0].value !== undefined ? options[0].value : options[0];
  //           formData.value[filterModeProp] = firstValue;
  //         }
  //       }
  //     });
  // }
    /** 
    * é‡ç½®æŸ¥è¯¢ - ä¼˜åŒ–版 
    */ 
    const onReset = async () => { 
        // // 1. æ¸…空所有基础字段(不包含过滤模式字段)
        // const baseFields = formItems.reduce((acc, item) => {
        // acc[item.prop] = '';
        // return acc;
        // }, {});
        // 1. æ¸…空所有基础字段(不包含过滤模式字段),应用基础字段初始值
        onResetForHighQuery(formItems,formData);
   
        // // 2. åº”用基础字段初始值
        // formData.value = { ...baseFields };
        onResetForHighQuery(formItems,formData);
        // 2. ä½¿ç”¨åŽŸæœ‰æ–¹æ³•é‡ç½®è¿‡æ»¤æ¨¡å¼å­—æ®µ
        onResetForHighSelect(formItems,formData);
   
        // 3. ä½¿ç”¨åŽŸæœ‰æ–¹æ³•é‡ç½®è¿‡æ»¤æ¨¡å¼å­—æ®µ
        onResetForHighSelect(formItems,formData); // ä¿ç•™åŽŸæœ‰æ–¹æ³•è°ƒç”¨
        // 4. å‘父组件发送自定义事件
        // 3. å‘父组件发送自定义事件
        ctx.emit('restQuery'); 
    } 
 
@@ -855,7 +808,7 @@
 
  } 
  commonQueryEnumForFrom() 
  onResetForHighSelect(formItems,formData);//重置公共select查询
  onResetForHighSelect(formItems,formData);//重置公共select查询
  /** 
   * å¼¹çª—打开获取详情 
   */ 
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkTask/GetWorkTaskInput.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,578 @@
using CMS.Plugin.PipeLineLems.Domain.Shared.Enums;
using CmsQueryExtensions.Extension;
using Volo.Abp.Application.Dtos;
namespace CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.WorkTask;
/// <summary>
/// ä½œä¸šä»»åŠ¡è¡¨æŸ¥è¯¢å‚æ•°
/// </summary>
public class GetWorkTaskInput : ExtensiblePagedAndSortedResultRequestDto
{
    #region å…³é”®å­—查询
    /// <summary>
    /// å…³é”®å­—模糊查询(注意是小写!)
    /// </summary>
    public string searchVal { get; set; }
    /// <summary>
    /// é€šç”¨æŸ¥è¯¢é…ç½® (1:模糊查询 , 2:精准查询)(注意是小写!)
    /// </summary>
    public SearchFilterModeEnum searchVal_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    /// å­æœç´¢ç»„件传递的通用查询配置的属性名(注意是小写!)
    /// </summary>
    [NoAutoQuery]
    public string str_searchFormInputAttrs { get; set; }
    /// <summary>
    /// å­æœç´¢ç»„件传递的通用查询配置的属性名(注意是小写!)
    /// </summary>
    public List<string> searchFormInputAttrs
    {
        get
        {
            if (!string.IsNullOrEmpty(str_searchFormInputAttrs))
            {
                return str_searchFormInputAttrs.Split(',').ToList();
            }
            return new List<string>();
        }
    }
    #endregion
            /// <summary>
        /// å­ä»»åŠ¡ç¼–ç 
        /// </summary>
        public string Son_TaskCode { get; set; }
        /// <summary>
        /// å­ä»»åŠ¡ç¼–ç -查询关系运算符
        /// </summary>
        public SearchFilterModeEnum Son_TaskCode_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// ä»»åŠ¡ç¼–ç 
        /// </summary>
        public string TaskCode { get; set; }
        /// <summary>
        /// ä»»åŠ¡ç¼–ç -查询关系运算符
        /// </summary>
        public SearchFilterModeEnum TaskCode_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// è®¡åˆ’状态
        /// </summary>
        public WorkPlanStatusEnum?  WorkPlanStatus { get; set; }
        /// <summary>
        /// è®¡åˆ’状态-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum WorkPlanStatus_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// å«æ–™çŠ¶æ€
        /// </summary>
        public CallMaterialStatusEnum?  CallMaterialStatus { get; set; }
        /// <summary>
        /// å«æ–™çŠ¶æ€-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum CallMaterialStatus_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// åŽŸæ–™æ ‡è¯†
        /// </summary>
        public string DataIdentifier { get; set; }
        /// <summary>
        /// åŽŸæ–™æ ‡è¯†-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum DataIdentifier_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// åŽŸæ–™åž‹å·
        /// </summary>
        public string MaterialMode { get; set; }
        /// <summary>
        /// åŽŸæ–™åž‹å·-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum MaterialMode_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// é•¿åº¦(mm)
        /// </summary>
        public decimal?  Length { get; set; }
        /// <summary>
        /// é•¿åº¦(mm)-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum Length_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// æ‰“码内容
        /// </summary>
        public string MarkingContent { get; set; }
        /// <summary>
        /// æ‰“码内容-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum MarkingContent_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// æ‰“码位置
        /// </summary>
        public decimal?  MarkingPosition { get; set; }
        /// <summary>
        /// æ‰“码位置-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum MarkingPosition_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// åˆ‡å‰²ä½ç½®
        /// </summary>
        public decimal?  CuttingPosition { get; set; }
        /// <summary>
        /// åˆ‡å‰²ä½ç½®-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum CuttingPosition_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// ç®¡æ®µæ•°é‡
        /// </summary>
        public int?  Quantity { get; set; }
        /// <summary>
        /// ç®¡æ®µæ•°é‡-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum Quantity_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// æ³•兰厚度(mm)
        /// </summary>
        public decimal?  FlangeThickness { get; set; }
        /// <summary>
        /// æ³•兰厚度(mm)-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum FlangeThickness_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// æ³•兰直径(mm)
        /// </summary>
        public decimal?  FlangeInnerDiameter { get; set; }
        /// <summary>
        /// æ³•兰直径(mm)-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum FlangeInnerDiameter_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// æ³•兰公称压力
        /// </summary>
        public string WeldingHeatInput { get; set; }
        /// <summary>
        /// æ³•兰公称压力-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum WeldingHeatInput_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// æ³•兰冲码内容
        /// </summary>
        public string PipeAllowableStress { get; set; }
        /// <summary>
        /// æ³•兰冲码内容-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum PipeAllowableStress_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// å¥—管长度(mm)
        /// </summary>
        public decimal?  PipeDiameter { get; set; }
        /// <summary>
        /// å¥—管长度(mm)-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum PipeDiameter_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// å¥—管直径(mm)
        /// </summary>
        public decimal?  PipeWallThickness { get; set; }
        /// <summary>
        /// å¥—管直径(mm)-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum PipeWallThickness_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// å·¥åŽ‚ä»£ç 
        /// </summary>
        public string FactoryCode { get; set; }
        /// <summary>
        /// å·¥åŽ‚ä»£ç -查询关系运算符
        /// </summary>
        public SearchFilterModeEnum FactoryCode_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// äº§å“ä»£ç 
        /// </summary>
        public string ProductCode { get; set; }
        /// <summary>
        /// äº§å“ä»£ç -查询关系运算符
        /// </summary>
        public SearchFilterModeEnum ProductCode_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// å·¥ä½ä»£ç 
        /// </summary>
        public string WorkstationCode { get; set; }
        /// <summary>
        /// å·¥ä½ä»£ç -查询关系运算符
        /// </summary>
        public SearchFilterModeEnum WorkstationCode_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// è®¾å¤‡ä»£ç 
        /// </summary>
        public string EquipmentCode { get; set; }
        /// <summary>
        /// è®¾å¤‡ä»£ç -查询关系运算符
        /// </summary>
        public SearchFilterModeEnum EquipmentCode_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// äº§çº¿ç¼–码
        /// </summary>
        public string ProdLineCode { get; set; }
        /// <summary>
        /// äº§çº¿ç¼–码-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum ProdLineCode_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// èˆ¹å·
        /// </summary>
        public string ShipNumber { get; set; }
        /// <summary>
        /// èˆ¹å·-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum ShipNumber_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// é¡¹ç›®å·
        /// </summary>
        public string ProjectNumber { get; set; }
        /// <summary>
        /// é¡¹ç›®å·-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum ProjectNumber_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// å·¥åºåç§°
        /// </summary>
        public string ProcessName { get; set; }
        /// <summary>
        /// å·¥åºåç§°-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum ProcessName_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// ç®¡ä»¶ç¼–码
        /// </summary>
        public string PipeFittingCode { get; set; }
        /// <summary>
        /// ç®¡ä»¶ç¼–码-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum PipeFittingCode_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// é¡ºåºå·
        /// </summary>
        public string PreSerialNumber { get; set; }
        /// <summary>
        /// é¡ºåºå·-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum PreSerialNumber_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// ç®¡æ®µç¼–码
        /// </summary>
        public string PipeSpecCode { get; set; }
        /// <summary>
        /// ç®¡æ®µç¼–码-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum PipeSpecCode_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// ç®¡æ®µåç§°
        /// </summary>
        public string PipeSectionName { get; set; }
        /// <summary>
        /// ç®¡æ®µåç§°-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum PipeSectionName_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// å¤–径(mm)
        /// </summary>
        public decimal?  OuterDiameter { get; set; }
        /// <summary>
        /// å¤–径(mm)-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum OuterDiameter_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// å£åŽš(mm)
        /// </summary>
        public decimal?  Thickness { get; set; }
        /// <summary>
        /// å£åŽš(mm)-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum Thickness_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// æè´¨
        /// </summary>
        public string Material { get; set; }
        /// <summary>
        /// æè´¨-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum Material_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// å·¥è‰ºæµå‘编号
        /// </summary>
        public string ProcessRouteNumber { get; set; }
        /// <summary>
        /// å·¥è‰ºæµå‘编号-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum ProcessRouteNumber_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// è®¡åˆ’开始时间
        /// </summary>
        //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
        [HighSearchRangeAttribute]
        public string PlannedStartTime { get; set; }
        /// <summary>
        /// è®¡åˆ’完成时间
        /// </summary>
        //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
        [HighSearchRangeAttribute]
        public string PlannedEndTime { get; set; }
        /// <summary>
        /// ç­ç»„信息
        /// </summary>
        public string TeamInfo { get; set; }
        /// <summary>
        /// ç­ç»„信息-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum TeamInfo_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// æ—¶é—´æˆ³
        /// </summary>
        public string Timestamp { get; set; }
        /// <summary>
        /// æ—¶é—´æˆ³-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum Timestamp_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// åˆ›å»ºæ—¶é—´
        /// </summary>
        //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
        [HighSearchRangeAttribute]
        public string CreationTime { get; set; }
        /// <summary>
        /// åˆ›å»ºäººID
        /// </summary>
        public string CreatorId { get; set; }
        /// <summary>
        /// åˆ›å»ºäººID-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum CreatorId_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// ä¿®æ”¹æ—¶é—´
        /// </summary>
        //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
        [HighSearchRangeAttribute]
        public string LastModificationTime { get; set; }
        /// <summary>
        /// ä¿®æ”¹äººID
        /// </summary>
        public string LastModifierId { get; set; }
        /// <summary>
        /// ä¿®æ”¹äººID-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum LastModifierId_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// æ˜¯å¦åˆ é™¤
        /// </summary>
        public bool?  IsDeleted { get; set; }
        /// <summary>
        /// æ˜¯å¦åˆ é™¤-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum IsDeleted_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// åˆ é™¤äººID
        /// </summary>
        public string DeleterId { get; set; }
        /// <summary>
        /// åˆ é™¤äººID-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum DeleterId_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// åˆ é™¤æ—¶é—´
        /// </summary>
        //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
        [HighSearchRangeAttribute]
        public string DeletionTime { get; set; }
        /// <summary>
        /// åˆ›å»ºäºº
        /// </summary>
        public string CreatorName { get; set; }
        /// <summary>
        /// åˆ›å»ºäºº-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum CreatorName_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// ä¿®æ”¹äºº
        /// </summary>
        public string LastModifierName { get; set; }
        /// <summary>
        /// ä¿®æ”¹äºº-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum LastModifierName_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// æ“ä½œå¤‡æ³¨
        /// </summary>
        public string OperationRemark { get; set; }
        /// <summary>
        /// æ“ä½œå¤‡æ³¨-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum OperationRemark_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// åˆ é™¤å¤‡æ³¨
        /// </summary>
        public string DeleteRemark { get; set; }
        /// <summary>
        /// åˆ é™¤å¤‡æ³¨-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum DeleteRemark_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// æŽ’序
        /// </summary>
        public int?  Sort { get; set; }
        /// <summary>
        /// æŽ’序-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum Sort_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        public string Remark { get; set; }
        /// <summary>
        /// å¤‡æ³¨-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum Remark_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public bool?  IsDisabled { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum IsDisabled_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// æ‰©å±•字段1
        /// </summary>
        public string ExtraField1 { get; set; }
        /// <summary>
        /// æ‰©å±•字段1-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum ExtraField1_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// æ‰©å±•字段2
        /// </summary>
        public string ExtraField2 { get; set; }
        /// <summary>
        /// æ‰©å±•字段2-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum ExtraField2_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// æ‰©å±•字段3
        /// </summary>
        public string ExtraField3 { get; set; }
        /// <summary>
        /// æ‰©å±•字段3-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum ExtraField3_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
}
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkTask/WorkTaskCreateDto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
namespace CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.WorkTask;
/// <summary>
/// ä½œä¸šä»»åŠ¡è¡¨åˆ›å»ºå‚æ•°å¯¹è±¡
/// </summary>
public class WorkTaskCreateDto : WorkTaskCreateOrUpdateDtoBase
{
    /// <summary>
    /// æŽ’序
    /// </summary>
    public virtual int? Sort { get; set; }
    /// <summary>
    /// æ˜¯å¦ç¦ç”¨
    /// </summary>
    public bool? IsDisabled { get; set; } = false;
    /// <summary>
    /// åˆ›å»ºäºº
    /// </summary>
    public string CreatorName { get; set; }
}
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkTask/WorkTaskCreateOrUpdateDtoBase.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,260 @@
using CMS.Plugin.PipeLineLems.Domain.Shared.Enums;
using System;
using Volo.Abp.Application.Dtos;
namespace CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.WorkTask;
/// <summary>
/// ä½œä¸šä»»åŠ¡è¡¨åˆ›å»ºæˆ–æ›´æ–°åŸºç±»
/// </summary>
public abstract class WorkTaskCreateOrUpdateDtoBase : ExtensibleEntityDto
{
            /// <summary>
        /// å­ä»»åŠ¡ç¼–ç 
        /// </summary>
        public string Son_TaskCode { get; set; }
        /// <summary>
        /// ä»»åŠ¡ç¼–ç 
        /// </summary>
        public string TaskCode { get; set; }
        /// <summary>
        /// è®¡åˆ’状态
        /// </summary>
        public WorkPlanStatusEnum WorkPlanStatus { get; set; }
        /// <summary>
        /// å«æ–™çŠ¶æ€
        /// </summary>
        public CallMaterialStatusEnum CallMaterialStatus { get; set; }
        /// <summary>
        /// åŽŸæ–™æ ‡è¯†
        /// </summary>
        public string? DataIdentifier { get; set; }
        /// <summary>
        /// åŽŸæ–™åž‹å·
        /// </summary>
        public string? MaterialMode { get; set; }
        /// <summary>
        /// é•¿åº¦(mm)
        /// </summary>
        public decimal Length { get; set; }
        /// <summary>
        /// æ‰“码内容
        /// </summary>
        public string? MarkingContent { get; set; }
        /// <summary>
        /// æ‰“码位置
        /// </summary>
        public decimal MarkingPosition { get; set; }
        /// <summary>
        /// åˆ‡å‰²ä½ç½®
        /// </summary>
        public decimal CuttingPosition { get; set; }
        /// <summary>
        /// ç®¡æ®µæ•°é‡
        /// </summary>
        public int Quantity { get; set; }
        /// <summary>
        /// æ³•兰厚度(mm)
        /// </summary>
        public decimal FlangeThickness { get; set; }
        /// <summary>
        /// æ³•兰直径(mm)
        /// </summary>
        public decimal FlangeInnerDiameter { get; set; }
        /// <summary>
        /// æ³•兰公称压力
        /// </summary>
        public string? WeldingHeatInput { get; set; }
        /// <summary>
        /// æ³•兰冲码内容
        /// </summary>
        public string? PipeAllowableStress { get; set; }
        /// <summary>
        /// å¥—管长度(mm)
        /// </summary>
        public decimal PipeDiameter { get; set; }
        /// <summary>
        /// å¥—管直径(mm)
        /// </summary>
        public decimal PipeWallThickness { get; set; }
        /// <summary>
        /// å·¥åŽ‚ä»£ç 
        /// </summary>
        public string? FactoryCode { get; set; }
        /// <summary>
        /// äº§å“ä»£ç 
        /// </summary>
        public string? ProductCode { get; set; }
        /// <summary>
        /// å·¥ä½ä»£ç 
        /// </summary>
        public string? WorkstationCode { get; set; }
        /// <summary>
        /// è®¾å¤‡ä»£ç 
        /// </summary>
        public string? EquipmentCode { get; set; }
        /// <summary>
        /// äº§çº¿ç¼–码
        /// </summary>
        public string? ProdLineCode { get; set; }
        /// <summary>
        /// èˆ¹å·
        /// </summary>
        public string? ShipNumber { get; set; }
        /// <summary>
        /// é¡¹ç›®å·
        /// </summary>
        public string? ProjectNumber { get; set; }
        /// <summary>
        /// å·¥åºåç§°
        /// </summary>
        public string? ProcessName { get; set; }
        /// <summary>
        /// ç®¡ä»¶ç¼–码
        /// </summary>
        public string? PipeFittingCode { get; set; }
        /// <summary>
        /// é¡ºåºå·
        /// </summary>
        public string? PreSerialNumber { get; set; }
        /// <summary>
        /// ç®¡æ®µç¼–码
        /// </summary>
        public string? PipeSpecCode { get; set; }
        /// <summary>
        /// ç®¡æ®µåç§°
        /// </summary>
        public string? PipeSectionName { get; set; }
        /// <summary>
        /// å¤–径(mm)
        /// </summary>
        public decimal OuterDiameter { get; set; }
        /// <summary>
        /// å£åŽš(mm)
        /// </summary>
        public decimal Thickness { get; set; }
        /// <summary>
        /// æè´¨
        /// </summary>
        public string? Material { get; set; }
        /// <summary>
        /// å·¥è‰ºæµå‘编号
        /// </summary>
        public string? ProcessRouteNumber { get; set; }
        /// <summary>
        /// è®¡åˆ’开始时间
        /// </summary>
        public DateTime? PlannedStartTime { get; set; }
        /// <summary>
        /// è®¡åˆ’完成时间
        /// </summary>
        public DateTime? PlannedEndTime { get; set; }
        /// <summary>
        /// ç­ç»„信息
        /// </summary>
        public string? TeamInfo { get; set; }
        /// <summary>
        /// æ—¶é—´æˆ³
        /// </summary>
        public string? Timestamp { get; set; }
        /// <summary>
        /// åˆ›å»ºäººID
        /// </summary>
        public string? CreatorId { get; set; }
        /// <summary>
        /// ä¿®æ”¹äººID
        /// </summary>
        public string? LastModifierId { get; set; }
        /// <summary>
        /// åˆ é™¤æ—¶é—´
        /// </summary>
        public DateTime? DeletionTime { get; set; }
        /// <summary>
        /// æ“ä½œå¤‡æ³¨
        /// </summary>
        public string? OperationRemark { get; set; }
        /// <summary>
        /// åˆ é™¤å¤‡æ³¨
        /// </summary>
        public string? DeleteRemark { get; set; }
        /// <summary>
        /// æŽ’序
        /// </summary>
        public int Sort { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        public string? Remark { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public bool? IsDisabled { get; set; }
        /// <summary>
        /// æ‰©å±•字段1
        /// </summary>
        public string? ExtraField1 { get; set; }
        /// <summary>
        /// æ‰©å±•字段2
        /// </summary>
        public string? ExtraField2 { get; set; }
        /// <summary>
        /// æ‰©å±•字段3
        /// </summary>
        public string? ExtraField3 { get; set; }
    /// <summary>
    /// Initializes a new instance of the <see cref="WorkTaskCreateOrUpdateDtoBase"/> class.
    /// </summary>
    public WorkTaskCreateOrUpdateDtoBase() : base(false)
    {
    }
}
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkTask/WorkTaskDto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,331 @@
using CMS.Plugin.PipeLineLems.Domain.Shared.Enums;
using CmsQueryExtensions;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
using Volo.Abp.Domain.Entities;
namespace CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.WorkTask;
/// <summary>
/// ä½œä¸šä»»åŠ¡è¡¨æ•°æ®å‚æ•°å¯¹è±¡
/// </summary>
public  class WorkTaskDto:  ExtensibleEntityDto<Guid>, IHasConcurrencyStamp
{
            /// <summary>
        /// å­ä»»åŠ¡ç¼–ç 
        /// </summary>
        public string Son_TaskCode { get; set; }
        /// <summary>
        /// ä»»åŠ¡ç¼–ç 
        /// </summary>
        public string TaskCode { get; set; }
        /// <summary>
        /// è®¡åˆ’状态
        /// </summary>
        public WorkPlanStatusEnum WorkPlanStatus { get; set; }
        /// <summary>
        /// è®¡åˆ’状态
        /// </summary>
        public string WorkPlanStatusDesc
        {
            get
            {
                return GetEnumDescriptionUtil.GetEnumDescription(WorkPlanStatus);
            }
        }
        /// <summary>
        /// å«æ–™çŠ¶æ€
        /// </summary>
        public CallMaterialStatusEnum CallMaterialStatus { get; set; }
        /// <summary>
        /// å«æ–™çŠ¶æ€
        /// </summary>
        public string CallMaterialStatusDesc
        {
            get
            {
                return GetEnumDescriptionUtil.GetEnumDescription(CallMaterialStatus);
            }
        }
        /// <summary>
        /// åŽŸæ–™æ ‡è¯†
        /// </summary>
        public string? DataIdentifier { get; set; }
        /// <summary>
        /// åŽŸæ–™åž‹å·
        /// </summary>
        public string? MaterialMode { get; set; }
        /// <summary>
        /// é•¿åº¦(mm)
        /// </summary>
        public decimal Length { get; set; }
        /// <summary>
        /// æ‰“码内容
        /// </summary>
        public string? MarkingContent { get; set; }
        /// <summary>
        /// æ‰“码位置
        /// </summary>
        public decimal MarkingPosition { get; set; }
        /// <summary>
        /// åˆ‡å‰²ä½ç½®
        /// </summary>
        public decimal CuttingPosition { get; set; }
        /// <summary>
        /// ç®¡æ®µæ•°é‡
        /// </summary>
        public int Quantity { get; set; }
        /// <summary>
        /// æ³•兰厚度(mm)
        /// </summary>
        public decimal FlangeThickness { get; set; }
        /// <summary>
        /// æ³•兰直径(mm)
        /// </summary>
        public decimal FlangeInnerDiameter { get; set; }
        /// <summary>
        /// æ³•兰公称压力
        /// </summary>
        public string? WeldingHeatInput { get; set; }
        /// <summary>
        /// æ³•兰冲码内容
        /// </summary>
        public string? PipeAllowableStress { get; set; }
        /// <summary>
        /// å¥—管长度(mm)
        /// </summary>
        public decimal PipeDiameter { get; set; }
        /// <summary>
        /// å¥—管直径(mm)
        /// </summary>
        public decimal PipeWallThickness { get; set; }
        /// <summary>
        /// å·¥åŽ‚ä»£ç 
        /// </summary>
        public string? FactoryCode { get; set; }
        /// <summary>
        /// äº§å“ä»£ç 
        /// </summary>
        public string? ProductCode { get; set; }
        /// <summary>
        /// å·¥ä½ä»£ç 
        /// </summary>
        public string? WorkstationCode { get; set; }
        /// <summary>
        /// è®¾å¤‡ä»£ç 
        /// </summary>
        public string? EquipmentCode { get; set; }
        /// <summary>
        /// äº§çº¿ç¼–码
        /// </summary>
        public string? ProdLineCode { get; set; }
        /// <summary>
        /// èˆ¹å·
        /// </summary>
        public string? ShipNumber { get; set; }
        /// <summary>
        /// é¡¹ç›®å·
        /// </summary>
        public string? ProjectNumber { get; set; }
        /// <summary>
        /// å·¥åºåç§°
        /// </summary>
        public string? ProcessName { get; set; }
        /// <summary>
        /// ç®¡ä»¶ç¼–码
        /// </summary>
        public string? PipeFittingCode { get; set; }
        /// <summary>
        /// é¡ºåºå·
        /// </summary>
        public string? PreSerialNumber { get; set; }
        /// <summary>
        /// ç®¡æ®µç¼–码
        /// </summary>
        public string? PipeSpecCode { get; set; }
        /// <summary>
        /// ç®¡æ®µåç§°
        /// </summary>
        public string? PipeSectionName { get; set; }
        /// <summary>
        /// å¤–径(mm)
        /// </summary>
        public decimal OuterDiameter { get; set; }
        /// <summary>
        /// å£åŽš(mm)
        /// </summary>
        public decimal Thickness { get; set; }
        /// <summary>
        /// æè´¨
        /// </summary>
        public string? Material { get; set; }
        /// <summary>
        /// å·¥è‰ºæµå‘编号
        /// </summary>
        public string? ProcessRouteNumber { get; set; }
        /// <summary>
        /// è®¡åˆ’开始时间
        /// </summary>
        public DateTime? PlannedStartTime { get; set; }
        /// <summary>
        /// è®¡åˆ’完成时间
        /// </summary>
        public DateTime? PlannedEndTime { get; set; }
        /// <summary>
        /// ç­ç»„信息
        /// </summary>
        public string? TeamInfo { get; set; }
        /// <summary>
        /// æ—¶é—´æˆ³
        /// </summary>
        public string? Timestamp { get; set; }
        /// <summary>
        /// æ‰©å±•属性
        /// </summary>
        public ExtraPropertyDictionary? ExtraProperties { get; set; }
        /// <summary>
        /// å¹¶å‘戳
        /// </summary>
        public string? ConcurrencyStamp { get; set; }
        /// <summary>
        /// åˆ›å»ºæ—¶é—´
        /// </summary>
        public DateTime CreationTime { get; set; }
        /// <summary>
        /// åˆ›å»ºäººID
        /// </summary>
        public string? CreatorId { get; set; }
        /// <summary>
        /// ä¿®æ”¹æ—¶é—´
        /// </summary>
        public DateTime? LastModificationTime { get; set; }
        /// <summary>
        /// ä¿®æ”¹äººID
        /// </summary>
        public string? LastModifierId { get; set; }
        /// <summary>
        /// æ˜¯å¦åˆ é™¤
        /// </summary>
        public bool IsDeleted { get; set; }
        /// <summary>
        /// åˆ é™¤äººID
        /// </summary>
        public string? DeleterId { get; set; }
        /// <summary>
        /// åˆ é™¤æ—¶é—´
        /// </summary>
        public DateTime? DeletionTime { get; set; }
        /// <summary>
        /// åˆ›å»ºäºº
        /// </summary>
        public string? CreatorName { get; set; }
        /// <summary>
        /// ä¿®æ”¹äºº
        /// </summary>
        public string? LastModifierName { get; set; }
        /// <summary>
        /// æ“ä½œå¤‡æ³¨
        /// </summary>
        public string? OperationRemark { get; set; }
        /// <summary>
        /// åˆ é™¤å¤‡æ³¨
        /// </summary>
        public string? DeleteRemark { get; set; }
        /// <summary>
        /// æŽ’序
        /// </summary>
        public int Sort { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        public string? Remark { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public bool? IsDisabled { get; set; }
        /// <summary>
        /// æ‰©å±•字段1
        /// </summary>
        public string? ExtraField1 { get; set; }
        /// <summary>
        /// æ‰©å±•字段2
        /// </summary>
        public string? ExtraField2 { get; set; }
        /// <summary>
        /// æ‰©å±•字段3
        /// </summary>
        public string? ExtraField3 { get; set; }
    /// <summary>
    /// Gets the export data.
    /// </summary>
    /// <returns></returns>
    public Dictionary<string, object> GetExportData()
    {
        var exportData = new Dictionary<string, object>();
        foreach (var property in this.GetType().GetProperties())
        {
            exportData.Add(property.Name, property.GetValue(this));
        }
        return exportData;
    }
}
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkTask/WorkTaskExportModel.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,277 @@
using MiniExcelLibs.Attributes;
using System.ComponentModel.DataAnnotations;
using System;
using System.ComponentModel;
using CMS.Plugin.PipeLineLems.Domain.Shared.Enums;
namespace CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.WorkTask;
/// <summary>
/// ä½œä¸šä»»åŠ¡è¡¨å¯¼å‡ºæ¨¡åž‹
/// </summary>
public  class WorkTaskExportModel
{
            /// <summary>
        /// å­ä»»åŠ¡ç¼–ç 
        /// </summary>
        [ExcelColumn(Name = "子任务编码", Width = 25)]
        public string Son_TaskCode { get; set; }
        /// <summary>
        /// ä»»åŠ¡ç¼–ç 
        /// </summary>
        [ExcelColumn(Name = "任务编码", Width = 25)]
        public string TaskCode { get; set; }
        /// <summary>
        /// è®¡åˆ’状态
        /// </summary>
        [ExcelColumn(Name = "计划状态", Width = 25)]
        public WorkPlanStatusEnum WorkPlanStatus { get; set; }
        /// <summary>
        /// å«æ–™çŠ¶æ€
        /// </summary>
        [ExcelColumn(Name = "叫料状态", Width = 25)]
        public CallMaterialStatusEnum CallMaterialStatus { get; set; }
        /// <summary>
        /// åŽŸæ–™æ ‡è¯†
        /// </summary>
        [ExcelColumn(Name = "原料标识", Width = 25)]
        public string DataIdentifier { get; set; }
        /// <summary>
        /// åŽŸæ–™åž‹å·
        /// </summary>
        [ExcelColumn(Name = "原料型号", Width = 25)]
        public string MaterialMode { get; set; }
        /// <summary>
        /// é•¿åº¦(mm)
        /// </summary>
        [ExcelColumn(Name = "长度(mm)", Width = 25)]
        public decimal Length { get; set; }
        /// <summary>
        /// æ‰“码内容
        /// </summary>
        [ExcelColumn(Name = "打码内容", Width = 25)]
        public string MarkingContent { get; set; }
        /// <summary>
        /// æ‰“码位置
        /// </summary>
        [ExcelColumn(Name = "打码位置", Width = 25)]
        public decimal MarkingPosition { get; set; }
        /// <summary>
        /// åˆ‡å‰²ä½ç½®
        /// </summary>
        [ExcelColumn(Name = "切割位置", Width = 25)]
        public decimal CuttingPosition { get; set; }
        /// <summary>
        /// ç®¡æ®µæ•°é‡
        /// </summary>
        [ExcelColumn(Name = "管段数量", Width = 25)]
        public int Quantity { get; set; }
        /// <summary>
        /// æ³•兰厚度(mm)
        /// </summary>
        [ExcelColumn(Name = "法兰厚度(mm)", Width = 25)]
        public decimal FlangeThickness { get; set; }
        /// <summary>
        /// æ³•兰直径(mm)
        /// </summary>
        [ExcelColumn(Name = "法兰直径(mm)", Width = 25)]
        public decimal FlangeInnerDiameter { get; set; }
        /// <summary>
        /// æ³•兰公称压力
        /// </summary>
        [ExcelColumn(Name = "法兰公称压力", Width = 25)]
        public string WeldingHeatInput { get; set; }
        /// <summary>
        /// æ³•兰冲码内容
        /// </summary>
        [ExcelColumn(Name = "法兰冲码内容", Width = 25)]
        public string PipeAllowableStress { get; set; }
        /// <summary>
        /// å¥—管长度(mm)
        /// </summary>
        [ExcelColumn(Name = "套管长度(mm)", Width = 25)]
        public decimal PipeDiameter { get; set; }
        /// <summary>
        /// å¥—管直径(mm)
        /// </summary>
        [ExcelColumn(Name = "套管直径(mm)", Width = 25)]
        public decimal PipeWallThickness { get; set; }
        /// <summary>
        /// å·¥åŽ‚ä»£ç 
        /// </summary>
        [ExcelColumn(Name = "工厂代码", Width = 25)]
        public string FactoryCode { get; set; }
        /// <summary>
        /// äº§å“ä»£ç 
        /// </summary>
        [ExcelColumn(Name = "产品代码", Width = 25)]
        public string ProductCode { get; set; }
        /// <summary>
        /// å·¥ä½ä»£ç 
        /// </summary>
        [ExcelColumn(Name = "工位代码", Width = 25)]
        public string WorkstationCode { get; set; }
        /// <summary>
        /// è®¾å¤‡ä»£ç 
        /// </summary>
        [ExcelColumn(Name = "设备代码", Width = 25)]
        public string EquipmentCode { get; set; }
        /// <summary>
        /// äº§çº¿ç¼–码
        /// </summary>
        [ExcelColumn(Name = "产线编码", Width = 25)]
        public string ProdLineCode { get; set; }
        /// <summary>
        /// èˆ¹å·
        /// </summary>
        [ExcelColumn(Name = "船号", Width = 25)]
        public string ShipNumber { get; set; }
        /// <summary>
        /// é¡¹ç›®å·
        /// </summary>
        [ExcelColumn(Name = "项目号", Width = 25)]
        public string ProjectNumber { get; set; }
        /// <summary>
        /// å·¥åºåç§°
        /// </summary>
        [ExcelColumn(Name = "工序名称", Width = 25)]
        public string ProcessName { get; set; }
        /// <summary>
        /// ç®¡ä»¶ç¼–码
        /// </summary>
        [ExcelColumn(Name = "管件编码", Width = 25)]
        public string PipeFittingCode { get; set; }
        /// <summary>
        /// é¡ºåºå·
        /// </summary>
        [ExcelColumn(Name = "顺序号", Width = 25)]
        public string PreSerialNumber { get; set; }
        /// <summary>
        /// ç®¡æ®µç¼–码
        /// </summary>
        [ExcelColumn(Name = "管段编码", Width = 25)]
        public string PipeSpecCode { get; set; }
        /// <summary>
        /// ç®¡æ®µåç§°
        /// </summary>
        [ExcelColumn(Name = "管段名称", Width = 25)]
        public string PipeSectionName { get; set; }
        /// <summary>
        /// å¤–径(mm)
        /// </summary>
        [ExcelColumn(Name = "外径(mm)", Width = 25)]
        public decimal OuterDiameter { get; set; }
        /// <summary>
        /// å£åŽš(mm)
        /// </summary>
        [ExcelColumn(Name = "壁厚(mm)", Width = 25)]
        public decimal Thickness { get; set; }
        /// <summary>
        /// æè´¨
        /// </summary>
        [ExcelColumn(Name = "材质", Width = 25)]
        public string Material { get; set; }
        /// <summary>
        /// å·¥è‰ºæµå‘编号
        /// </summary>
        [ExcelColumn(Name = "工艺流向编号", Width = 25)]
        public string ProcessRouteNumber { get; set; }
        /// <summary>
        /// è®¡åˆ’开始时间
        /// </summary>
        [ExcelColumn(Name = "计划开始时间", Width = 25)]
        public DateTime PlannedStartTime { get; set; }
        /// <summary>
        /// è®¡åˆ’完成时间
        /// </summary>
        [ExcelColumn(Name = "计划完成时间", Width = 25)]
        public DateTime PlannedEndTime { get; set; }
        /// <summary>
        /// ç­ç»„信息
        /// </summary>
        [ExcelColumn(Name = "班组信息", Width = 25)]
        public string TeamInfo { get; set; }
        /// <summary>
        /// æ—¶é—´æˆ³
        /// </summary>
        [ExcelColumn(Name = "时间戳", Width = 25)]
        public string Timestamp { get; set; }
        /// <summary>
        /// åˆ›å»ºæ—¶é—´
        /// </summary>
        [ExcelColumn(Name = "创建时间", Width = 25)]
        public DateTime CreationTime { get; set; }
        /// <summary>
        /// ä¿®æ”¹æ—¶é—´
        /// </summary>
        [ExcelColumn(Name = "修改时间", Width = 25)]
        public DateTime LastModificationTime { get; set; }
        /// <summary>
        /// åˆ›å»ºäºº
        /// </summary>
        [ExcelColumn(Name = "创建人", Width = 25)]
        public string CreatorName { get; set; }
        /// <summary>
        /// ä¿®æ”¹äºº
        /// </summary>
        [ExcelColumn(Name = "修改人", Width = 25)]
        public string LastModifierName { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        [ExcelColumn(Name = "备注", Width = 25)]
        public string Remark { get; set; }
    public Dictionary<string, object> GetExportData()
        {
            var exportData = new Dictionary<string, object>();
            foreach (var property in this.GetType().GetProperties())
            {
                exportData.Add(property.Name, property.GetValue(this));
            }
            return exportData;
        }
}
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkTask/WorkTaskUpdateDto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
using Volo.Abp.Domain.Entities;
namespace CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.WorkTask;
/// <summary>
/// ä½œä¸šä»»åŠ¡è¡¨æ›´æ–°å‚æ•°å¯¹è±¡
/// </summary>
public class WorkTaskUpdateDto : WorkTaskCreateOrUpdateDtoBase, IHasConcurrencyStamp
{
   /// <summary>
    /// å¹¶å‘戳
    /// </summary>
    public string ConcurrencyStamp { get; set; }
    /// <summary>
    /// ä¿®æ”¹äºº
    /// </summary>
    public string LastModifierName { get; set; }
}
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkTask/WorkTasksImportModel.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
namespace CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.WorkTask
{
    /// <summary>
    /// ä½œä¸šä»»åŠ¡è¡¨å¯¼å…¥æ¨¡åž‹
    /// </summary>
    public class WorkTasksImportModel
    {
        private List<WorkTaskImportModel> _WorkTasks = new();
        public List<WorkTaskImportModel> WorkTasks
        {
            get => _WorkTasks;
            set
            {
                _WorkTasks = value;
                var rowIndex = 2;
                _WorkTasks?.ForEach(x => x.RowIndex = rowIndex++);
            }
        }
        /// <summary>
        /// ä½œä¸šä»»åŠ¡è¡¨å¯¼å…¥æ¨¡åž‹
        /// </summary>
        public class WorkTaskImportModel : WorkTaskExportModel
        {
            /// <summary>
            /// è¡Œå·
            /// </summary>
            public int RowIndex { get; set; }
        }
    }
}
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Services/IWorkTaskAppService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,99 @@
using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.WorkTask;
using Volo.Abp.Application.Services;
using CmsQueryExtensions.Entitys;
using System.Linq.Expressions;
using CMS.Plugin.PipeLineLems.Domain.WorkTask;
namespace CMS.Plugin.PipeLineLems.Application.Contracts.Services;
/// <summary>
/// ä½œä¸šä»»åŠ¡è¡¨åº”ç”¨æœåŠ¡æŽ¥å£
/// </summary>
public interface IWorkTaskAppService : ICrudAppService<WorkTaskDto, Guid, GetWorkTaskInput, WorkTaskCreateDto, WorkTaskUpdateDto>
{
    /// <summary>
    /// å…‹éš†ä½œä¸šä»»åŠ¡è¡¨
    /// </summary>
    /// <param name="ids"></param>
    /// <returns></returns>
    Task<List<WorkTaskDto>> CloneAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser);
    /// <summary>
    /// åˆ é™¤ä½œä¸šä»»åŠ¡è¡¨
    /// </summary>
    /// <param name="ids"></param>
    /// <returns></returns>
    Task DeleteManyAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser);
    /// <summary>
    /// ç‰©ç†åˆ é™¤ä½œä¸šä»»åŠ¡è¡¨
    /// </summary>
    /// <param name="id">主键ID</param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task DeletePermanentlyAsync(Guid id, MyCurrentUser myCurrentUser, CancellationToken cancellationToken = default);
    /// <summary>
    /// æ‰¹é‡ç‰©ç†åˆ é™¤ä½œä¸šä»»åŠ¡è¡¨ï¼ˆç›´æŽ¥åˆ é™¤ï¼Œä¸è½¯åˆ é™¤ï¼‰
    /// </summary>
    /// <param name="ids">要删除的主键ID列表</param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task BatchDeletePermanentlyAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser, CancellationToken cancellationToken = default);
    /// <summary>
    /// è°ƒæ•´æŽ’序作业任务表
    /// </summary>
    /// <param name="id"></param>
    /// <param name="sort"></param>
    /// <returns></returns>
    Task AdjustSortAsync(Guid id, int sort);
    /// <summary>
    /// å¯¼å…¥ä½œä¸šä»»åŠ¡è¡¨
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task ImportAsync(WorkTasksImportModel input, MyCurrentUser myCurrentUser);
    /// <summary>
    /// å¯¼å‡ºä½œä¸šä»»åŠ¡è¡¨
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWorkTaskInput input);
    /// <summary>
    /// æ ¹æ®æ¡ä»¶èŽ·å–ä½œä¸šä»»åŠ¡è¡¨åˆ—è¡¨
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task<List<WorkTask>> GetListByFilterAsync(Expression<Func<WorkTask, bool>> whereConditions, CancellationToken cancellationToken = default);
    /// <summary>
    ///  æ ¹æ®æ¡ä»¶èŽ·å–å•ä¸ªä½œä¸šä»»åŠ¡è¡¨
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="isMultipleThrowException">是否查询出多条就报错</param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    /// <exception cref="UserFriendlyException"></exception>
    Task<WorkTask> GetSingleByFilterAsync(Expression<Func<WorkTask, bool>> whereConditions, bool is​MultipleThrowException = false, CancellationToken cancellationToken = default);
    /// <summary>
    /// æ ¹æ®æ¡ä»¶èŽ·å–ä½œä¸šä»»åŠ¡è¡¨åˆ—è¡¨
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task<List<WorkTaskDto>> FindListByFilterAsync(GetWorkTaskInput input, CancellationToken cancellationToken = default);
    /// <summary>
    /// æ ¹æ®æ¡ä»¶èŽ·å–å•ä¸ªä½œä¸šä»»åŠ¡è¡¨
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task<WorkTaskDto> FindSingleByFilterAsync(GetWorkTaskInput input, CancellationToken cancellationToken = default);
}
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/WorkTaskAppService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,623 @@
using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.WorkTask;
using CMS.Plugin.PipeLineLems.Application.Contracts.Services;
using CMS.Plugin.PipeLineLems.Domain.Shared;
using CmsQueryExtensions;
using CMS.Plugin.PipeLineLems.Domain.WorkTask;
using CmsQueryExtensions.Extension;
using System.Linq.Expressions;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
using Volo.Abp.ObjectExtending;
using Volo.Abp.ObjectMapping;
using CmsQueryExtensions.Entitys;
namespace CMS.Plugin.PipeLineLems.Application.Implements;
/// <summary>
/// ä½œä¸šä»»åŠ¡è¡¨åº”ç”¨æœåŠ¡
/// </summary>
public class WorkTaskAppService : CMSPluginAppService, IWorkTaskAppService
{
    private readonly IWorkTaskRepository _workTaskRepository;
    /// <summary>
    /// Initializes a new instance of the <see cref="WorkTaskAppService"/> class.
    /// </summary>
    /// <param name="WorkTaskRepository">The task job repository.</param>
    public WorkTaskAppService(IWorkTaskRepository workTaskRepository)
    {
        _workTaskRepository = workTaskRepository;
    }
    /// <summary>
    /// èŽ·å–æŒ‡å®šä½œä¸šä»»åŠ¡è¡¨
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    public virtual async Task<WorkTaskDto> GetAsync(Guid id)
    {
        return ObjectMapper.Map<WorkTask, WorkTaskDto>(await _workTaskRepository.GetAsync(id));
    }
    /// <summary>
    /// åˆ†é¡µèŽ·å–ä½œä¸šä»»åŠ¡è¡¨
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    public virtual async Task<PagedResultDto<WorkTaskDto>> GetListAsync(GetWorkTaskInput input)
    {
        Check.NotNull(input, nameof(input));
        if (input.Sorting.IsNullOrWhiteSpace())
        {
            input.Sorting = nameof(WorkTask.Sort);
        }
        #region åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶
        //动态构造查询条件
        var whereConditions = DynamicGetQueryParams(input);
        #endregion
        var count = await _workTaskRepository.GetCountAsync(whereConditions);
        var list = await _workTaskRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount);
        return new PagedResultDto<WorkTaskDto>(count, ObjectMapper.Map<List<WorkTask>, List<WorkTaskDto>>(list));
    }
    /// <summary>
    /// åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶
    /// </summary>
    /// <param name="input">输入参数</param>
    /// <returns></returns>
    private FunReturnResultModel<Expression<Func<WorkTask, bool>>> DynamicGetQueryParams(GetWorkTaskInput input)
    {
        //动态构造查询条件
        var whereConditions = WhereConditionsExtensions.GetWhereConditions<WorkTask, GetWorkTaskInput>(input);
        if (!whereConditions.IsSuccess)
        {
            throw new Exception("动态构造查询条件失败:" + whereConditions.ErrMsg);
        }
        //也可再次自定义构建查询条件
        Expression<Func<WorkTask, bool>> extendExpression = a => a.IsDeleted == false;
        // ä½¿ç”¨ System.Linq.PredicateBuilder çš„ And
        var pres = (System.Linq.Expressions.Expression<Func<WorkTask, bool>>)(whereConditions.data);
        whereConditions.data = System.Linq.PredicateBuilder.And(pres, extendExpression);
        return whereConditions;
    }
    /// <summary>
    /// æ–°å»ºä½œä¸šä»»åŠ¡è¡¨
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    /// <exception cref="UserFriendlyException"></exception>
    public virtual async Task<WorkTaskDto> CreateAsync(WorkTaskCreateDto input)
    {
        await CheckCreateOrUpdateDtoAsync(input);
        var exist = await _workTaskRepository.NameExistAsync(input.Son_TaskCode);
        if (exist)
        {
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.Son_TaskCode]);
        }
        var maxSort = await _workTaskRepository.GetMaxSortAsync();
        var sort = input.Sort ?? maxSort;
        var insertObj = ObjectMapper.Map<WorkTaskCreateDto, WorkTask>(input);
        insertObj.Sort = sort;
        input.MapExtraPropertiesTo(insertObj, MappingPropertyDefinitionChecks.None);
        insertObj.CreatorName = input.CreatorName;//创建人
        await _workTaskRepository.InsertAsync(insertObj);
        //if (input.Sort.HasValue && insertObj.Sort != maxSort)
        //{
        //    await AdjustSortAsync(insertObj.Id, insertObj.Sort);
        //}
        return ObjectMapper.Map<WorkTask, WorkTaskDto>(insertObj);
    }
    /// <summary>
    /// æ›´æ–°ä½œä¸šä»»åŠ¡è¡¨
    /// </summary>
    /// <param name="id"></param>
    /// <param name="input"></param>
    /// <returns></returns>
    /// <exception cref="UserFriendlyException"></exception>
    public virtual async Task<WorkTaskDto> UpdateAsync(Guid id, WorkTaskUpdateDto input)
    {
        await CheckCreateOrUpdateDtoAsync(input);
        var updateObj = await _workTaskRepository.GetAsync(id);
        var exist = await _workTaskRepository.NameExistAsync(input.Son_TaskCode, updateObj.Id);
        if (exist)
        {
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.Son_TaskCode]);
        }
        updateObj.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
        input.MapExtraPropertiesTo(updateObj, MappingPropertyDefinitionChecks.None);
        updateObj.Son_TaskCode = input.Son_TaskCode;
        updateObj.TaskCode = input.TaskCode;
        updateObj.WorkPlanStatus = input.WorkPlanStatus;
        updateObj.CallMaterialStatus = input.CallMaterialStatus;
        updateObj.DataIdentifier = input.DataIdentifier;
        updateObj.MaterialMode = input.MaterialMode;
        updateObj.Length = input.Length;
        updateObj.MarkingContent = input.MarkingContent;
        updateObj.MarkingPosition = input.MarkingPosition;
        updateObj.CuttingPosition = input.CuttingPosition;
        updateObj.Quantity = input.Quantity;
        updateObj.FlangeThickness = input.FlangeThickness;
        updateObj.FlangeInnerDiameter = input.FlangeInnerDiameter;
        updateObj.WeldingHeatInput = input.WeldingHeatInput;
        updateObj.PipeAllowableStress = input.PipeAllowableStress;
        updateObj.PipeDiameter = input.PipeDiameter;
        updateObj.PipeWallThickness = input.PipeWallThickness;
        updateObj.FactoryCode = input.FactoryCode;
        updateObj.ProductCode = input.ProductCode;
        updateObj.WorkstationCode = input.WorkstationCode;
        updateObj.EquipmentCode = input.EquipmentCode;
        updateObj.ProdLineCode = input.ProdLineCode;
        updateObj.ShipNumber = input.ShipNumber;
        updateObj.ProjectNumber = input.ProjectNumber;
        updateObj.ProcessName = input.ProcessName;
        updateObj.PipeFittingCode = input.PipeFittingCode;
        updateObj.PreSerialNumber = input.PreSerialNumber;
        updateObj.PipeSpecCode = input.PipeSpecCode;
        updateObj.PipeSectionName = input.PipeSectionName;
        updateObj.OuterDiameter = input.OuterDiameter;
        updateObj.Thickness = input.Thickness;
        updateObj.Material = input.Material;
        updateObj.ProcessRouteNumber = input.ProcessRouteNumber;
        updateObj.PlannedStartTime = input.PlannedStartTime;
        updateObj.PlannedEndTime = input.PlannedEndTime;
        updateObj.TeamInfo = input.TeamInfo;
        updateObj.Timestamp = input.Timestamp;
        updateObj.Remark = input.Remark;
        updateObj.LastModifierName = input.LastModifierName;//修改人
        await _workTaskRepository.UpdateAsync(updateObj);
        return ObjectMapper.Map<WorkTask, WorkTaskDto>(updateObj);
    }
    /// <summary>
    /// å…‹éš†ä½œä¸šä»»åŠ¡è¡¨
    /// </summary>
    /// <param name="ids"></param>
    /// <returns></returns>
    public async Task<List<WorkTaskDto>> CloneAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser)
    {
        //var workTasks = new List<WorkTask>();
        //if (ids != null)
        //{
        //    var sort = await _workTaskRepository.GetMaxSortAsync();
        //    foreach (var id in ids)
        //    {
        //        var WorkTask = await _workTaskRepository.FindAsync(id);
        //        if (WorkTask != null)
        //        {
        //            var name = WorkTask.Name + WorkTaskConsts.CloneTag;
        //            var notExist = false;
        //            while (!notExist)
        //            {
        //                var exist = await _workTaskRepository.NameExistAsync(name);
        //                if (exist || workTasks.Any(x => x.Name == name))
        //                {
        //                    name += WorkTaskConsts.CloneTag;
        //                    continue;
        //                }
        //                notExist = true;
        //            }
        //            //WorkTask = await _workTaskRepository.InsertAsync(WorkTask.Clone(GuidGenerator.Create(), name, sort++));
        //            workTasks.Add(WorkTask);
        //        }
        //    }
        //}
        //return ObjectMapper.Map<List<WorkTask>, List<WorkTaskDto>>(workTasks);
        return new List<WorkTaskDto>();
    }
    /// <summary>
    /// åˆ é™¤å•个作业任务表
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    public virtual Task DeleteAsync(Guid id)
    {
        return _workTaskRepository.DeleteAsync(id);
    }
    /// <summary>
    /// åˆ é™¤å¤šä¸ªä½œä¸šä»»åŠ¡è¡¨
    /// </summary>
    /// <param name="ids"></param>
    /// <returns></returns>
    public async Task DeleteManyAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser)
    {
        foreach (var id in ids)
        {
            await DeleteAsync(id);
        }
    }
    /// <summary>
    /// ç‰©ç†åˆ é™¤ä½œä¸šä»»åŠ¡è¡¨
    /// </summary>
    /// <param name="id">主键ID</param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public virtual async Task DeletePermanentlyAsync(Guid id, MyCurrentUser myCurrentUser, CancellationToken cancellationToken = default)
    {
        _workTaskRepository.DeletePermanentlyAsync(id);
    }
    /// <summary>
    /// æ‰¹é‡ç‰©ç†åˆ é™¤ä½œä¸šä»»åŠ¡è¡¨ï¼ˆç›´æŽ¥åˆ é™¤ï¼Œä¸è½¯åˆ é™¤ï¼‰
    /// </summary>
    /// <param name="ids">要删除的主键ID列表</param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public virtual async Task BatchDeletePermanentlyAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser, CancellationToken cancellationToken = default)
    {
        _workTaskRepository.BatchDeletePermanentlyAsync(ids);
    }
    /// <summary>
    /// è°ƒæ•´æŽ’序作业任务表
    /// </summary>
    /// <param name="id"></param>
    /// <param name="sort"></param>
    /// <returns></returns>
    public virtual async Task AdjustSortAsync(Guid id, int sort)
    {
        //var list = await _workTaskRepository.GetListAsync(null, nameof(WorkTask.Sort));
        //if (list != null && list.Any())
        //{
        //    var initSort = 1;
        //    list.ForEach(x => x.AdjustSort(initSort++));
        //    var entity = list.FirstOrDefault(x => x.Id == id);
        //    if (entity != null)
        //    {
        //        if (sort == 1)
        //        {
        //            list.Where(x => x.Id != id).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1));
        //        }
        //        else if (entity.Sort > sort)
        //        {
        //            list.Where(x => x.Id != id && x.Sort >= sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1));
        //            list.Where(x => x.Id != id && x.Sort < sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort - 1));
        //        }
        //        else if (entity.Sort < sort)
        //        {
        //            list.Where(x => x.Id != id && x.Sort > sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1));
        //            list.Where(x => x.Id != id && x.Sort <= sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort - 1));
        //        }
        //        entity.AdjustSort(sort);
        //    }
        //}
        //await _workTaskRepository.UpdateManyAsync(list);
    }
    /// <summary>
    /// å¯¼å…¥ä½œä¸šä»»åŠ¡è¡¨
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    /// <exception cref="UserFriendlyException"></exception>
    public async Task ImportAsync(WorkTasksImportModel input, MyCurrentUser myCurrentUser)
    {
        Check.NotNull(input, nameof(input));
        var workTaskCreateDtos = new List<(int RowIndex, WorkTaskCreateDto Item)>();
        var workTaskUpdateDtos = new List<(int RowIndex, Guid Id, WorkTaskUpdateDto Item)>();
        var importItems = input.WorkTasks;
        if (importItems != null && importItems.Any())
        {
            #region å¯¼å…¥æ ¡éªŒ
            // åˆ¤æ–­åç§°æ˜¯å¦é‡å¤ï¼Œå¹¶è¾“出第几行重复
            var duplicateWorkTasks = importItems.GroupBy(x => x.Son_TaskCode).Where(x => x.Count() > 1).ToList();
            if (duplicateWorkTasks?.Any() == true)
            {
                var duplicateWorkTaskMsgs = duplicateWorkTasks.Select(x => $"第 {string.Join(",", x.Select(x => x.RowIndex))} è¡Œï¼š{x.Key}  åç§°é‡å¤");
                var errorMsg = $"导入失败!配置, {string.Join(",", duplicateWorkTaskMsgs)},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
            #endregion
            foreach (var impItem in importItems)
            {
                if (impItem.Son_TaskCode.IsNullOrWhiteSpace())
                {
                    continue;
                }
                if (impItem.Son_TaskCode.IsNullOrWhiteSpace())
                {
                    var errorMsg = $"导入失败!配置,第{impItem.RowIndex}行:WorkTask名称不能为空";
                    throw new UserFriendlyException(errorMsg);
                }
                var oldWorkTask = await _workTaskRepository.FindByNameAsync(impItem.Son_TaskCode);
                if (oldWorkTask != null)
                {
                    var workTaskUpdateDto = new WorkTaskUpdateDto
                    {
                        Son_TaskCode = impItem.Son_TaskCode,
                        TaskCode = impItem.TaskCode,
                        WorkPlanStatus = impItem.WorkPlanStatus,
                        CallMaterialStatus = impItem.CallMaterialStatus,
                        DataIdentifier = impItem.DataIdentifier,
                        MaterialMode = impItem.MaterialMode,
                        Length = impItem.Length,
                        MarkingContent = impItem.MarkingContent,
                        MarkingPosition = impItem.MarkingPosition,
                        CuttingPosition = impItem.CuttingPosition,
                        Quantity = impItem.Quantity,
                        FlangeThickness = impItem.FlangeThickness,
                        FlangeInnerDiameter = impItem.FlangeInnerDiameter,
                        WeldingHeatInput = impItem.WeldingHeatInput,
                        PipeAllowableStress = impItem.PipeAllowableStress,
                        PipeDiameter = impItem.PipeDiameter,
                        PipeWallThickness = impItem.PipeWallThickness,
                        FactoryCode = impItem.FactoryCode,
                        ProductCode = impItem.ProductCode,
                        WorkstationCode = impItem.WorkstationCode,
                        EquipmentCode = impItem.EquipmentCode,
                        ProdLineCode = impItem.ProdLineCode,
                        ShipNumber = impItem.ShipNumber,
                        ProjectNumber = impItem.ProjectNumber,
                        ProcessName = impItem.ProcessName,
                        PipeFittingCode = impItem.PipeFittingCode,
                        PreSerialNumber = impItem.PreSerialNumber,
                        PipeSpecCode = impItem.PipeSpecCode,
                        PipeSectionName = impItem.PipeSectionName,
                        OuterDiameter = impItem.OuterDiameter,
                        Thickness = impItem.Thickness,
                        Material = impItem.Material,
                        ProcessRouteNumber = impItem.ProcessRouteNumber,
                        PlannedStartTime = impItem.PlannedStartTime,
                        PlannedEndTime = impItem.PlannedEndTime,
                        TeamInfo = impItem.TeamInfo,
                        Timestamp = impItem.Timestamp,
                        Remark = impItem.Remark,
                    };
                    workTaskUpdateDtos.Add((impItem.RowIndex, oldWorkTask.Id, workTaskUpdateDto));
                }
                else
                {
                    var workTaskCreateDto = new WorkTaskCreateDto
                    {
                        Son_TaskCode = impItem.Son_TaskCode,
                        TaskCode = impItem.TaskCode,
                        WorkPlanStatus = impItem.WorkPlanStatus,
                        CallMaterialStatus = impItem.CallMaterialStatus,
                        DataIdentifier = impItem.DataIdentifier,
                        MaterialMode = impItem.MaterialMode,
                        Length = impItem.Length,
                        MarkingContent = impItem.MarkingContent,
                        MarkingPosition = impItem.MarkingPosition,
                        CuttingPosition = impItem.CuttingPosition,
                        Quantity = impItem.Quantity,
                        FlangeThickness = impItem.FlangeThickness,
                        FlangeInnerDiameter = impItem.FlangeInnerDiameter,
                        WeldingHeatInput = impItem.WeldingHeatInput,
                        PipeAllowableStress = impItem.PipeAllowableStress,
                        PipeDiameter = impItem.PipeDiameter,
                        PipeWallThickness = impItem.PipeWallThickness,
                        FactoryCode = impItem.FactoryCode,
                        ProductCode = impItem.ProductCode,
                        WorkstationCode = impItem.WorkstationCode,
                        EquipmentCode = impItem.EquipmentCode,
                        ProdLineCode = impItem.ProdLineCode,
                        ShipNumber = impItem.ShipNumber,
                        ProjectNumber = impItem.ProjectNumber,
                        ProcessName = impItem.ProcessName,
                        PipeFittingCode = impItem.PipeFittingCode,
                        PreSerialNumber = impItem.PreSerialNumber,
                        PipeSpecCode = impItem.PipeSpecCode,
                        PipeSectionName = impItem.PipeSectionName,
                        OuterDiameter = impItem.OuterDiameter,
                        Thickness = impItem.Thickness,
                        Material = impItem.Material,
                        ProcessRouteNumber = impItem.ProcessRouteNumber,
                        PlannedStartTime = impItem.PlannedStartTime,
                        PlannedEndTime = impItem.PlannedEndTime,
                        TeamInfo = impItem.TeamInfo,
                        Timestamp = impItem.Timestamp,
                        Remark = impItem.Remark,
                    };
                    workTaskCreateDtos.Add((impItem.RowIndex, workTaskCreateDto));
                }
            }
        }
        // æ–°å¢ž
        foreach (var workTaskDto in workTaskCreateDtos)
        {
            try
            {
                workTaskDto.Item.CreatorName = myCurrentUser.UserAccount;//创建人
                await CreateAsync(workTaskDto.Item);
            }
            catch (Exception e)
            {
                var errorMsg = $"导入失败!配置,第{workTaskDto.RowIndex}行:{e.Message},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
        }
        // æ›´æ–°
        foreach (var workTaskDto in workTaskUpdateDtos)
        {
            try
            {
                workTaskDto.Item.LastModifierName = myCurrentUser.UserAccount;//修改人
                await UpdateAsync(workTaskDto.Id, workTaskDto.Item);
            }
            catch (Exception e)
            {
                var errorMsg = $"导入失败!配置,第{workTaskDto.RowIndex}行:{e.Message},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
        }
    }
    /// <summary>
    /// å¯¼å‡ºä½œä¸šä»»åŠ¡è¡¨
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    public async Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWorkTaskInput input)
    {
        Check.NotNull(input, nameof(input));
        if (input.Sorting.IsNullOrWhiteSpace())
        {
            input.Sorting = nameof(WorkTask.Sort);
        }
        #region åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶
        //动态构造查询条件
        var whereConditions = DynamicGetQueryParams(input);
        #endregion
        var list = await _workTaskRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount, includeDetails: true);
        var result = ObjectMapper.Map<List<WorkTask>, List<WorkTaskDto>>(list);
        var sheets = new Dictionary<string, object>
        {
            ["配置"] = ExportHelper.ConvertListToExportData(result),
        };
        var fileName = "作业任务";
        return (sheets, fileName);
    }
    /// <summary>
    /// æ ¡éªŒä½œä¸šä»»åŠ¡è¡¨ï¼Œå½“æ–°å»ºæˆ–æ›´æ–°æ—¶
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    protected Task CheckCreateOrUpdateDtoAsync(WorkTaskCreateOrUpdateDtoBase input)
    {
        Check.NotNull(input, nameof(input));
        Check.NotNullOrWhiteSpace(input.Son_TaskCode, "子任务编码", 256);
        Check.NotNullOrWhiteSpace(input.TaskCode, "任务编码", 256);
        Check.NotNull(input.WorkPlanStatus, "计划状态");
        Check.NotNull(input.CallMaterialStatus, "叫料状态");
        Check.NotNull(input.Length, "长度(mm)");
        Check.NotNull(input.MarkingPosition, "打码位置");
        Check.NotNull(input.CuttingPosition, "切割位置");
        Check.NotNull(input.Quantity, "管段数量");
        Check.NotNull(input.FlangeThickness, "法兰厚度(mm)");
        Check.NotNull(input.FlangeInnerDiameter, "法兰直径(mm)");
        Check.NotNull(input.PipeDiameter, "套管长度(mm)");
        Check.NotNull(input.PipeWallThickness, "套管直径(mm)");
        Check.NotNull(input.OuterDiameter, "外径(mm)");
        Check.NotNull(input.Thickness, "壁厚(mm)");
        return Task.CompletedTask;
    }
    /// <summary>
    /// æ ¹æ®æ¡ä»¶èŽ·å–ä½œä¸šä»»åŠ¡è¡¨åˆ—è¡¨
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public async Task<List<WorkTask>> GetListByFilterAsync(Expression<Func<WorkTask, bool>> whereConditions, CancellationToken cancellationToken = default)
    {
        return await _workTaskRepository.GetListByFilterAsync(whereConditions);
    }
    /// <summary>
    ///  æ ¹æ®æ¡ä»¶èŽ·å–å•ä¸ªä½œä¸šä»»åŠ¡è¡¨
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="isMultipleThrowException">是否查询出多条就报错</param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    /// <exception cref="UserFriendlyException"></exception>
    public async Task<WorkTask> GetSingleByFilterAsync(Expression<Func<WorkTask, bool>> whereConditions, bool is​MultipleThrowException = false, CancellationToken cancellationToken = default)
    {
        return await _workTaskRepository.GetSingleByFilterAsync(whereConditions, is​MultipleThrowException);
    }
    /// <summary>
    /// æ ¹æ®æ¡ä»¶èŽ·å–ä½œä¸šä»»åŠ¡è¡¨åˆ—è¡¨
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    public virtual async Task<List<WorkTaskDto>> FindListByFilterAsync(GetWorkTaskInput input, CancellationToken cancellationToken = default)
    {
        Check.NotNull(input, nameof(input));
        if (input.Sorting.IsNullOrWhiteSpace())
        {
            input.Sorting = nameof(WorkTask.Sort);
        }
        #region åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶
        //动态构造查询条件
        var whereConditions = DynamicGetQueryParams(input);
        #endregion
        var list = await _workTaskRepository.GetListByFilterAsync(whereConditions?.data);
        return new List<WorkTaskDto>(ObjectMapper.Map<List<WorkTask>, List<WorkTaskDto>>(list));
    }
    /// <summary>
    /// æ ¹æ®æ¡ä»¶èŽ·å–å•ä¸ªä½œä¸šä»»åŠ¡è¡¨
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    public virtual async Task<WorkTaskDto> FindSingleByFilterAsync(GetWorkTaskInput input, CancellationToken cancellationToken = default)
    {
        Check.NotNull(input, nameof(input));
        if (input.Sorting.IsNullOrWhiteSpace())
        {
            input.Sorting = nameof(WorkTask.Sort);
        }
        #region åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶
        //动态构造查询条件
        var whereConditions = DynamicGetQueryParams(input);
        #endregion
        var dataObj = await _workTaskRepository.GetSingleByFilterAsync(whereConditions?.data);
        return (ObjectMapper.Map<WorkTask, WorkTaskDto>(dataObj));
    }
}
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/MapperProfiles/WorkTaskAutoMapperProfile.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
using AutoMapper;
using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.WorkPlan;
using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.WorkTask;
using CMS.Plugin.PipeLineLems.Domain.WorkTask;
using Volo.Abp.ObjectExtending;
namespace CMS.Plugin.PipeLineLems.Application.MapperProfiles;
/// <summary>
/// ä½œä¸šä»»åŠ¡è¡¨AutoMapper配置
/// </summary>
/// <seealso cref="AutoMapper.Profile" />
public class WorkTaskAutoMapperProfile : Profile
{
    /// <summary>
    /// Initializes a new instance of the <see cref="WorkTaskAutoMapperProfile"/> class.
    /// </summary>
    public WorkTaskAutoMapperProfile()
    {
        /* You can configure your AutoMapper mapping configuration here.
         * Alternatively, you can split your mapping configurations
         * into multiple profile classes for a better organization. */
        CreateMap<WorkTask, WorkTaskDto>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
        CreateMap<WorkTaskCreateDto, WorkTask>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
        CreateMap<GetWorkTaskInput, WorkTask>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
        CreateMap<WorkPlanCreateDto, WorkTaskCreateDto>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
    }
}
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain/WorkTask/IWorkTaskRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,88 @@
using CmsQueryExtensions.Extension;
using System.Linq.Expressions;
using Volo.Abp.Domain.Repositories;
namespace CMS.Plugin.PipeLineLems.Domain.WorkTask;
/// <summary>
/// ä½œä¸šä»»åŠ¡è¡¨ä»“å‚¨
/// </summary>
public interface IWorkTaskRepository : IBasicRepository<WorkTask, Guid>
{
    /// <summary>
    /// æŒ‰ç…§åç§°æŸ¥æ‰¾ä½œä¸šä»»åŠ¡è¡¨
    /// </summary>
    /// <param name="name"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task<WorkTask> FindByNameAsync(string name, CancellationToken cancellationToken = default);
    /// <summary>
    /// éªŒè¯åç§°æ˜¯å¦å­˜åœ¨ä½œä¸šä»»åŠ¡è¡¨
    /// </summary>
    /// <param name="name"></param>
    /// <param name="id"></param>
    /// <returns></returns>
    Task<bool> NameExistAsync(string name, Guid? id = null);
    /// <summary>
    /// èŽ·å–æœ€å¤§æŽ’åºä½œä¸šä»»åŠ¡è¡¨
    /// </summary>
    /// <returns></returns>
    Task<int> GetMaxSortAsync();
    /// <summary>
    /// èŽ·å–åˆ†é¡µåˆ—è¡¨ä½œä¸šä»»åŠ¡è¡¨
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="sorting"></param>
    /// <param name="maxResultCount"></param>
    /// <param name="skipCount"></param>
    /// <param name="includeDetails"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task<List<WorkTask>> GetListAsync(FunReturnResultModel<Expression<Func<WorkTask, bool>>> whereConditions, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, bool includeDetails = false, CancellationToken cancellationToken = default);
    /// <summary>
    /// èŽ·å–æ€»æ•°ä½œä¸šä»»åŠ¡è¡¨
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<WorkTask, bool>>> whereConditions, CancellationToken cancellationToken = default);
    /// <summary>
    /// ç‰©ç†åˆ é™¤ä½œä¸šä»»åŠ¡è¡¨
    /// </summary>
    /// <param name="id">主键ID</param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task DeletePermanentlyAsync(Guid id, CancellationToken cancellationToken = default);
    /// <summary>
    /// æ‰¹é‡ç‰©ç†åˆ é™¤ä½œä¸šä»»åŠ¡è¡¨ï¼ˆç›´æŽ¥åˆ é™¤ï¼Œä¸è½¯åˆ é™¤ï¼‰
    /// </summary>
    /// <param name="ids">要删除的主键ID列表</param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task BatchDeletePermanentlyAsync(IEnumerable<Guid> ids, CancellationToken cancellationToken = default);
    /// <summary>
    /// æ ¹æ®æ¡ä»¶èŽ·å–ä½œä¸šä»»åŠ¡è¡¨åˆ—è¡¨
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task<List<WorkTask>> GetListByFilterAsync(Expression<Func<WorkTask, bool>> whereConditions, CancellationToken cancellationToken = default);
    /// <summary>
    ///  æ ¹æ®æ¡ä»¶èŽ·å–å•ä¸ªä½œä¸šä»»åŠ¡è¡¨
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="isMultipleThrowException">是否查询出多条就报错</param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    /// <exception cref="UserFriendlyException"></exception>
    Task<WorkTask> GetSingleByFilterAsync(Expression<Func<WorkTask, bool>> whereConditions, bool is​MultipleThrowException = false, CancellationToken cancellationToken = default);
}
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain/WorkTask/WorkTask.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,264 @@
using CMS.Plugin.MyExtension.Domain;
using CMS.Plugin.PipeLineLems.Domain.Shared.Enums;
using Microsoft.EntityFrameworkCore;
using System.ComponentModel.DataAnnotations.Schema;
using Volo.Abp.Domain.Entities.Auditing;
namespace CMS.Plugin.PipeLineLems.Domain.WorkTask
{
    /// <summary>
    /// ä½œä¸šä»»åŠ¡è¡¨
    /// </summary>
    public class WorkTask : MyFullAuditedAggregateRoot<Guid>
    {
        /// <summary>
        /// å­ä»»åŠ¡ç¼–ç 
        /// </summary>
        public string Son_TaskCode { get; set; }
        #region ä½œä¸šè®¡åˆ’表的字段
        /// <summary>
        /// ä»»åŠ¡ç¼–ç 
        /// </summary>
        public string TaskCode { get; set; }
        /// <summary>
        /// è®¡åˆ’状态
        /// </summary>
        public WorkPlanStatusEnum WorkPlanStatus { get; set; }
        /// <summary>
        /// å«æ–™çŠ¶æ€
        /// </summary>
        public CallMaterialStatusEnum CallMaterialStatus { get; set; }
        #region åŽŸæ–™ç®¡ä¿¡æ¯
        ///// <summary>
        ///// åŽŸæ–™ç¼–å·
        ///// </summary>
        //public string OrgMaterialCode { get; set; }
        /// <summary>
        /// åŽŸæ–™æ ‡è¯†
        /// </summary>
        public string DataIdentifier { get; set; }
        /// <summary>
        /// åŽŸæ–™åž‹å·
        /// </summary>
        public string MaterialMode { get; set; }
        #endregion
        #region æ‰“码
        /// <summary>
        /// é•¿åº¦(mm)
        /// </summary>
        public decimal Length { get; set; }
        /// <summary>
        /// æ‰“码内容
        /// </summary>
        public string MarkingContent { get; set; }
        /// <summary>
        /// æ‰“码位置
        /// </summary>
        public decimal MarkingPosition { get; set; }
        #endregion
        #region åˆ‡å‰²
        ///// <summary>
        ///// åˆ‡å‰²æ–‡ä»¶
        ///// </summary>
        //public string CuttingFile { get; set; }
        /// <summary>
        /// åˆ‡å‰²ä½ç½®
        /// </summary>
        public decimal CuttingPosition { get; set; }
        /// <summary>
        /// ç®¡æ®µæ•°é‡
        /// </summary>
        public int Quantity { get; set; }
        #endregion
        #region è£…配、焊接
        /// <summary>
        /// æ³•兰厚度(mm)
        /// </summary>
        public decimal FlangeThickness { get; set; }
        /// <summary>
        /// æ³•兰直径(mm)
        /// </summary>
        public decimal FlangeInnerDiameter { get; set; }
        /// <summary>
        /// æ³•兰公称压力
        /// </summary>
        public string WeldingHeatInput { get; set; }
        /// <summary>
        /// æ³•兰冲码内容
        /// </summary>
        public string PipeAllowableStress { get; set; }
        /// <summary>
        /// å¥—管长度(mm)
        /// </summary>
        public decimal PipeDiameter { get; set; }
        /// <summary>
        /// å¥—管直径(mm)
        /// </summary>
        public decimal PipeWallThickness { get; set; }
        #endregion
        /// <summary>
        /// å·¥åŽ‚ä»£ç 
        /// </summary>
        public string FactoryCode { get; set; }
        /// <summary>
        /// äº§å“ä»£ç 
        /// </summary>
        public string ProductCode { get; set; }
        /// <summary>
        /// å·¥ä½ä»£ç 
        /// </summary>
        public string WorkstationCode { get; set; }
        /// <summary>
        /// è®¾å¤‡ä»£ç 
        /// </summary>
        public string EquipmentCode { get; set; }
        ///// <summary>
        ///// å·¥ä»¶åç§°
        ///// </summary>
        //public string WorkpieceName { get; set; }
        /// <summary>
        /// äº§çº¿ç¼–码
        /// </summary>
        public string ProdLineCode { get; set; }
        /// <summary>
        /// èˆ¹å·
        /// </summary>
        public string ShipNumber { get; set; }
        /// <summary>
        /// é¡¹ç›®å·
        /// </summary>
        public string ProjectNumber { get; set; }
        /// <summary>
        /// å·¥åºåç§°
        /// </summary>
        public string ProcessName { get; set; }
        /// <summary>
        /// ç®¡ä»¶ç¼–码
        /// </summary>
        public string PipeFittingCode { get; set; }
        /// <summary>
        /// é¡ºåºå·
        /// </summary>
        public string PreSerialNumber { get; set; }
        /// <summary>
        /// ç®¡æ®µç¼–码
        /// </summary>
        public string PipeSpecCode { get; set; }
        /// <summary>
        /// ç®¡æ®µåç§°
        /// </summary>
        public string PipeSectionName { get; set; }
        /// <summary>
        /// å¤–径(mm)
        /// </summary>
        public decimal OuterDiameter { get; set; }
        /// <summary>
        /// å£åŽš(mm)
        /// </summary>
        public decimal Thickness { get; set; }
        /// <summary>
        /// æè´¨
        /// </summary>
        public string Material { get; set; }
        ///// <summary>
        ///// æ˜¯å¦ä¸»æ”¯ç®¡
        ///// </summary>
        //public bool HasMainSignature { get; set; }
        ///// <summary>
        ///// æˆå“ç®¡ä»¶å›¾
        ///// </summary>
        //public string FinishedProductScale { get; set; }
        /// <summary>
        /// å·¥è‰ºæµå‘编号
        /// </summary>
        public string ProcessRouteNumber { get; set; }
        /// <summary>
        /// è®¡åˆ’开始时间
        /// </summary>
        public DateTime? PlannedStartTime { get; set; }
        /// <summary>
        /// è®¡åˆ’完成时间
        /// </summary>
        public DateTime? PlannedEndTime { get; set; }
        /// <summary>
        /// ç­ç»„信息
        /// </summary>
        public string TeamInfo { get; set; }
        /// <summary>
        /// æ—¶é—´æˆ³
        /// </summary>
        public string Timestamp { get; set; }
        #endregion
        /// <summary>
        /// Adjusts the sort.
        /// </summary>
        /// <param name="sort">The sort.</param>
        public void AdjustSort(int sort)
        {
            Sort = sort;
        }
    }
}
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WorkTask.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,103 @@
using CMS.Plugin.MyExtension.Domain;
using CMS.Plugin.PipeLineLems.Domain;
using CMS.Plugin.PipeLineLems.Domain.Shared.MyTestEntityNames;
using CMS.Plugin.PipeLineLems.Domain.WorkTask;
using Microsoft.EntityFrameworkCore;
using Volo.Abp;
using Volo.Abp.EntityFrameworkCore.Modeling;
namespace CMS.Plugin.PipeLineLems.EntityFrameworkCore.Extensions;
/// <summary>
/// EfCore扩展
/// </summary>
public static partial class CMSPluginEfCoreExtensions
{
    /// <summary>
    /// Includes the details.
    /// </summary>
    /// <param name="queryable">The queryable.</param>
    /// <param name="include">if set to <c>true</c> [include].</param>
    /// <returns></returns>
    public static IQueryable<WorkTask> IncludeDetails(this IQueryable<WorkTask> queryable, bool include = true)
    {
        if (!include)
        {
            return queryable;
        }
        return queryable;
    }
    /// <summary>
    /// Configures the mytestentityname.
    /// </summary>
    /// <param name="builder">The builder.</param>
    public static void ConfigureWorkTask(this ModelBuilder builder)
    {
        Check.NotNull(builder, nameof(builder));
        builder.Entity<WorkTask>(b =>
        {
            //Configure table & schema name
            b.ToTable((CMSPluginDbProperties.DbTablePrefix + "_WorkTasks").ToLower(), CMSPluginDbProperties.DbSchema).HasComment("作业任务表");
            b.ConfigureByConvention();
            b.Property(x => x.Son_TaskCode).HasMaxLength(256).IsRequired().HasComment("子任务编码");
            // Configure properties
            b.Property(x => x.TaskCode).HasMaxLength(256).IsRequired().HasComment("任务编码");
            b.Property(x => x.WorkPlanStatus).IsRequired().HasComment("计划状态");
            b.Property(x => x.CallMaterialStatus).IsRequired().HasComment("叫料状态");
            b.Property(x => x.DataIdentifier).HasMaxLength(256).HasComment("原料标识");
            b.Property(x => x.MaterialMode).HasMaxLength(256).HasComment("原料型号");
            b.Property(x => x.Length).HasColumnType("decimal(18,2)").HasComment("长度(mm)");
            b.Property(x => x.MarkingContent).HasMaxLength(1024).HasComment("打码内容");
            b.Property(x => x.Quantity).HasComment("管段数量");
            b.Property(x => x.FlangeThickness).HasColumnType("decimal(18,2)").HasComment("法兰厚度(mm)");
            b.Property(x => x.FlangeInnerDiameter).HasColumnType("decimal(18,2)").HasComment("法兰直径(mm)");
            b.Property(x => x.WeldingHeatInput).HasMaxLength(256).HasComment("法兰公称压力");
            b.Property(x => x.PipeAllowableStress).HasMaxLength(256).HasComment("法兰冲码内容");
            b.Property(x => x.PipeDiameter).HasColumnType("decimal(18,2)").HasComment("套管长度(mm)");
            b.Property(x => x.PipeWallThickness).HasColumnType("decimal(18,2)").HasComment("套管直径(mm)");
            b.Property(x => x.FactoryCode).HasMaxLength(256).HasComment("工厂代码");
            b.Property(x => x.ProductCode).HasMaxLength(256).HasComment("产品代码");
            b.Property(x => x.WorkstationCode).HasMaxLength(256).HasComment("工位代码");
            b.Property(x => x.EquipmentCode).HasMaxLength(256).HasComment("设备代码");
            b.Property(x => x.ProdLineCode).HasMaxLength(256).HasComment("产线编码");
            b.Property(x => x.ShipNumber).HasMaxLength(256).HasComment("船号");
            b.Property(x => x.ProjectNumber).HasMaxLength(256).HasComment("项目号");
            b.Property(x => x.ProcessName).HasMaxLength(256).HasComment("工序名称");
            b.Property(x => x.PipeFittingCode).HasMaxLength(256).HasComment("管件编码");
            b.Property(x => x.PreSerialNumber).HasMaxLength(256).HasComment("顺序号");
            b.Property(x => x.PipeSpecCode).HasMaxLength(256).HasComment("管段编码");
            b.Property(x => x.PipeSectionName).HasMaxLength(256).HasComment("管段名称");
            b.Property(x => x.OuterDiameter).HasColumnType("decimal(18,2)").HasComment("外径(mm)");
            b.Property(x => x.Thickness).HasColumnType("decimal(18,2)").HasComment("壁厚(mm)");
            b.Property(x => x.Material).HasMaxLength(256).HasComment("材质");
            b.Property(x => x.MarkingPosition).HasColumnType("decimal(18,2)").HasComment("打码位置");
            b.Property(x => x.CuttingPosition).HasColumnType("decimal(18,2)").HasComment("切割位置");
            b.Property(x => x.ProcessRouteNumber).HasMaxLength(256).HasComment("工艺流向编号");
            b.Property(x => x.PlannedStartTime).HasComment("计划开始时间");
            b.Property(x => x.PlannedEndTime).HasComment("计划完成时间");
            b.Property(x => x.TeamInfo).HasMaxLength(256).HasComment("班组信息");
            b.Property(x => x.Timestamp).HasMaxLength(256).HasComment("时间戳");
            b.ConfigureMyCmsEntity();
            // Configure indexes
            b.HasIndex(u => u.Son_TaskCode).IsUnique();
            b.HasIndex(u => u.DataIdentifier);
            b.HasIndex(u => u.PlannedStartTime);
            b.HasIndex(u => u.PlannedEndTime);
            b.ApplyObjectExtensionMappings();
        });
    }
}
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.EntityFrameworkCore/Repositories/EfCoreWorkTaskRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,218 @@
using CMS.Plugin.PipeLineLems.Domain.WorkTask;
using CMS.Plugin.PipeLineLems.EntityFrameworkCore.Extensions;
using CmsQueryExtensions.Extension;
using Microsoft.EntityFrameworkCore;
using System.Linq.Dynamic.Core;
using System.Linq.Expressions;
using Volo.Abp;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
namespace CMS.Plugin.PipeLineLems.EntityFrameworkCore.Repositories;
/// <summary>
/// ä½œä¸šä»»åŠ¡è¡¨ä»“å‚¨å®žçŽ°
/// </summary>
public class EfCoreWorkTaskRepository : EfCoreRepository<ICMSPluginDbContext, WorkTask, Guid>, IWorkTaskRepository
{
    /// <summary>
    /// Initializes a new instance of the <see cref="EfCoreWorkTaskRepository"/> class.
    /// </summary>
    /// <param name="dbContextProvider">The database context provider.</param>
    public EfCoreWorkTaskRepository(IDbContextProvider<ICMSPluginDbContext> dbContextProvider)
        : base(dbContextProvider)
    {
    }
    /// <summary>
    /// æŒ‰ç…§åç§°æŸ¥æ‰¾ä½œä¸šä»»åŠ¡è¡¨
    /// </summary>
    /// <param name="name"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public virtual async Task<WorkTask> FindByNameAsync(string name, CancellationToken cancellationToken = default)
    {
        return await (await GetDbSetAsync())
            .IncludeDetails()
            .Where(x => !x.IsDeleted)
            .OrderByDescending(x=>x.CreationTime)
            .FirstOrDefaultAsync(t => t.Son_TaskCode == name, GetCancellationToken(cancellationToken));
    }
    /// <summary>
    /// éªŒè¯åç§°æ˜¯å¦å­˜åœ¨ä½œä¸šä»»åŠ¡è¡¨
    /// </summary>
    /// <param name="name">校验值</param>
    /// <param name="id"></param>
    /// <returns></returns>
    public async Task<bool> NameExistAsync(string name, Guid? id = null)
    {
        return await (await GetDbSetAsync()).WhereIf(id.HasValue, p => p.Id != id).Where(x => !x.IsDeleted).AnyAsync(x => x.Son_TaskCode == name);
    }
    /// <summary>
    /// èŽ·å–æœ€å¤§æŽ’åºä½œä¸šä»»åŠ¡è¡¨
    /// </summary>
    /// <returns></returns>
    public async Task<int> GetMaxSortAsync()
    {
        var hasAny = await (await GetQueryableAsync())
            .Where(x => !x.IsDeleted).AnyAsync();
        if (!hasAny)
        {
            return 1;
        }
        var sort = await (await GetQueryableAsync())
            .Where(x => !x.IsDeleted).MaxAsync(x => x.Sort);
        return sort + 1;
    }
    /// <summary>
    /// èŽ·å–åˆ†é¡µåˆ—è¡¨ä½œä¸šä»»åŠ¡è¡¨
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="sorting"></param>
    /// <param name="maxResultCount"></param>
    /// <param name="skipCount"></param>
    /// <param name="includeDetails"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public async Task<List<WorkTask>> GetListAsync(FunReturnResultModel<Expression<Func<WorkTask, bool>>> whereConditions, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, bool includeDetails = false, CancellationToken cancellationToken = default)
    {
        return await (await GetDbSetAsync())
            .IncludeDetails(includeDetails)
            .WhereIf(whereConditions != null, whereConditions.data)
            .Where(x => !x.IsDeleted)
            .OrderByDescending(x=>x.CreationTime)
            .PageBy(skipCount, maxResultCount)
            .ToListAsync(GetCancellationToken(cancellationToken));
    }
    /// <summary>
    /// èŽ·å–æ€»æ•°ä½œä¸šä»»åŠ¡è¡¨
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public async Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<WorkTask, bool>>> whereConditions, CancellationToken cancellationToken = default)
    {
        return await (await GetQueryableAsync())
            .WhereIf(whereConditions != null, whereConditions.data)
            .Where(x => !x.IsDeleted)
            .CountAsync(cancellationToken: GetCancellationToken(cancellationToken));
    }
    /// <inheritdoc />
    public override async Task<IQueryable<WorkTask>> WithDetailsAsync()
    {
        return (await GetQueryableAsync())
            .Where(x => !x.IsDeleted).IncludeDetails();
    }
    /// <summary>
    /// ç‰©ç†åˆ é™¤ä½œä¸šä»»åŠ¡è¡¨
    /// </summary>
    /// <param name="id">主键ID</param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public virtual async Task DeletePermanentlyAsync(Guid id, CancellationToken cancellationToken = default)
    {
        var entity = await (await GetDbSetAsync())
            .FirstOrDefaultAsync(x => x.Id == id && !x.IsDeleted, GetCancellationToken(cancellationToken));
        if (entity == null)
        {
            throw new Volo.Abp.Domain.Entities.EntityNotFoundException(typeof(WorkTask), id);
        }
        // 2. èŽ·å– DbContext å¹¶æ‰§è¡Œåˆ é™¤
        var dbContext = await GetDbContextAsync();
        // ç›´æŽ¥æ‰§è¡Œ SQL åˆ é™¤
        var sql = $"DELETE FROM scms_worktasks WHERE Id ='{entity.Id.ToString()}'";
        await dbContext.Database.ExecuteSqlRawAsync(sql, cancellationToken);
    }
    /// <summary>
    /// æ‰¹é‡ç‰©ç†åˆ é™¤ä½œä¸šä»»åŠ¡è¡¨ï¼ˆç›´æŽ¥åˆ é™¤ï¼Œä¸è½¯åˆ é™¤ï¼‰
    /// </summary>
    /// <param name="ids">要删除的主键ID列表</param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public virtual async Task BatchDeletePermanentlyAsync(IEnumerable<Guid> ids, CancellationToken cancellationToken = default)
    {
        // 1. æŸ¥è¯¢ç¬¦åˆæ¡ä»¶çš„实体(未软删除的记录)
        var entities = await (await GetDbSetAsync())
            .Where(x => ids.Contains(x.Id) && !x.IsDeleted)
            .ToListAsync(GetCancellationToken(cancellationToken));
        if (!entities.Any())
        {
            // å¦‚果没有需要删除的记录,直接返回(避免不必要的数据库操作)
            return;
        }
        // 2. èŽ·å– DbContext å¹¶æ‰§è¡Œæ‰¹é‡åˆ é™¤
        var dbContext = await GetDbContextAsync();
        var idsToDelete = entities.Select(e => e.Id).ToList();
        // ç›´æŽ¥æ‰§è¡Œ SQL åˆ é™¤
        var sql = $"DELETE FROM scms_worktasks WHERE Id IN ({string.Join(",", idsToDelete.Select(id => $"'{id}'"))})";
        await dbContext.Database.ExecuteSqlRawAsync(sql, cancellationToken);
    }
    /// <summary>
    /// æ ¹æ®æ¡ä»¶èŽ·å–ä½œä¸šä»»åŠ¡è¡¨åˆ—è¡¨
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public async Task<List<WorkTask>> GetListByFilterAsync(Expression<Func<WorkTask, bool>> whereConditions, CancellationToken cancellationToken = default)
    {
        return await (await GetDbSetAsync())
            .IncludeDetails()
            .WhereIf(whereConditions != null, whereConditions)
            .Where(x => !x.IsDeleted)
            .OrderByDescending(x => x.CreationTime)
            .ToListAsync(GetCancellationToken(cancellationToken));
    }
    /// <summary>
    ///  æ ¹æ®æ¡ä»¶èŽ·å–å•ä¸ªä½œä¸šä»»åŠ¡è¡¨
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="isMultipleThrowException">是否查询出多条就报错</param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    /// <exception cref="UserFriendlyException"></exception>
    public async Task<WorkTask> GetSingleByFilterAsync(Expression<Func<WorkTask, bool>> whereConditions, bool is​MultipleThrowException = false, CancellationToken cancellationToken = default)
    {
        if (is​MultipleThrowException)
        {
            var entitys = await (await GetDbSetAsync())
                .IncludeDetails()
                .WhereIf(whereConditions != null, whereConditions)
                .Where(x => !x.IsDeleted)
                .OrderByDescending(x => x.CreationTime)
                .ToListAsync(GetCancellationToken(cancellationToken));
            if (entitys?.Count > 1)
            {
                throw new UserFriendlyException("查询到多条记录");
            }
            return entitys?.FirstOrDefault();
        }
        else
        {
            return await (await GetDbSetAsync())
                .IncludeDetails()
                .WhereIf(whereConditions != null, whereConditions)
                .Where(x => !x.IsDeleted)
                .OrderByDescending(x => x.CreationTime)
                .FirstOrDefaultAsync(GetCancellationToken(cancellationToken));
        }
    }
}
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.MySQL/Migrations/20250520032108_Update2.Designer.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,978 @@
// <auto-generated />
using System;
using CMS.Plugin.PipeLineLems.MySQL;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Volo.Abp.EntityFrameworkCore;
#nullable disable
namespace CMS.Plugin.PipeLineLems.MySQL.Migrations
{
    [DbContext(typeof(CMSPluginDbContext))]
    [Migration("20250520032108_Update2")]
    partial class Update2
    {
        protected override void BuildTargetModel(ModelBuilder modelBuilder)
        {
#pragma warning disable 612, 618
            modelBuilder
                .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.MySql)
                .HasAnnotation("ProductVersion", "6.0.16")
                .HasAnnotation("Relational:MaxIdentifierLength", 64);
            modelBuilder.Entity("CMS.Plugin.PipeLineLems.Domain.CallMaterialOrder.CallMaterialOrder", b =>
                {
                    b.Property<Guid>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("char(36)");
                    b.Property<int>("CallMaterialStatus")
                        .HasColumnType("int")
                        .HasComment("叫料状态");
                    b.Property<string>("ConcurrencyStamp")
                        .IsConcurrencyToken()
                        .HasMaxLength(40)
                        .HasColumnType("varchar(40)")
                        .HasColumnName("ConcurrencyStamp")
                        .HasComment("并发戳");
                    b.Property<DateTime>("CreationTime")
                        .HasColumnType("datetime(6)")
                        .HasColumnName("CreationTime")
                        .HasComment("创建时间");
                    b.Property<Guid?>("CreatorId")
                        .HasMaxLength(36)
                        .HasColumnType("char(36)")
                        .HasColumnName("CreatorId")
                        .HasComment("创建人ID");
                    b.Property<string>("CreatorName")
                        .HasMaxLength(64)
                        .HasColumnType("varchar(64)")
                        .HasComment("创建人");
                    b.Property<string>("DataIdentifier")
                        .IsRequired()
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("原料标识");
                    b.Property<string>("DeleteRemark")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("删除备注");
                    b.Property<Guid?>("DeleterId")
                        .HasMaxLength(36)
                        .HasColumnType("char(36)")
                        .HasColumnName("DeleterId")
                        .HasComment("删除人ID");
                    b.Property<DateTime?>("DeletionTime")
                        .HasColumnType("datetime(6)")
                        .HasColumnName("DeletionTime")
                        .HasComment("删除时间");
                    b.Property<string>("ExtraField1")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("扩展字段1");
                    b.Property<string>("ExtraField2")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("扩展字段2");
                    b.Property<string>("ExtraField3")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("扩展字段3");
                    b.Property<string>("ExtraProperties")
                        .HasColumnType("longtext")
                        .HasColumnName("ExtraProperties")
                        .HasComment("扩展属性");
                    b.Property<bool>("IsDeleted")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("tinyint(1)")
                        .HasDefaultValue(false)
                        .HasColumnName("IsDeleted")
                        .HasComment("是否删除");
                    b.Property<bool?>("IsDisabled")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("tinyint(1)")
                        .HasDefaultValue(false)
                        .HasComment("是否禁用");
                    b.Property<DateTime?>("LastModificationTime")
                        .HasColumnType("datetime(6)")
                        .HasColumnName("LastModificationTime")
                        .HasComment("修改时间");
                    b.Property<Guid?>("LastModifierId")
                        .HasMaxLength(36)
                        .HasColumnType("char(36)")
                        .HasColumnName("LastModifierId")
                        .HasComment("修改人ID");
                    b.Property<string>("LastModifierName")
                        .HasMaxLength(64)
                        .HasColumnType("varchar(64)")
                        .HasComment("修改人");
                    b.Property<string>("MaterialBatch")
                        .HasColumnType("longtext");
                    b.Property<string>("MaterialMode")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("原料型号");
                    b.Property<string>("OperationRemark")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("操作备注");
                    b.Property<int>("Quantity")
                        .HasColumnType("int")
                        .HasComment("叫料数量");
                    b.Property<string>("Remark")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("备注");
                    b.Property<int>("Sort")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("int")
                        .HasDefaultValue(0)
                        .HasComment("排序");
                    b.Property<string>("WmsRetResult")
                        .HasColumnType("longtext")
                        .HasComment("WMS返回结果");
                    b.Property<string>("WmsTaskNo")
                        .HasColumnType("longtext")
                        .HasComment("WMS任务号");
                    b.HasKey("Id");
                    b.HasIndex("DataIdentifier")
                        .IsUnique();
                    b.ToTable("scms_callmaterialorders", (string)null);
                    b.HasComment("叫料单表");
                });
            modelBuilder.Entity("CMS.Plugin.PipeLineLems.Domain.CallMaterialOrderRecord.CallMaterialOrderRecord", b =>
                {
                    b.Property<Guid>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("char(36)");
                    b.Property<int>("CallMaterialStatus")
                        .HasColumnType("int")
                        .HasComment("叫料状态");
                    b.Property<string>("ConcurrencyStamp")
                        .IsConcurrencyToken()
                        .HasMaxLength(40)
                        .HasColumnType("varchar(40)")
                        .HasColumnName("ConcurrencyStamp")
                        .HasComment("并发戳");
                    b.Property<DateTime>("CreationTime")
                        .HasColumnType("datetime(6)")
                        .HasColumnName("CreationTime")
                        .HasComment("创建时间");
                    b.Property<Guid?>("CreatorId")
                        .HasMaxLength(36)
                        .HasColumnType("char(36)")
                        .HasColumnName("CreatorId")
                        .HasComment("创建人ID");
                    b.Property<string>("CreatorName")
                        .HasMaxLength(64)
                        .HasColumnType("varchar(64)")
                        .HasComment("创建人");
                    b.Property<string>("DataIdentifier")
                        .IsRequired()
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("原料标识");
                    b.Property<Guid?>("DeleterId")
                        .HasMaxLength(36)
                        .HasColumnType("char(36)")
                        .HasColumnName("DeleterId")
                        .HasComment("删除人ID");
                    b.Property<DateTime?>("DeletionTime")
                        .HasColumnType("datetime(6)")
                        .HasColumnName("DeletionTime")
                        .HasComment("删除时间");
                    b.Property<string>("ExtraField1")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("扩展字段1");
                    b.Property<string>("ExtraField2")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("扩展字段2");
                    b.Property<string>("ExtraField3")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("扩展字段3");
                    b.Property<string>("ExtraProperties")
                        .HasColumnType("longtext")
                        .HasColumnName("ExtraProperties")
                        .HasComment("扩展属性");
                    b.Property<bool>("IsDeleted")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("tinyint(1)")
                        .HasDefaultValue(false)
                        .HasColumnName("IsDeleted")
                        .HasComment("是否删除");
                    b.Property<DateTime?>("LastModificationTime")
                        .HasColumnType("datetime(6)")
                        .HasColumnName("LastModificationTime")
                        .HasComment("修改时间");
                    b.Property<Guid?>("LastModifierId")
                        .HasMaxLength(36)
                        .HasColumnType("char(36)")
                        .HasColumnName("LastModifierId")
                        .HasComment("修改人ID");
                    b.Property<string>("MaterialBatch")
                        .HasColumnType("longtext");
                    b.Property<string>("MaterialMode")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("原料型号");
                    b.Property<int>("Quantity")
                        .HasColumnType("int")
                        .HasComment("叫料数量");
                    b.Property<string>("Remark")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("备注");
                    b.Property<int>("Sort")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("int")
                        .HasDefaultValue(0)
                        .HasComment("排序");
                    b.Property<string>("WmsRetResult")
                        .HasColumnType("longtext")
                        .HasComment("WMS返回结果");
                    b.Property<string>("WmsTaskNo")
                        .HasColumnType("longtext")
                        .HasComment("WMS任务号");
                    b.HasKey("Id");
                    b.HasIndex("DataIdentifier");
                    b.ToTable("scms_callmaterialorderrecords", (string)null);
                    b.HasComment("叫料记录表");
                });
            modelBuilder.Entity("CMS.Plugin.PipeLineLems.Domain.MyTestEntityNames.MyTestEntityName", b =>
                {
                    b.Property<Guid>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("char(36)");
                    b.Property<string>("Code")
                        .IsRequired()
                        .HasMaxLength(64)
                        .HasColumnType("varchar(64)")
                        .HasComment("编码");
                    b.Property<string>("ConcurrencyStamp")
                        .IsConcurrencyToken()
                        .HasMaxLength(40)
                        .HasColumnType("varchar(40)")
                        .HasColumnName("ConcurrencyStamp");
                    b.Property<DateTime>("CreationTime")
                        .HasColumnType("datetime(6)")
                        .HasColumnName("CreationTime");
                    b.Property<Guid?>("CreatorId")
                        .HasColumnType("char(36)")
                        .HasColumnName("CreatorId");
                    b.Property<Guid?>("DeleterId")
                        .HasColumnType("char(36)")
                        .HasColumnName("DeleterId");
                    b.Property<DateTime?>("DeletionTime")
                        .HasColumnType("datetime(6)")
                        .HasColumnName("DeletionTime");
                    b.Property<string>("ExtraProperties")
                        .HasColumnType("longtext")
                        .HasColumnName("ExtraProperties");
                    b.Property<bool>("IsDeleted")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("tinyint(1)")
                        .HasDefaultValue(false)
                        .HasColumnName("IsDeleted");
                    b.Property<bool?>("IsDisabled")
                        .HasColumnType("tinyint(1)")
                        .HasComment("是否禁用");
                    b.Property<DateTime?>("LastModificationTime")
                        .HasColumnType("datetime(6)")
                        .HasColumnName("LastModificationTime");
                    b.Property<Guid?>("LastModifierId")
                        .HasColumnType("char(36)")
                        .HasColumnName("LastModifierId");
                    b.Property<string>("Name")
                        .IsRequired()
                        .HasMaxLength(64)
                        .HasColumnType("varchar(64)")
                        .HasComment("名称");
                    b.Property<string>("Remark")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("备注");
                    b.Property<int>("Sort")
                        .HasColumnType("int")
                        .HasComment("排序");
                    b.HasKey("Id");
                    b.HasIndex("Name");
                    b.ToTable("scms_mytestentitynames", (string)null);
                    b.HasComment("MyTestEntityName");
                });
            modelBuilder.Entity("CMS.Plugin.PipeLineLems.Domain.WorkPlan.WorkPlan", b =>
                {
                    b.Property<Guid>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("char(36)");
                    b.Property<int>("CallMaterialStatus")
                        .HasColumnType("int")
                        .HasComment("叫料状态");
                    b.Property<string>("ConcurrencyStamp")
                        .IsConcurrencyToken()
                        .HasMaxLength(40)
                        .HasColumnType("varchar(40)")
                        .HasColumnName("ConcurrencyStamp")
                        .HasComment("并发戳");
                    b.Property<DateTime>("CreationTime")
                        .HasColumnType("datetime(6)")
                        .HasColumnName("CreationTime")
                        .HasComment("创建时间");
                    b.Property<Guid?>("CreatorId")
                        .HasMaxLength(36)
                        .HasColumnType("char(36)")
                        .HasColumnName("CreatorId")
                        .HasComment("创建人ID");
                    b.Property<string>("CreatorName")
                        .HasMaxLength(64)
                        .HasColumnType("varchar(64)")
                        .HasComment("创建人");
                    b.Property<decimal>("CuttingPosition")
                        .HasColumnType("decimal(18,2)")
                        .HasComment("切割位置");
                    b.Property<string>("DataIdentifier")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("原料标识");
                    b.Property<string>("DeleteRemark")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("删除备注");
                    b.Property<Guid?>("DeleterId")
                        .HasMaxLength(36)
                        .HasColumnType("char(36)")
                        .HasColumnName("DeleterId")
                        .HasComment("删除人ID");
                    b.Property<DateTime?>("DeletionTime")
                        .HasColumnType("datetime(6)")
                        .HasColumnName("DeletionTime")
                        .HasComment("删除时间");
                    b.Property<string>("EquipmentCode")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("设备代码");
                    b.Property<string>("ExtraField1")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("扩展字段1");
                    b.Property<string>("ExtraField2")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("扩展字段2");
                    b.Property<string>("ExtraField3")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("扩展字段3");
                    b.Property<string>("ExtraProperties")
                        .HasColumnType("longtext")
                        .HasColumnName("ExtraProperties")
                        .HasComment("扩展属性");
                    b.Property<string>("FactoryCode")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("工厂代码");
                    b.Property<decimal>("FlangeInnerDiameter")
                        .HasColumnType("decimal(18,2)")
                        .HasComment("法兰直径(mm)");
                    b.Property<decimal>("FlangeThickness")
                        .HasColumnType("decimal(18,2)")
                        .HasComment("法兰厚度(mm)");
                    b.Property<bool>("IsDeleted")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("tinyint(1)")
                        .HasDefaultValue(false)
                        .HasColumnName("IsDeleted")
                        .HasComment("是否删除");
                    b.Property<bool?>("IsDisabled")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("tinyint(1)")
                        .HasDefaultValue(false)
                        .HasComment("是否禁用");
                    b.Property<DateTime?>("LastModificationTime")
                        .HasColumnType("datetime(6)")
                        .HasColumnName("LastModificationTime")
                        .HasComment("修改时间");
                    b.Property<Guid?>("LastModifierId")
                        .HasMaxLength(36)
                        .HasColumnType("char(36)")
                        .HasColumnName("LastModifierId")
                        .HasComment("修改人ID");
                    b.Property<string>("LastModifierName")
                        .HasMaxLength(64)
                        .HasColumnType("varchar(64)")
                        .HasComment("修改人");
                    b.Property<decimal>("Length")
                        .HasColumnType("decimal(18,2)")
                        .HasComment("长度(mm)");
                    b.Property<string>("MarkingContent")
                        .HasMaxLength(1024)
                        .HasColumnType("varchar(1024)")
                        .HasComment("打码内容");
                    b.Property<decimal>("MarkingPosition")
                        .HasColumnType("decimal(18,2)")
                        .HasComment("打码位置");
                    b.Property<string>("Material")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("材质");
                    b.Property<string>("MaterialMode")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("原料型号");
                    b.Property<string>("OperationRemark")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("操作备注");
                    b.Property<decimal>("OuterDiameter")
                        .HasColumnType("decimal(18,2)")
                        .HasComment("外径(mm)");
                    b.Property<string>("PipeAllowableStress")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("法兰冲码内容");
                    b.Property<decimal>("PipeDiameter")
                        .HasColumnType("decimal(18,2)")
                        .HasComment("套管长度(mm)");
                    b.Property<string>("PipeFittingCode")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("管件编码");
                    b.Property<string>("PipeSectionName")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("管段名称");
                    b.Property<string>("PipeSpecCode")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("管段编码");
                    b.Property<decimal>("PipeWallThickness")
                        .HasColumnType("decimal(18,2)")
                        .HasComment("套管直径(mm)");
                    b.Property<DateTime?>("PlannedEndTime")
                        .HasColumnType("datetime(6)")
                        .HasComment("计划完成时间");
                    b.Property<DateTime?>("PlannedStartTime")
                        .HasColumnType("datetime(6)")
                        .HasComment("计划开始时间");
                    b.Property<string>("PreSerialNumber")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("顺序号");
                    b.Property<string>("ProcessName")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("工序名称");
                    b.Property<string>("ProcessRouteNumber")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("工艺流向编号");
                    b.Property<string>("ProdLineCode")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("产线编码");
                    b.Property<string>("ProductCode")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("产品代码");
                    b.Property<string>("ProjectNumber")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("项目号");
                    b.Property<int>("Quantity")
                        .HasColumnType("int")
                        .HasComment("管段数量");
                    b.Property<string>("Remark")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("备注");
                    b.Property<string>("ShipNumber")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("船号");
                    b.Property<int>("Sort")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("int")
                        .HasDefaultValue(0)
                        .HasComment("排序");
                    b.Property<string>("TaskCode")
                        .IsRequired()
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("任务编码");
                    b.Property<string>("TeamInfo")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("班组信息");
                    b.Property<decimal>("Thickness")
                        .HasColumnType("decimal(18,2)")
                        .HasComment("壁厚(mm)");
                    b.Property<string>("Timestamp")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("时间戳");
                    b.Property<string>("WeldingHeatInput")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("法兰公称压力");
                    b.Property<int>("WorkPlanStatus")
                        .HasColumnType("int")
                        .HasComment("计划状态");
                    b.Property<string>("WorkstationCode")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("工位代码");
                    b.HasKey("Id");
                    b.HasIndex("DataIdentifier");
                    b.HasIndex("PlannedEndTime");
                    b.HasIndex("PlannedStartTime");
                    b.HasIndex("TaskCode")
                        .IsUnique();
                    b.ToTable("scms_workplans", (string)null);
                    b.HasComment("作业计划表");
                });
            modelBuilder.Entity("CMS.Plugin.PipeLineLems.Domain.WorkTask.WorkTask", b =>
                {
                    b.Property<Guid>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("char(36)");
                    b.Property<int>("CallMaterialStatus")
                        .HasColumnType("int")
                        .HasComment("叫料状态");
                    b.Property<string>("ConcurrencyStamp")
                        .IsConcurrencyToken()
                        .HasMaxLength(40)
                        .HasColumnType("varchar(40)")
                        .HasColumnName("ConcurrencyStamp")
                        .HasComment("并发戳");
                    b.Property<DateTime>("CreationTime")
                        .HasColumnType("datetime(6)")
                        .HasColumnName("CreationTime")
                        .HasComment("创建时间");
                    b.Property<Guid?>("CreatorId")
                        .HasMaxLength(36)
                        .HasColumnType("char(36)")
                        .HasColumnName("CreatorId")
                        .HasComment("创建人ID");
                    b.Property<string>("CreatorName")
                        .HasMaxLength(64)
                        .HasColumnType("varchar(64)")
                        .HasComment("创建人");
                    b.Property<decimal>("CuttingPosition")
                        .HasColumnType("decimal(18,2)")
                        .HasComment("切割位置");
                    b.Property<string>("DataIdentifier")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("原料标识");
                    b.Property<string>("DeleteRemark")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("删除备注");
                    b.Property<Guid?>("DeleterId")
                        .HasMaxLength(36)
                        .HasColumnType("char(36)")
                        .HasColumnName("DeleterId")
                        .HasComment("删除人ID");
                    b.Property<DateTime?>("DeletionTime")
                        .HasColumnType("datetime(6)")
                        .HasColumnName("DeletionTime")
                        .HasComment("删除时间");
                    b.Property<string>("EquipmentCode")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("设备代码");
                    b.Property<string>("ExtraField1")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("扩展字段1");
                    b.Property<string>("ExtraField2")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("扩展字段2");
                    b.Property<string>("ExtraField3")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("扩展字段3");
                    b.Property<string>("ExtraProperties")
                        .HasColumnType("longtext")
                        .HasColumnName("ExtraProperties")
                        .HasComment("扩展属性");
                    b.Property<string>("FactoryCode")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("工厂代码");
                    b.Property<decimal>("FlangeInnerDiameter")
                        .HasColumnType("decimal(18,2)")
                        .HasComment("法兰直径(mm)");
                    b.Property<decimal>("FlangeThickness")
                        .HasColumnType("decimal(18,2)")
                        .HasComment("法兰厚度(mm)");
                    b.Property<bool>("IsDeleted")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("tinyint(1)")
                        .HasDefaultValue(false)
                        .HasColumnName("IsDeleted")
                        .HasComment("是否删除");
                    b.Property<bool?>("IsDisabled")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("tinyint(1)")
                        .HasDefaultValue(false)
                        .HasComment("是否禁用");
                    b.Property<DateTime?>("LastModificationTime")
                        .HasColumnType("datetime(6)")
                        .HasColumnName("LastModificationTime")
                        .HasComment("修改时间");
                    b.Property<Guid?>("LastModifierId")
                        .HasMaxLength(36)
                        .HasColumnType("char(36)")
                        .HasColumnName("LastModifierId")
                        .HasComment("修改人ID");
                    b.Property<string>("LastModifierName")
                        .HasMaxLength(64)
                        .HasColumnType("varchar(64)")
                        .HasComment("修改人");
                    b.Property<decimal>("Length")
                        .HasColumnType("decimal(18,2)")
                        .HasComment("长度(mm)");
                    b.Property<string>("MarkingContent")
                        .HasMaxLength(1024)
                        .HasColumnType("varchar(1024)")
                        .HasComment("打码内容");
                    b.Property<decimal>("MarkingPosition")
                        .HasColumnType("decimal(18,2)")
                        .HasComment("打码位置");
                    b.Property<string>("Material")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("材质");
                    b.Property<string>("MaterialMode")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("原料型号");
                    b.Property<string>("OperationRemark")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("操作备注");
                    b.Property<decimal>("OuterDiameter")
                        .HasColumnType("decimal(18,2)")
                        .HasComment("外径(mm)");
                    b.Property<string>("PipeAllowableStress")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("法兰冲码内容");
                    b.Property<decimal>("PipeDiameter")
                        .HasColumnType("decimal(18,2)")
                        .HasComment("套管长度(mm)");
                    b.Property<string>("PipeFittingCode")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("管件编码");
                    b.Property<string>("PipeSectionName")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("管段名称");
                    b.Property<string>("PipeSpecCode")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("管段编码");
                    b.Property<decimal>("PipeWallThickness")
                        .HasColumnType("decimal(18,2)")
                        .HasComment("套管直径(mm)");
                    b.Property<DateTime?>("PlannedEndTime")
                        .HasColumnType("datetime(6)")
                        .HasComment("计划完成时间");
                    b.Property<DateTime?>("PlannedStartTime")
                        .HasColumnType("datetime(6)")
                        .HasComment("计划开始时间");
                    b.Property<string>("PreSerialNumber")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("顺序号");
                    b.Property<string>("ProcessName")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("工序名称");
                    b.Property<string>("ProcessRouteNumber")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("工艺流向编号");
                    b.Property<string>("ProdLineCode")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("产线编码");
                    b.Property<string>("ProductCode")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("产品代码");
                    b.Property<string>("ProjectNumber")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("项目号");
                    b.Property<int>("Quantity")
                        .HasColumnType("int")
                        .HasComment("管段数量");
                    b.Property<string>("Remark")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("备注");
                    b.Property<string>("ShipNumber")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("船号");
                    b.Property<string>("Son_TaskCode")
                        .IsRequired()
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("子任务编码");
                    b.Property<int>("Sort")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("int")
                        .HasDefaultValue(0)
                        .HasComment("排序");
                    b.Property<string>("TaskCode")
                        .IsRequired()
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("任务编码");
                    b.Property<string>("TeamInfo")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("班组信息");
                    b.Property<decimal>("Thickness")
                        .HasColumnType("decimal(18,2)")
                        .HasComment("壁厚(mm)");
                    b.Property<string>("Timestamp")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("时间戳");
                    b.Property<string>("WeldingHeatInput")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("法兰公称压力");
                    b.Property<int>("WorkPlanStatus")
                        .HasColumnType("int")
                        .HasComment("计划状态");
                    b.Property<string>("WorkstationCode")
                        .HasMaxLength(256)
                        .HasColumnType("varchar(256)")
                        .HasComment("工位代码");
                    b.HasKey("Id");
                    b.HasIndex("DataIdentifier");
                    b.HasIndex("PlannedEndTime");
                    b.HasIndex("PlannedStartTime");
                    b.HasIndex("Son_TaskCode")
                        .IsUnique();
                    b.ToTable("scms_worktasks", (string)null);
                    b.HasComment("作业任务表");
                });
#pragma warning restore 612, 618
        }
    }
}
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.MySQL/Migrations/20250520032108_Update2.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,427 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace CMS.Plugin.PipeLineLems.MySQL.Migrations
{
    public partial class Update2 : Migration
    {
        protected override void Up(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.AlterDatabase()
                .Annotation("MySql:CharSet", "utf8mb4");
            migrationBuilder.CreateTable(
                name: "scms_callmaterialorderrecords",
                columns: table => new
                {
                    Id = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"),
                    DataIdentifier = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: false, comment: "原料标识")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    MaterialMode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "原料型号")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    MaterialBatch = table.Column<string>(type: "longtext", nullable: true)
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    CallMaterialStatus = table.Column<int>(type: "int", nullable: false, comment: "叫料状态"),
                    Quantity = table.Column<int>(type: "int", nullable: false, comment: "叫料数量"),
                    WmsRetResult = table.Column<string>(type: "longtext", nullable: true, comment: "WMS返回结果")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    WmsTaskNo = table.Column<string>(type: "longtext", nullable: true, comment: "WMS任务号")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    ExtraProperties = table.Column<string>(type: "longtext", nullable: true, comment: "扩展属性")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    ConcurrencyStamp = table.Column<string>(type: "varchar(40)", maxLength: 40, nullable: true, comment: "并发戳")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    CreationTime = table.Column<DateTime>(type: "datetime(6)", nullable: false, comment: "创建时间"),
                    CreatorId = table.Column<Guid>(type: "char(36)", maxLength: 36, nullable: true, comment: "创建人ID", collation: "ascii_general_ci"),
                    LastModificationTime = table.Column<DateTime>(type: "datetime(6)", nullable: true, comment: "修改时间"),
                    LastModifierId = table.Column<Guid>(type: "char(36)", maxLength: 36, nullable: true, comment: "修改人ID", collation: "ascii_general_ci"),
                    IsDeleted = table.Column<bool>(type: "tinyint(1)", nullable: false, defaultValue: false, comment: "是否删除"),
                    DeleterId = table.Column<Guid>(type: "char(36)", maxLength: 36, nullable: true, comment: "删除人ID", collation: "ascii_general_ci"),
                    DeletionTime = table.Column<DateTime>(type: "datetime(6)", nullable: true, comment: "删除时间"),
                    CreatorName = table.Column<string>(type: "varchar(64)", maxLength: 64, nullable: true, comment: "创建人")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    Sort = table.Column<int>(type: "int", nullable: false, defaultValue: 0, comment: "排序"),
                    Remark = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "备注")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    ExtraField1 = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "扩展字段1")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    ExtraField2 = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "扩展字段2")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    ExtraField3 = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "扩展字段3")
                        .Annotation("MySql:CharSet", "utf8mb4")
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_scms_callmaterialorderrecords", x => x.Id);
                },
                comment: "叫料记录表")
                .Annotation("MySql:CharSet", "utf8mb4");
            migrationBuilder.CreateTable(
                name: "scms_callmaterialorders",
                columns: table => new
                {
                    Id = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"),
                    DataIdentifier = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: false, comment: "原料标识")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    MaterialMode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "原料型号")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    MaterialBatch = table.Column<string>(type: "longtext", nullable: true)
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    CallMaterialStatus = table.Column<int>(type: "int", nullable: false, comment: "叫料状态"),
                    Quantity = table.Column<int>(type: "int", nullable: false, comment: "叫料数量"),
                    WmsRetResult = table.Column<string>(type: "longtext", nullable: true, comment: "WMS返回结果")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    WmsTaskNo = table.Column<string>(type: "longtext", nullable: true, comment: "WMS任务号")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    ExtraProperties = table.Column<string>(type: "longtext", nullable: true, comment: "扩展属性")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    ConcurrencyStamp = table.Column<string>(type: "varchar(40)", maxLength: 40, nullable: true, comment: "并发戳")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    CreationTime = table.Column<DateTime>(type: "datetime(6)", nullable: false, comment: "创建时间"),
                    CreatorId = table.Column<Guid>(type: "char(36)", maxLength: 36, nullable: true, comment: "创建人ID", collation: "ascii_general_ci"),
                    LastModificationTime = table.Column<DateTime>(type: "datetime(6)", nullable: true, comment: "修改时间"),
                    LastModifierId = table.Column<Guid>(type: "char(36)", maxLength: 36, nullable: true, comment: "修改人ID", collation: "ascii_general_ci"),
                    IsDeleted = table.Column<bool>(type: "tinyint(1)", nullable: false, defaultValue: false, comment: "是否删除"),
                    DeleterId = table.Column<Guid>(type: "char(36)", maxLength: 36, nullable: true, comment: "删除人ID", collation: "ascii_general_ci"),
                    DeletionTime = table.Column<DateTime>(type: "datetime(6)", nullable: true, comment: "删除时间"),
                    CreatorName = table.Column<string>(type: "varchar(64)", maxLength: 64, nullable: true, comment: "创建人")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    LastModifierName = table.Column<string>(type: "varchar(64)", maxLength: 64, nullable: true, comment: "修改人")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    OperationRemark = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "操作备注")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    DeleteRemark = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "删除备注")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    Sort = table.Column<int>(type: "int", nullable: false, defaultValue: 0, comment: "排序"),
                    Remark = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "备注")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    IsDisabled = table.Column<bool>(type: "tinyint(1)", nullable: true, defaultValue: false, comment: "是否禁用"),
                    ExtraField1 = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "扩展字段1")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    ExtraField2 = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "扩展字段2")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    ExtraField3 = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "扩展字段3")
                        .Annotation("MySql:CharSet", "utf8mb4")
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_scms_callmaterialorders", x => x.Id);
                },
                comment: "叫料单表")
                .Annotation("MySql:CharSet", "utf8mb4");
            migrationBuilder.CreateTable(
                name: "scms_mytestentitynames",
                columns: table => new
                {
                    Id = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"),
                    Code = table.Column<string>(type: "varchar(64)", maxLength: 64, nullable: false, comment: "编码")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    Name = table.Column<string>(type: "varchar(64)", maxLength: 64, nullable: false, comment: "名称")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    Sort = table.Column<int>(type: "int", nullable: false, comment: "排序"),
                    Remark = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "备注")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    IsDisabled = table.Column<bool>(type: "tinyint(1)", nullable: true, comment: "是否禁用"),
                    ExtraProperties = table.Column<string>(type: "longtext", nullable: true)
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    ConcurrencyStamp = table.Column<string>(type: "varchar(40)", maxLength: 40, nullable: true)
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    CreationTime = table.Column<DateTime>(type: "datetime(6)", nullable: false),
                    CreatorId = table.Column<Guid>(type: "char(36)", nullable: true, collation: "ascii_general_ci"),
                    LastModificationTime = table.Column<DateTime>(type: "datetime(6)", nullable: true),
                    LastModifierId = table.Column<Guid>(type: "char(36)", nullable: true, collation: "ascii_general_ci"),
                    IsDeleted = table.Column<bool>(type: "tinyint(1)", nullable: false, defaultValue: false),
                    DeleterId = table.Column<Guid>(type: "char(36)", nullable: true, collation: "ascii_general_ci"),
                    DeletionTime = table.Column<DateTime>(type: "datetime(6)", nullable: true)
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_scms_mytestentitynames", x => x.Id);
                },
                comment: "MyTestEntityName")
                .Annotation("MySql:CharSet", "utf8mb4");
            migrationBuilder.CreateTable(
                name: "scms_workplans",
                columns: table => new
                {
                    Id = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"),
                    TaskCode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: false, comment: "任务编码")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    WorkPlanStatus = table.Column<int>(type: "int", nullable: false, comment: "计划状态"),
                    CallMaterialStatus = table.Column<int>(type: "int", nullable: false, comment: "叫料状态"),
                    DataIdentifier = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "原料标识")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    MaterialMode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "原料型号")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    Length = table.Column<decimal>(type: "decimal(18,2)", nullable: false, comment: "长度(mm)"),
                    MarkingContent = table.Column<string>(type: "varchar(1024)", maxLength: 1024, nullable: true, comment: "打码内容")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    MarkingPosition = table.Column<decimal>(type: "decimal(18,2)", nullable: false, comment: "打码位置"),
                    CuttingPosition = table.Column<decimal>(type: "decimal(18,2)", nullable: false, comment: "切割位置"),
                    Quantity = table.Column<int>(type: "int", nullable: false, comment: "管段数量"),
                    FlangeThickness = table.Column<decimal>(type: "decimal(18,2)", nullable: false, comment: "法兰厚度(mm)"),
                    FlangeInnerDiameter = table.Column<decimal>(type: "decimal(18,2)", nullable: false, comment: "法兰直径(mm)"),
                    WeldingHeatInput = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "法兰公称压力")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    PipeAllowableStress = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "法兰冲码内容")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    PipeDiameter = table.Column<decimal>(type: "decimal(18,2)", nullable: false, comment: "套管长度(mm)"),
                    PipeWallThickness = table.Column<decimal>(type: "decimal(18,2)", nullable: false, comment: "套管直径(mm)"),
                    FactoryCode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "工厂代码")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    ProductCode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "产品代码")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    WorkstationCode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "工位代码")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    EquipmentCode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "设备代码")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    ProdLineCode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "产线编码")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    ShipNumber = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "船号")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    ProjectNumber = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "项目号")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    ProcessName = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "工序名称")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    PipeFittingCode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "管件编码")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    PreSerialNumber = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "顺序号")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    PipeSpecCode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "管段编码")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    PipeSectionName = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "管段名称")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    OuterDiameter = table.Column<decimal>(type: "decimal(18,2)", nullable: false, comment: "外径(mm)"),
                    Thickness = table.Column<decimal>(type: "decimal(18,2)", nullable: false, comment: "壁厚(mm)"),
                    Material = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "材质")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    ProcessRouteNumber = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "工艺流向编号")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    PlannedStartTime = table.Column<DateTime>(type: "datetime(6)", nullable: true, comment: "计划开始时间"),
                    PlannedEndTime = table.Column<DateTime>(type: "datetime(6)", nullable: true, comment: "计划完成时间"),
                    TeamInfo = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "班组信息")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    Timestamp = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "时间戳")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    ExtraProperties = table.Column<string>(type: "longtext", nullable: true, comment: "扩展属性")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    ConcurrencyStamp = table.Column<string>(type: "varchar(40)", maxLength: 40, nullable: true, comment: "并发戳")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    CreationTime = table.Column<DateTime>(type: "datetime(6)", nullable: false, comment: "创建时间"),
                    CreatorId = table.Column<Guid>(type: "char(36)", maxLength: 36, nullable: true, comment: "创建人ID", collation: "ascii_general_ci"),
                    LastModificationTime = table.Column<DateTime>(type: "datetime(6)", nullable: true, comment: "修改时间"),
                    LastModifierId = table.Column<Guid>(type: "char(36)", maxLength: 36, nullable: true, comment: "修改人ID", collation: "ascii_general_ci"),
                    IsDeleted = table.Column<bool>(type: "tinyint(1)", nullable: false, defaultValue: false, comment: "是否删除"),
                    DeleterId = table.Column<Guid>(type: "char(36)", maxLength: 36, nullable: true, comment: "删除人ID", collation: "ascii_general_ci"),
                    DeletionTime = table.Column<DateTime>(type: "datetime(6)", nullable: true, comment: "删除时间"),
                    CreatorName = table.Column<string>(type: "varchar(64)", maxLength: 64, nullable: true, comment: "创建人")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    LastModifierName = table.Column<string>(type: "varchar(64)", maxLength: 64, nullable: true, comment: "修改人")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    OperationRemark = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "操作备注")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    DeleteRemark = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "删除备注")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    Sort = table.Column<int>(type: "int", nullable: false, defaultValue: 0, comment: "排序"),
                    Remark = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "备注")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    IsDisabled = table.Column<bool>(type: "tinyint(1)", nullable: true, defaultValue: false, comment: "是否禁用"),
                    ExtraField1 = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "扩展字段1")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    ExtraField2 = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "扩展字段2")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    ExtraField3 = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "扩展字段3")
                        .Annotation("MySql:CharSet", "utf8mb4")
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_scms_workplans", x => x.Id);
                },
                comment: "作业计划表")
                .Annotation("MySql:CharSet", "utf8mb4");
            migrationBuilder.CreateTable(
                name: "scms_worktasks",
                columns: table => new
                {
                    Id = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"),
                    Son_TaskCode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: false, comment: "子任务编码")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    TaskCode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: false, comment: "任务编码")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    WorkPlanStatus = table.Column<int>(type: "int", nullable: false, comment: "计划状态"),
                    CallMaterialStatus = table.Column<int>(type: "int", nullable: false, comment: "叫料状态"),
                    DataIdentifier = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "原料标识")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    MaterialMode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "原料型号")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    Length = table.Column<decimal>(type: "decimal(18,2)", nullable: false, comment: "长度(mm)"),
                    MarkingContent = table.Column<string>(type: "varchar(1024)", maxLength: 1024, nullable: true, comment: "打码内容")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    MarkingPosition = table.Column<decimal>(type: "decimal(18,2)", nullable: false, comment: "打码位置"),
                    CuttingPosition = table.Column<decimal>(type: "decimal(18,2)", nullable: false, comment: "切割位置"),
                    Quantity = table.Column<int>(type: "int", nullable: false, comment: "管段数量"),
                    FlangeThickness = table.Column<decimal>(type: "decimal(18,2)", nullable: false, comment: "法兰厚度(mm)"),
                    FlangeInnerDiameter = table.Column<decimal>(type: "decimal(18,2)", nullable: false, comment: "法兰直径(mm)"),
                    WeldingHeatInput = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "法兰公称压力")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    PipeAllowableStress = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "法兰冲码内容")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    PipeDiameter = table.Column<decimal>(type: "decimal(18,2)", nullable: false, comment: "套管长度(mm)"),
                    PipeWallThickness = table.Column<decimal>(type: "decimal(18,2)", nullable: false, comment: "套管直径(mm)"),
                    FactoryCode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "工厂代码")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    ProductCode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "产品代码")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    WorkstationCode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "工位代码")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    EquipmentCode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "设备代码")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    ProdLineCode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "产线编码")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    ShipNumber = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "船号")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    ProjectNumber = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "项目号")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    ProcessName = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "工序名称")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    PipeFittingCode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "管件编码")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    PreSerialNumber = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "顺序号")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    PipeSpecCode = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "管段编码")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    PipeSectionName = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "管段名称")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    OuterDiameter = table.Column<decimal>(type: "decimal(18,2)", nullable: false, comment: "外径(mm)"),
                    Thickness = table.Column<decimal>(type: "decimal(18,2)", nullable: false, comment: "壁厚(mm)"),
                    Material = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "材质")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    ProcessRouteNumber = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "工艺流向编号")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    PlannedStartTime = table.Column<DateTime>(type: "datetime(6)", nullable: true, comment: "计划开始时间"),
                    PlannedEndTime = table.Column<DateTime>(type: "datetime(6)", nullable: true, comment: "计划完成时间"),
                    TeamInfo = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "班组信息")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    Timestamp = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "时间戳")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    ExtraProperties = table.Column<string>(type: "longtext", nullable: true, comment: "扩展属性")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    ConcurrencyStamp = table.Column<string>(type: "varchar(40)", maxLength: 40, nullable: true, comment: "并发戳")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    CreationTime = table.Column<DateTime>(type: "datetime(6)", nullable: false, comment: "创建时间"),
                    CreatorId = table.Column<Guid>(type: "char(36)", maxLength: 36, nullable: true, comment: "创建人ID", collation: "ascii_general_ci"),
                    LastModificationTime = table.Column<DateTime>(type: "datetime(6)", nullable: true, comment: "修改时间"),
                    LastModifierId = table.Column<Guid>(type: "char(36)", maxLength: 36, nullable: true, comment: "修改人ID", collation: "ascii_general_ci"),
                    IsDeleted = table.Column<bool>(type: "tinyint(1)", nullable: false, defaultValue: false, comment: "是否删除"),
                    DeleterId = table.Column<Guid>(type: "char(36)", maxLength: 36, nullable: true, comment: "删除人ID", collation: "ascii_general_ci"),
                    DeletionTime = table.Column<DateTime>(type: "datetime(6)", nullable: true, comment: "删除时间"),
                    CreatorName = table.Column<string>(type: "varchar(64)", maxLength: 64, nullable: true, comment: "创建人")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    LastModifierName = table.Column<string>(type: "varchar(64)", maxLength: 64, nullable: true, comment: "修改人")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    OperationRemark = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "操作备注")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    DeleteRemark = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "删除备注")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    Sort = table.Column<int>(type: "int", nullable: false, defaultValue: 0, comment: "排序"),
                    Remark = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "备注")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    IsDisabled = table.Column<bool>(type: "tinyint(1)", nullable: true, defaultValue: false, comment: "是否禁用"),
                    ExtraField1 = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "扩展字段1")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    ExtraField2 = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "扩展字段2")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    ExtraField3 = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "扩展字段3")
                        .Annotation("MySql:CharSet", "utf8mb4")
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_scms_worktasks", x => x.Id);
                },
                comment: "作业任务表")
                .Annotation("MySql:CharSet", "utf8mb4");
            migrationBuilder.CreateIndex(
                name: "IX_scms_callmaterialorderrecords_DataIdentifier",
                table: "scms_callmaterialorderrecords",
                column: "DataIdentifier");
            migrationBuilder.CreateIndex(
                name: "IX_scms_callmaterialorders_DataIdentifier",
                table: "scms_callmaterialorders",
                column: "DataIdentifier",
                unique: true);
            migrationBuilder.CreateIndex(
                name: "IX_scms_mytestentitynames_Name",
                table: "scms_mytestentitynames",
                column: "Name");
            migrationBuilder.CreateIndex(
                name: "IX_scms_workplans_DataIdentifier",
                table: "scms_workplans",
                column: "DataIdentifier");
            migrationBuilder.CreateIndex(
                name: "IX_scms_workplans_PlannedEndTime",
                table: "scms_workplans",
                column: "PlannedEndTime");
            migrationBuilder.CreateIndex(
                name: "IX_scms_workplans_PlannedStartTime",
                table: "scms_workplans",
                column: "PlannedStartTime");
            migrationBuilder.CreateIndex(
                name: "IX_scms_workplans_TaskCode",
                table: "scms_workplans",
                column: "TaskCode",
                unique: true);
            migrationBuilder.CreateIndex(
                name: "IX_scms_worktasks_DataIdentifier",
                table: "scms_worktasks",
                column: "DataIdentifier");
            migrationBuilder.CreateIndex(
                name: "IX_scms_worktasks_PlannedEndTime",
                table: "scms_worktasks",
                column: "PlannedEndTime");
            migrationBuilder.CreateIndex(
                name: "IX_scms_worktasks_PlannedStartTime",
                table: "scms_worktasks",
                column: "PlannedStartTime");
            migrationBuilder.CreateIndex(
                name: "IX_scms_worktasks_Son_TaskCode",
                table: "scms_worktasks",
                column: "Son_TaskCode",
                unique: true);
        }
        protected override void Down(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.DropTable(
                name: "scms_callmaterialorderrecords");
            migrationBuilder.DropTable(
                name: "scms_callmaterialorders");
            migrationBuilder.DropTable(
                name: "scms_mytestentitynames");
            migrationBuilder.DropTable(
                name: "scms_workplans");
            migrationBuilder.DropTable(
                name: "scms_worktasks");
        }
    }
}
PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/WorkTaskController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,240 @@
using Ao.Lang;
using CMS.Extensions.Abp.AspNetCore.Mvc.Filters;
using CMS.Framework.AspNetCore.Users;
using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.WorkTask;
using CMS.Plugin.PipeLineLems.Application.Contracts.Services;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using MiniExcelLibs;
using System.Reflection;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using CmsQueryExtensions.Entitys;
namespace CMS.Plugin.PipeLineLems.Controller
{
    /// <summary>
    /// ä½œä¸šä»»åŠ¡è¡¨æœåŠ¡
    /// </summary>
    [ApiController]
    [TypeFilter(typeof(CMSLanguageFilter))]
    [TypeFilter(typeof(CMSUowActionFilter))]
    [TypeFilter(typeof(CMSAuditActionFilter))]
    [TypeFilter(typeof(CMSExceptionFilter))]
    [Route("api/v{version:apiVersion}/PipeLineLems/[controller]")]
    public class WorkTaskController : ControllerBase
    {
        private readonly IWorkTaskAppService _workTaskAppService;
        private readonly ICurrentUser _currentUser;
        /// <summary>
        /// Initializes a new instance of the <see cref="WorkTaskController"/> class.
        /// </summary>
        /// <param name="workTaskAppService">The workTask application service.</param>
        public WorkTaskController(IWorkTaskAppService workTaskAppService, ICurrentUser currentUser)
        {
            _workTaskAppService = workTaskAppService;
            _currentUser = currentUser;
        }
        /// <summary>
        /// èŽ·å–ä½œä¸šä»»åŠ¡è¡¨
        /// </summary>
        /// <param name="id">主键ID</param>
        /// <returns></returns>
        [HttpGet]
        [Route("{id}")]
        public virtual Task<WorkTaskDto> GetAsync(Guid id)
        {
            return _workTaskAppService.GetAsync(id);
        }
        /// <summary>
        /// åˆ†é¡µèŽ·å–ä½œä¸šä»»åŠ¡è¡¨çš„åˆ—è¡¨.
        /// </summary>
        /// <param name="input">查询参数</param>
        /// <returns></returns>
        [HttpGet]
        [Route("Page")]
        public virtual Task<PagedResultDto<WorkTaskDto>> GetListAsync([FromQuery] GetWorkTaskInput input)
        {
            return _workTaskAppService.GetListAsync(input);
        }
        /// <summary>
        /// æ ¹æ®æ¡ä»¶èŽ·å–ä½œä¸šä»»åŠ¡è¡¨
        /// </summary>
        /// <param name="input">查询参数</param>
        /// <returns></returns>
        [HttpPost]
        [Route("FindListByFilter")]
        public virtual async Task<List<WorkTaskDto>> FindListByFilterAsync([FromBody]GetWorkTaskInput input)
        {
            return await _workTaskAppService.FindListByFilterAsync(input);
        }
        /// <summary>
        /// æ ¹æ®æ¡ä»¶èŽ·å–å•ä¸ªä½œä¸šä»»åŠ¡è¡¨
        /// </summary>
        /// <param name="input">查询参数</param>
        /// <returns></returns>
        [HttpPost]
        [Route("FindSingleByFilter")]
        public virtual async Task<WorkTaskDto> FindSingleByFilterAsync([FromBody]GetWorkTaskInput input)
        {
            return await _workTaskAppService.FindSingleByFilterAsync(input);
        }
        /// <summary>
        /// åˆ›å»ºä½œä¸šä»»åŠ¡è¡¨
        /// </summary>
        /// <param name="input">创建参数</param>
        /// <returns></returns>
        [Authorize]
        [HttpPost]
        public virtual Task<WorkTaskDto> CreateAsync(WorkTaskCreateDto input)
        {
            input.CreatorName = _currentUser.UserAccount;//创建人
            return _workTaskAppService.CreateAsync(input);
        }
        /// <summary>
        /// æ›´æ–°ä½œä¸šä»»åŠ¡è¡¨
        /// </summary>
        /// <param name="id">主键ID</param>
        /// <param name="input">更新参数</param>
        /// <returns></returns>
        [Authorize]
        [HttpPut]
        [Route("{id}")]
        public virtual Task<WorkTaskDto> UpdateAsync(Guid id, WorkTaskUpdateDto input)
        {
            input.LastModifierName = _currentUser.UserAccount;//修改人
            return _workTaskAppService.UpdateAsync(id, input);
        }
        /// <summary>
        /// å…‹éš†ä½œä¸šä»»åŠ¡è¡¨
        /// </summary>
        /// <param name="ids">Id集合</param>
        /// <returns></returns>
        [Authorize]
        [HttpPost]
        [Route("Clone")]
        public virtual Task<List<WorkTaskDto>> CloneAsync([FromBody] IEnumerable<Guid> ids)
        {
            MyCurrentUser myCurrentUser = new MyCurrentUser()
            {
                UserAccount = _currentUser.UserAccount,
                UserId = _currentUser.UserId
            };
            return _workTaskAppService.CloneAsync(ids, myCurrentUser);
        }
        /// <summary>
        /// åˆ é™¤ä½œä¸šä»»åŠ¡è¡¨
        /// </summary>
        /// <param name="id">主键ID</param>
        /// <returns></returns>
        [Authorize]
        [HttpDelete]
        [Route("{id}")]
        public virtual Task DeleteAsync(Guid id)
        {
            MyCurrentUser myCurrentUser = new MyCurrentUser()
            {
                UserAccount = _currentUser.UserAccount,
                UserId = _currentUser.UserId
            };
            //return _wmsMaterialAppService.DeleteAsync(id,myCurrentUser);//逻辑删除
            return _workTaskAppService.DeletePermanentlyAsync(id, myCurrentUser);//物理删除
        }
        /// <summary>
        /// æ‰¹é‡åˆ é™¤ä½œä¸šä»»åŠ¡è¡¨
        /// </summary>
        /// <param name="ids">主键ID集合</param>
        /// <returns></returns>
        [Authorize]
        [HttpDelete]
        public virtual Task DeleteAsync([FromBody] IEnumerable<Guid> ids)
        {
            MyCurrentUser myCurrentUser = new MyCurrentUser()
            {
                UserAccount = _currentUser.UserAccount,
                UserId = _currentUser.UserId
            };
            // return _wmsMaterialAppService.DeleteManyAsync(ids,myCurrentUser);//逻辑删除
            return _workTaskAppService.BatchDeletePermanentlyAsync(ids, myCurrentUser);//物理删除
        }
        /// <summary>
        /// è°ƒæ•´æŽ’序作业任务表
        /// </summary>
        /// <param name="id">主键ID</param>
        /// <returns></returns>
        [HttpPut]
        [Route("{id}/AdjustSort/{sort}")]
        public virtual Task AdjustSortAsync(Guid id, int sort)
        {
            return _workTaskAppService.AdjustSortAsync(id, sort);
        }
        /// <summary>
        /// å¯¼å…¥ä½œä¸šä»»åŠ¡è¡¨
        /// </summary>
        /// <returns></returns>
        [Authorize]
        [HttpPost]
        [Route("Import")]
        public virtual async Task<IActionResult> ImportAsync(IFormFile file)
        {
            using var stream = new MemoryStream();
            await file.CopyToAsync(stream);
            stream.Seek(0L, SeekOrigin.Begin);
            var sheetNames = stream.GetSheetNames();
            var workTaskRows = sheetNames.Contains("配置") ? MiniExcel.Query<WorkTasksImportModel.WorkTaskImportModel>(stream, sheetName: "配置").ToList() : new();
            if (!workTaskRows.Any())
            {
                throw new UserFriendlyException("请检查导入的表格");
            }
            MyCurrentUser myCurrentUser = new MyCurrentUser()
            {
                UserAccount = _currentUser.UserAccount,
                UserId = _currentUser.UserId
            };
            await _workTaskAppService.ImportAsync(new WorkTasksImportModel
            {
                WorkTasks = workTaskRows,
           },myCurrentUser);
            return Ok();
        }
        /// <summary>
        /// å¯¼å‡ºä½œä¸šä»»åŠ¡è¡¨
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        [Route("Export")]
        public virtual async Task<IActionResult> ExportAsync([FromQuery] GetWorkTaskInput input)
        {
            input.MaxResultCount = int.MaxValue;
            var exportData = await _workTaskAppService.ExportAsync(input);
            var templatePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"Resources/Templates/WorkTask导出模板.xlsx");
            if (!System.IO.File.Exists(templatePath))
            {
                templatePath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? string.Empty, $"Resources/Templates/WorkTask导出模板.xlsx");
            }
            var memoryStream = new MemoryStream();
            await memoryStream.SaveAsByTemplateAsync(templatePath, exportData.Sheets);
            memoryStream.Seek(0L, SeekOrigin.Begin);
            return new FileStreamResult(memoryStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") { FileDownloadName = $"{exportData.FileName}_{DateTime.Now:yyyyMMddhhmmss}.xlsx" };
        }
    }
}
PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Resources/Templates/WorkTaskµ¼³öÄ£°å.xlsx
Binary files differ
Weben_CMSרÓôúÂëÉú³ÉÆ÷/Code/Templete/Web/Controllers/EntityModeDrawerÄ£°å.txt
@@ -18,7 +18,8 @@
import {  
  BOOLEAN_OPTIONS_AddEdit 
} from '@/utils/commonOptionConstants'; 
// å¼•入公共表单工具文件
import { extractFormDataForOnConfirm,extractAndAssignFormData } from '@/utils/myformUtils';
export const use$EntityName$Drawer = (props: any, ctx?: any) => {
  const $PageMenuInstanceName$Drawer = injectModel<$EntityName$Drawer>('$PageMenuInstanceName$Drawer')
  /**
@@ -115,9 +116,7 @@
   */
  const onConfirm = async () => {
    await formRef.value?.validate()
    const data = {
      $Save_PageAddFormAttributes$
    }
    const data=extractFormDataForOnConfirm(formData);
    if (!current.value) {
      await $PageMenuInstanceName$Drawer.add$EntityName$(data)
    } else {
@@ -158,10 +157,7 @@
    if (current.value) {
      const res = await $PageMenuInstanceName$Drawer.get$EntityName$Detail(current.value)
      formData.value = {
        $PageAddFormAttributesByOpen$
        id: res.id,
      }
      extractAndAssignFormData(res,formData);
      disabled.value = true
      updateCheckData()
    } else {