廖井涛
2024-12-05 cc1d8aaf0027355b77ffc293fcc15cb70edfb842
Merge branch 'master' of http://bore.pub:10439/r/ERP_override
11个文件已修改
327 ■■■■ 已修改文件
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProjectDetail.vue 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/processCard/PrintFlowCard.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/processCard/SelectDetailProcessCard.vue 103 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/controller/pp/GlassOptimizeController.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/controller/pp/ProcessCardController.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/pp/FlowCardMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/pp/GlassOptimizeMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/pp/FlowCardService.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/pp/GlassOptimizeService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/pp/FolwCard.xml 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/glassOptimize/page/ProjectDetail.vue
@@ -1,5 +1,5 @@
<script setup>
import {reactive, ref} from "vue";
import {onMounted, reactive, ref} from "vue";
import {useI18n} from "vue-i18n";
import {
  Folder,
@@ -11,6 +11,8 @@
import SetAmount from "@/views/pp/glassOptimize/page/SetAmount.vue";
import SetTrimming from "@/views/pp/glassOptimize/page/SetTrimming.vue";
import CheckInventory from "@/views/pp/glassOptimize/page/CheckInventory.vue";
import request from "@/utils/request";
import {ElMessage} from "element-plus";
const {t} = useI18n()
@@ -64,32 +66,26 @@
    ]
  },*/
  columns: [
    {title: '订序', width: 70},
    {field: 'state', width: 100, title: t('order.width'), filters: [{data: ''}], slots: {filter: 'num2_filter'}},
    {field: 'seq', width: 100, title: t('order.height'),filters: [{data: ''}],slots: {filter: 'num2_filter'}},
    {field: 'seq', title: '', width: 70},
    {field: 'order_number', title: '订序', width: 70},
    {field: 'child_width', width: 100, title: t('order.width'), filters: [{data: ''}], slots: {filter: 'num2_filter'}},
    {field: 'child_height', width: 100, title: t('order.height'),filters: [{data: ''}],slots: {filter: 'num2_filter'}},
    {field: 'quantity', width: 150, title: t('order.quantity'), filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: '', width: 150, title: '长磨1', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: '', width: 150, title: '长磨2', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: '', width: 150, title: '短磨1', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: '', width: 150, title: '短磨1', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {
      field: 'id',
      width: 150,
      title: t('order.quantity'),
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {field: 'id', width: 150, title: '长磨1', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'id', width: 150, title: '长磨2', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'id', width: 150, title: '短磨1', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'id', width: 150, title: '短磨1', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {
      field: 'id',
      field: 'shape',
      width: 150,
      title: t('order.shape'),
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {field: 'id', width: 150, title: '流程卡号', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {field: 'process_cards', width: 150, title: '流程卡号', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true},
    {
      field: 'id',
      field: 'product_name',
      width: 150,
      title: t('order.product'),
      filters: [{data: ''}],
@@ -97,7 +93,7 @@
      sortable: true
    },
    {
      field: 'id',
      field: 'building_number',
      width: 150,
      title: t('order.buildingNumber'),
      filters: [{data: ''}],
@@ -105,7 +101,7 @@
      sortable: true
    },
    {
      field: 'id',
      field: 'remark',
      width: 150,
      title: t('basicData.remarks'),
      filters: [{data: ''}],
@@ -113,7 +109,7 @@
      sortable: true
    },
    {
      field: 'id',
      field: 'perimeter',
      width: 150,
      title: t('order.perimeter'),
      filters: [{data: ''}],
@@ -121,7 +117,7 @@
      sortable: true
    },
    {
      field: 'id',
      field: 'area',
      width: 150,
      title: t('order.grossArea'),
      filters: [{data: ''}],
@@ -130,25 +126,33 @@
    },
    {
      field: 'id',
      field: '',
      width: 150,
      title: t('craft.glassChild'),
      title: '架号',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {
      field: 'id',
      field: 'technology_number',
      width: 150,
      title: t('craft.glassAddress'),
      title: '层',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {
      field: 'id',
      field: 'glass_child',
      width: 150,
      title: t('craft.TrademarkAttribute'),
      title: '单片名称',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
    },
    {
      field: 'icon',
      width: 150,
      title: '印标类型',
      filters: [{data: ''}],
      slots: {filter: 'num1_filter'},
      sortable: true
@@ -175,6 +179,24 @@
const openDialog = (index) => {
  dialogVisible.value[index] = true;
};
//工程号
const projectNo = ref('P24120301');
const fetchData = () => {
  request.post(`/glassOptimize/projectInfo/${projectNo.value}`).then((res) => {
    if ((Number(res.code) === 200)) {
      xGrid.value.loadData(res.data.data);
    } else {
      ElMessage.warning(res.msg);
    }
  }).catch((error) => {
    console.error("获取数据出错:", error);
    ElMessage.error('获取数据时出现错误,请稍后再试');
  });
};
onMounted(() => {
  fetchData();
});
</script>
@@ -279,6 +301,7 @@
        </div>
      </template>
    </vxe-grid>
  </div>
</template>
north-glass-erp/northglass-erp/src/views/pp/processCard/PrintFlowCard.vue
@@ -690,6 +690,7 @@
    </el-select>
    <vxe-grid
        ref="xGrid"
        :checkbox-config="{labelField: 'name', highlight: true, range: true}"
        class="mytable-scrollbar"
        height="100%"
        v-bind="gridOptions"
north-glass-erp/northglass-erp/src/views/pp/processCard/SelectDetailProcessCard.vue
@@ -14,6 +14,8 @@
import {VXETable} from "vxe-table";
import  useUserInfoStore from '@/stores/userInfo'
import {useI18n} from "vue-i18n";
import UpdateOrderCraft from "@/components/sd/order/UpdateOrderCraft.vue";
import {filterChanged} from "@/hook";
let productGlassTypeStore = useProductGlassTypeStore()
const { t } = useI18n()
const userStore = useUserInfoStore()
@@ -62,8 +64,57 @@
let pageNum=ref(1)
let pageState = null
let craftVisible = ref(false)
const  craftObj  = reactive({
  newCraft: [],
  oldCraft: [],
})
const  numberList  = reactive({
  technologyNumber:[],
})
const saveCraft = () => {
  //rowIndex.value.process = craftObj.newCraft.join('->')
 let orderProcess= craftObj.newCraft.join('->')
  request.post(`/processCard/updateProcess/${rowIndex.value.process_id}/${rowIndex.value.technology_number}/${rowIndex.value.order_id}/${orderProcess}`, craftObj).then((res) => {
    if (res.code == 200 && res.data === true) {
      ElMessage.success(t('basicData.msg.saveSuccess'))
      router.push({
        path: '/main/processCard/SelectDetailProcessCard',
        query: {processId: processId,random: Math.random()}
      })
    } else {
      ElMessage.warning('保存失败,检查是否报工')
    }
  })
  craftVisible.value= false
}
let process =  ref([])
request.get(`/basicData/BasicDataByType/product/process`).then((res) =>{
  if (res.code==200){
    process.value=res.data
  }
})
let rowIndex = ref({})
const updateCraft = (row) => {
  craftVisible.value= true
  Object.keys(craftObj).forEach((key) =>{
    craftObj[key] = row['process'].split('->')
  })
  Object.keys(numberList).forEach((key) =>{
    numberList[key] = row['concatNumber'].split(',')
  })
  craftObj.technologyNumber=[]
  craftObj.technologyNumber.push(...numberList.technologyNumber);
  rowIndex.value = row
}
//第一次加载
const {currentRoute} = useRouter()
@@ -136,24 +187,29 @@
  },//表头参数
  columns:[
    {type:'expand',fixed:"left",slots: { content:'content' },width: 50},
    {title: t('basicData.operate'), width: 100, slots: { default: 'button_slot' },fixed:"left",},
    { type: 'seq',fixed:"left", title: t('basicData.Number'), width: 50 },
    {field: 'order_id', title: t('order.orderId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' },width: 80 },
    {field: 'order_id', title: t('order.orderId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' },width: 110 },
    {field: 'process_id', width: 140, title: t('processCard.processId') ,showOverflow:"ellipsis" ,filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'order_number', title: t('order.OrderNum') ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },},
    {field: 'technology_number', title: t('processCard.technologyNumber') ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },},
    {field: 'order_number', title: t('order.OrderNum') ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },width: 100},
    {field: 'technology_number', title: t('processCard.technologyNumber') ,filters:[{ data: '' }],slots: { filter: 'num1_filter' },width: 100},
    {field: 'quantity', title: t('order.quantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, width: 80},
    {field: 'child_width', title: t('order.width'), },
    {field: 'child_height', title: t('order.height'), },
    {field: 'area', title: t('order.area') ,showOverflow:"ellipsis"},
    {field: 'product_name', title: t('order.product'), },
    {field: 'glass_child', title: t('reportingWorks.glassChild'), },
    {field: 'founder', title: t('processCard.founder'), },
    {field: 'splitFrame_time', title: t('processCard.splitFrameTime'), },
    {field: 'child_width', title: t('order.width'),width: 80 },
    {field: 'child_height', title: t('order.height'),width: 80 },
    {field: 'area', title: t('order.area') ,showOverflow:"ellipsis",width: 70},
    {field: 'process',width:250,  title: t('craft.process'),filters:[{ data: '' }],slots: { filter: 'num1_filter' },},
    {field: 'product_name', title: t('order.product'),width: 310 },
    {field: 'glass_child', title: t('reportingWorks.glassChild'),width: 200 },
    {field: 'founder', title: t('processCard.founder'),width: 110 },
    {field: 'splitFrame_time', title: t('processCard.splitFrameTime'),width: 110 },
    {field: 'concatNumber', title: '总序号',width: 110},
  ],//表头按钮
  toolbarConfig: {
    buttons: [
      {'code': 'add', 'name': t('processCard.merge'),status: 'primary'}
      {'code': 'add', 'name': t('processCard.merge'),status: 'primary'},
    ],
    import: false,
    // export: true,
@@ -272,18 +328,27 @@
      <!--左边固定显示的插槽-->
      <template #num1_filter="{ column, $panel }">
        <div>
          <div v-for="(option, index) in column.filters" :key="index">
            <input type="type" v-model="option.data"
                   @keyup.enter.native="$panel.confirmFilter()"
                   @input="changeFilterEvent($event, option, $panel)"/>
          </div>
        </div>
      <!--左边固定显示的插槽-->
      <template #button_slot="{ row }">
        <el-button @click="updateCraft(row)" link type="primary" size="small">{{$t('craft.updateCraft')}}</el-button>
      </template>
    </vxe-grid>
    <el-dialog id="processChange"
               v-model="craftVisible"
               :title="$t('craft.technologicalProcess')"
               :close-on-click-modal="false"
               :close-on-press-escape="false"
               style="width: 60%;height:60% ;position: relative;" >
      <update-order-craft
          :craftObj="craftObj"
          :process="process"
          @saveCraft="saveCraft"
      />
    </el-dialog>
  </div>
</template>
north-glass-erp/src/main/java/com/example/erp/controller/pp/GlassOptimizeController.java
@@ -19,6 +19,15 @@
    @Autowired
    GlassOptimizeService glassOptimizeService;
    //工程信息
    @ApiOperation("创建工程查询流程卡接口")
    @PostMapping  ("/projectInfo/{projectNo}")
    public Result projectInfo(
            @PathVariable String projectNo){
        return Result.seccess(glassOptimizeService.projectInfoSv(projectNo));
    }
    //工程查询流程卡
    @ApiOperation("创建工程查询流程卡接口")
    @PostMapping  ("/getFlowCardList/{optionVal}/{radio}")
@@ -77,8 +86,7 @@
    }
    //模拟计算流程卡详情
    //模拟计算工程号查询
    @ApiOperation("模拟计算工程号查询")
    @ApiOperation("模拟计算流程卡详情")
    @PostMapping  ("/selectComputeDetail/{processId}")
    public Result selectComputeDetail(
            @PathVariable String processId){
north-glass-erp/src/main/java/com/example/erp/controller/pp/ProcessCardController.java
@@ -385,4 +385,16 @@
    }
    @ApiOperation("修改工艺流程")
    @PostMapping("/updateProcess/{processId}/{technologyNumber}/{orderId}/{process}")
    public Result updateProcess(
            @PathVariable String processId,
            @PathVariable String technologyNumber,
            @PathVariable String orderId,
            @PathVariable String process,
            @RequestBody Map<String, Object> object
    ) {
        return Result.seccess(flowCardService.updateProcessSv(processId,technologyNumber,orderId,process,object));
    }
}
north-glass-erp/src/main/java/com/example/erp/mapper/pp/FlowCardMapper.java
@@ -190,4 +190,10 @@
    List<Map<String, Object>> getPrintCustomDataProject(String projectNo);
    List<Map<String, String>> getPrintLabel3(String projectNo);
    Boolean updateProcessMp(String processId, String technologyNumber, String process, String number);
    Boolean deleteProcessMp(String processId, String technologyNumber);
    Boolean updateOrderProcessMp(String orderId, String number, String technologyNumber, String orderprocess);
}
north-glass-erp/src/main/java/com/example/erp/mapper/pp/GlassOptimizeMapper.java
@@ -12,6 +12,10 @@
@Mapper
public interface GlassOptimizeMapper {
    //工程信息
    List<Map<String, Object>> projectInfoMp(String projectNo);
    //工单管理查询未转工单数据
    List<OrderGlassDetail> selectWordOrder(Date selectTime1, Date selectTime2, OrderGlassDetail orderGlassDetail);
north-glass-erp/src/main/java/com/example/erp/service/pp/FlowCardService.java
@@ -852,6 +852,36 @@
        map.put("title", flowCardMapper.getPrintTitle(type));
        return map;
    }
    public Boolean updateProcessSv(String processId, String technologyNumber, String orderId, String Orderprocess, Map<String, Object> object) {
        //判断该流程卡是否报工
        Integer count = flowCardMapper.reportingWorkCount(processId);
        if (count == 0) {
            //删除小片工艺表对应的数据
            flowCardMapper.deleteProcessMp(processId,technologyNumber);
            //重新插入修改好工艺流程卡的数据
            List<String> newCraftList = (List<String>) object.get("newCraft");
            List<String> numberList = (List<String>) object.get("technologyNumber");
            // 判断 newCraftList 是否为空
            if (newCraftList != null) {
                for (String number : numberList) {
                    //修改订单小片表工艺流程
                    flowCardMapper.updateOrderProcessMp(orderId,number,technologyNumber,Orderprocess);
                    for (String process : newCraftList) {
                        flowCardMapper.updateProcessMp(processId,technologyNumber,process,number);
                    }
                }
            }
            return true;
        }else {
            return false;
        }
    }
}
north-glass-erp/src/main/java/com/example/erp/service/pp/GlassOptimizeService.java
@@ -18,6 +18,14 @@
    GlassOptimizeMapper glassOptimizeMapper;
    //工程信息
    public Map<String, Object> projectInfoSv(String projectNo) {
        Map<String, Object> map = new HashMap<>();
        map.put("data", glassOptimizeMapper.projectInfoMp(projectNo));
        return map;
    }
    //工程查询流程卡
    public Map<String, Object> getFlowCardList(String optionVal, Integer radio) {
        Map<String, Object> map = new HashMap<>();
north-glass-erp/src/main/resources/mapper/pp/FolwCard.xml
@@ -308,7 +308,7 @@
    <select id="reportingWorkCount">
        select COUNT(rw.process_id)
        from reporting_work as rw
        where rw.process_id = #{processId}
        where rw.process_id = #{processId} and reviewed_state>=0
    </select>
    <!--    插入Flow_card表-->
    <insert id="addFlowCardMp">
@@ -443,12 +443,18 @@
               od.product_name,
               ogd.glass_child,
               fc.founder,
               date(fc.splitFrame_time)                                             as splitFrame_time
               date(fc.splitFrame_time)                                             as splitFrame_time,
               ogd.process,
               c.concatNumber
        from flow_card as fc
                 left join sd.order_glass_detail as ogd
                           on fc.order_id = ogd.order_id and fc.order_number = ogd.order_number and
                              fc.technology_number = ogd.technology_number
                 left join sd.order_detail as od on od.order_id = ogd.order_id and od.order_number = ogd.order_number
                 left join (
            select process_id,technology_number, GROUP_CONCAT(order_number) as concatNumber from
            flow_card where process_id = #{processId} GROUP BY process_id,technology_number
                 ) as c on c.process_id=fc.process_id
        where fc.process_id = #{processId}
        GROUP BY fc.order_id, fc.process_id, fc.order_number, fc.technology_number
        order by fc.order_number, fc.technology_number
@@ -2465,4 +2471,33 @@
        group by  order_id,od.order_number
        order by ogd.child_width desc,ogd.child_height desc
    </select>
    <delete id="deleteProcessMp">
        delete from sd.order_process_detail where process_id = #{processId} and technology_number= #{technologyNumber}
    </delete>
    <insert id="updateProcessMp">
        insert into sd.order_process_detail (order_id,
                                             process_id,
                                             order_number,
                                             technology_number,
                                             process,
                                             create_time)
        select fc.order_id,
               fc.process_id,
               fc.order_number,
               #{technologyNumber},
               #{process},
               NOW()
        from pp.flow_card as fc
        where fc.process_id = #{processId}
          and fc.order_number = #{number}
          and fc.technology_number = #{technologyNumber}
        GROUP BY fc.order_number
    </insert>
    <update id="updateOrderProcessMp">
        update sd.order_glass_detail set process=#{orderprocess}
        where order_id=#{orderId} and order_number=#{number} and technology_number=#{technologyNumber}
    </update>
</mapper>
north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml
@@ -58,6 +58,36 @@
        <result property="modifyTime" column="modify time"/>
    </resultMap>
    <!--工程信息-->
    <select id="projectInfoMp">
        SELECT
            f.order_number,
            g.child_width ,
            g.child_height ,
            f.quantity ,
            d.shape ,
            op.process_cards ,
            d.product_name ,
            op.remark ,
            d.building_number ,
            round(((`g`.`child_width` + g.child_height) * 2 * `f`.`quantity`),2) as perimeter ,
            round((`g`.`area` * `f`.`quantity`),4) AS area,
            f.technology_number ,
            g.glass_child ,
            g.icon
        FROM
            ((pp.flow_card AS f
                LEFT JOIN sd.order_detail AS d ON (((f.order_id = d.order_id) AND (f.order_number = d.order_number))))
                LEFT JOIN sd.order_glass_detail AS g ON (((f.order_id = g.order_id) AND (f.order_number = g.order_number) AND (f.technology_number = g.technology_number))))
                INNER JOIN pp.optimize_project AS op ON op.project_no = f.project_no
        WHERE
            f.project_no = #{projectNo}
        GROUP BY
            f.order_id,
            f.technology_number,
            f.order_number;
    </select>
    <select id="selectWordOrder" resultMap="wordOrderMap">
        select
        o.order_id,
@@ -133,6 +163,7 @@
        ORDER BY fc.process_id, fc.technology_number
    </select>
        <!--工程管理-->
    <select id="optimizeProjectMangeMp"  resultMap="optimizeProjectMangeMap">
        select p.`id`                                AS `id`,
               p.`project_no`                        AS `Project Number`,