guoyujie
2025-08-07 56e113a6658dc068754bd8ef8a3773584d01cd89
Merge branch 'master' of http://10.153.19.25:10101/r/ERP_override
34个文件已修改
465 ■■■■ 已修改文件
north-glass-erp/northglass-erp/src/components/pp/PrintProcess.vue 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/pp/PrintProcessReplenish.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/lang/ar.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/lang/en.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/lang/kr.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/lang/ru.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/lang/zh.js 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/stores/sd/companySet/天津北玻.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/stores/sd/companySet/常州吉利.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/stores/sd/companySet/新疆恒鑫.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/stores/sd/companySet/洛阳北玻.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/stores/sd/companySet/金华天成.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/processCard/SelectDetailProcessCard.vue 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/processCard/SelectPrintFlowCard.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/pp/report/TeamOutput.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/controller/pp/GlassOptimizeController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/controller/pp/ProcessCardController.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/controller/sd/DeliveryController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/pp/FlowCardMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/pp/GlassOptimizeMapper.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/sd/DeliveryMapper.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/sd/OrderProcessDetailMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/pp/FlowCardService.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/pp/GlassOptimizeService.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/pp/ReportService.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/pp/ReportingWorkService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/sd/DeliveryService.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/mm/MaterialInventory.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/pp/FolwCard.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/pp/PatchLogMapper.xml 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/pp/Report.xml 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/pp/ReportingWork.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/sd/DeliveryMapper.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/components/pp/PrintProcess.vue
@@ -71,6 +71,7 @@
  compound = null
}
let name=company.companyName
let sole = company.soleQRCode
let printNumberFc = props.printFc
data.value.printList = JSON.parse(props.printList)
@@ -104,12 +105,17 @@
const handleGetQRCode = async () => {
  let technologyNumber=''
  for (let i = 0; i < produceList.value.length; i++) {
    console.log(produceList.value[i].detail[0])
    // if (produceList.value[i].detail[0].qrcode!="" && produceList.value[i].detail[0].qrcode!=null){
    //    technologyNumber = produceList.value[i].detail[0].qrcode.toString(); // è½¬æ¢ä¸ºå­—符串以便处理每个字符,合并标签
    // }else {
       technologyNumber = produceList.value[i].detail[0].technologyNumber.toString(); // è½¬æ¢ä¸ºå­—符串以便处理每个字符
    // }
    if (sole==true){
      if (produceList.value[i].detail[0].qrcode!="" && produceList.value[i].detail[0].qrcode!=null){
        technologyNumber = produceList.value[i].detail[0].qrcode.toString(); // è½¬æ¢ä¸ºå­—符串以便处理每个字符,合并标签
      }else {
        technologyNumber = produceList.value[i].detail[0].technologyNumber.toString(); // è½¬æ¢ä¸ºå­—符串以便处理每个字符
      }
    }
    else{
      technologyNumber = produceList.value[i].detail[0].technologyNumber.toString(); // è½¬æ¢ä¸ºå­—符串以便处理每个字符
    }
    produceList.value[i].detail[0]["qrcodeList"] = []; // åˆå§‹åŒ–一个空数组用来存储 QR Code
    if (compound == null  ){
      const processId = produceList.value[i].detail[0].process_id;
north-glass-erp/northglass-erp/src/components/pp/PrintProcessReplenish.vue
@@ -54,6 +54,7 @@
data.value.printList = JSON.parse(props.printList)
let name=company.companyName
let replenishQRCode=company.replenishQRCode
//去除重复对象
// let uniqueObjects = {};
// // éåŽ†åŽŸå§‹æ•°æ®æ•°ç»„
@@ -176,7 +177,7 @@
           flowCardCount=produceList.value.length
          handleSummary()
          if (name=='天津北玻玻璃工业技术有限公司(TJBB-QR7.1-01)'){
          if (replenishQRCode == 2){
            handleGetQRCodeTj()//天津扫码枪报工需要合并层号二维码
          }else{
            handleGetQRCode()//拆分层号二维码
north-glass-erp/northglass-erp/src/lang/ar.js
@@ -533,6 +533,11 @@
        addFlowCardMsg2:'请选择未分架订单打印',
        okFlowCard:'已分架',
        noFlowCard:'未分架',
        mainWidth:'宽高',
        mainHeight:'高宽',
        terminationQuantity:'生产终止数量',
        terminationMsg:'请输入正确的可修改数量',
        maxCompleted:'最大已完工数量',
    },
    reportingWorks:{
        page:{
north-glass-erp/northglass-erp/src/lang/en.js
@@ -535,6 +535,11 @@
        addFlowCardMsg2:'请选择未分架订单打印',
        okFlowCard:'已分架',
        noFlowCard:'未分架',
        mainWidth:'宽高',
        mainHeight:'高宽',
        terminationQuantity:'生产终止数量',
        terminationMsg:'请输入正确的可修改数量',
        maxCompleted:'最大已完工数量',
    },
    reportingWorks:{
        page:{
north-glass-erp/northglass-erp/src/lang/kr.js
@@ -542,6 +542,11 @@
        addFlowCardMsg2:'请选择未分架订单打印',
        okFlowCard:'已分架',
        noFlowCard:'未分架',
        mainWidth:'宽高',
        mainHeight:'高宽',
        terminationQuantity:'生产终止数量',
        terminationMsg:'请输入正确的可修改数量',
        maxCompleted:'最大已完工数量',
    },
    reportingWorks:{
        page:{
north-glass-erp/northglass-erp/src/lang/ru.js
@@ -531,6 +531,11 @@
        addFlowCardMsg2:'请选择未分架订单打印',
        okFlowCard:'已分架',
        noFlowCard:'未分架',
        mainWidth:'宽高',
        mainHeight:'高宽',
        terminationQuantity:'生产终止数量',
        terminationMsg:'请输入正确的可修改数量',
        maxCompleted:'最大已完工数量',
    },
    reportingWorks:{
        page:{
north-glass-erp/northglass-erp/src/lang/zh.js
@@ -545,7 +545,9 @@
        noFlowCard:'未分架',
        mainWidth:'宽高',
        mainHeight:'高宽',
        terminationQuantity:'生产终止数量',
        terminationMsg:'请输入正确的可修改数量',
        maxCompleted:'最大已完工数量',
    },
    reportingWorks:{
        page:{
north-glass-erp/northglass-erp/src/stores/sd/companySet/Ìì½ò±±²£.js
@@ -42,6 +42,8 @@
        storageBtn:false,//是否显示报工入库相关内容,洛阳true,其他false
        teamsType:false,//是否开启班组下拉框,洛阳true,其他false
        alienFunction:false,//是否开启异形功能,暂时都是false
        replenishQRCode:2,//是否补片二维码是否拆分层,1拆分,2不拆
        soleQRCode:false,//流程卡合并二维码显示单层,义乌true.其它false
        //天津
        printLabel: {
            custom: (item1) => {
north-glass-erp/northglass-erp/src/stores/sd/companySet/³£ÖݼªÀû.js
@@ -42,6 +42,8 @@
        storageBtn:false,//是否显示报工入库相关内容,洛阳true,其他false
        teamsType:false,//是否开启班组下拉框,洛阳true,其他false
        alienFunction:false,//是否开启异形功能,暂时都是false
        replenishQRCode:1,//是否补片二维码是否拆分层,1拆分,2不拆
        soleQRCode:false,//流程卡合并二维码显示单层,义乌true.其它false
        //天津
        printLabel: {
            custom: (item1) => {
north-glass-erp/northglass-erp/src/stores/sd/companySet/н®ºãöÎ.js
@@ -42,6 +42,8 @@
        storageBtn:false,//是否显示报工入库相关内容,洛阳true,其他false
        teamsType:false,//是否开启班组下拉框,洛阳true,其他false
        alienFunction:false,//是否开启异形功能,暂时都是false
        replenishQRCode:1,//是否补片二维码是否拆分层,1拆分,2不拆
        soleQRCode:false,//流程卡合并二维码显示单层,义乌true.其它false
        //天津
        printLabel: {
            custom: (item1) => {
north-glass-erp/northglass-erp/src/stores/sd/companySet/ÂåÑô±±²£.js
@@ -43,6 +43,8 @@
        storageBtn:true,//是否显示报工入库相关内容,洛阳true,其他false
        teamsType:true,//是否开启班组下拉框,洛阳true,其他false
        alienFunction:false,//是否开启异形功能,暂时都是false
        replenishQRCode:1,//是否补片二维码是否拆分层,1拆分,2不拆
        soleQRCode:false,//流程卡合并二维码显示单层,义乌true.其它false
        //天津
        printLabel: {
            custom: (item1) => {
north-glass-erp/northglass-erp/src/stores/sd/companySet/½ð»ªÌì³É.js
@@ -44,6 +44,8 @@
        storageBtn:false,//是否显示报工入库相关内容,洛阳true,其他false
        teamsType:true,//是否开启班组下拉框,洛阳true,其他false
        alienFunction:false,//是否开启异形功能,暂时都是false
        replenishQRCode:1,//是否补片二维码是否拆分层,1拆分,2不拆
        soleQRCode:true,//流程卡合并二维码显示单层,义乌true.其它false
        //天津
        printLabel: {
            custom: (item1) => {
north-glass-erp/northglass-erp/src/views/pp/processCard/SelectDetailProcessCard.vue
@@ -115,6 +115,50 @@
  craftObj.technologyNumber.push(...numberList.technologyNumber);
  rowIndex.value = row
}
const updateTermination = (row) => {
  let processId = row.process_id
  let orderNumber = row.order_number
  let process = row.process
  const completed = ref()
  const completedOk = ref()
  //获取第一道工序完工数量
  request.post(`/processCard/selectCompleted/${processId}/${orderNumber}/${process}`, filterData.value).then((res) => {
    if (res.code == 200) {
      completed.value=res.data.data
      completedOk.value = row.quantity*1 - completed.value*1
      //弹窗
      ElMessageBox.prompt( t('processCard.maxCompleted')+completed.value, {
        confirmButtonText: t('basicData.save'),
        cancelButtonText: t('basicData.cancelButtonText'),
        inputPattern:/^(\d+|)$/,
        inputErrorMessage: t('processCard.terminationMsg'),
        inputValue:row.quantity
      }).then(({ value }) => {
        if (completedOk.value <  value  ) {
          ElMessage.warning(t('processCard.terminationMsg'))
          return
        }
        request.post(`/processCard/updateTermination/${processId}/${orderNumber}/${value}`).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(res.msg)
    }
  })
}
//第一次加载
const {currentRoute} = useRouter()
@@ -129,7 +173,6 @@
  if (res.code == 200) {
    produceList = produceList.value.concat(deepClone(res.data.data))
    merge = res.data.merge
    console.log(merge)
    if(merge != 0){
      gridOptions.toolbarConfig.buttons[0].name=t('processCard.cancelMerger')
    }
@@ -193,13 +236,14 @@
  },//表头参数
  columns:[
    {type:'expand',fixed:"left",slots: { content:'content' },width: 50},
    {title: t('basicData.operate'), width: 100, slots: { default: 'button_slot' },fixed:"left",},
    {title: t('basicData.operate'), width: 120, 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: 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' },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: 'termination_quantity', title: t('processCard.terminationQuantity'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }, width: 80},
    {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},
@@ -337,9 +381,19 @@
      <!--左边固定显示的插槽-->
      <template #button_slot="{ row }">
        <el-button @click="updateCraft(row)" link type="primary" size="small">{{$t('craft.updateCraft')}}</el-button>
        <el-button @click="updateTermination(row)" link type="primary" size="small">终止</el-button>
      </template>
      <template #num1_filter="{ column, $panel }">
        <div>
          <div v-for="(option, index) in column.filters" :key="index">
            <input type="text"
                   v-model="option.data"
                   @keyup.enter.native="$panel.confirmFilter()"
                   @input="changeFilterEvent($event, option, $panel)"/>
          </div>
        </div>
      </template>
    </vxe-grid>
    <el-dialog id="processChange"
north-glass-erp/northglass-erp/src/views/pp/processCard/SelectPrintFlowCard.vue
@@ -225,6 +225,7 @@
      slots: {filter: 'num1_filter'},
      filterMethod: filterChanged
    },
    {field: 'batch', title: t('order.batch'), filters: [{data: ''}], slots: {filter: 'num1_filter'}, width: 110},
    {
      field: 'quantity',
      title: t('order.quantity'),
north-glass-erp/northglass-erp/src/views/pp/report/TeamOutput.vue
@@ -341,7 +341,8 @@
    {
      field: 'project', width: 120, title: t('order.project'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }
    },
    {field: 'batch', width: 90, title: t('order.batch')},
    {field: 'batch', width: 90, title: t('order.batch'),
      filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'orderType', width: 90, title: t('order.orderType')},
    {
      field: 'processId', width: 140, title: t('processCard.processId'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }
@@ -354,7 +355,8 @@
    {
      field: 'deviceName', width: 140, title: t('machine.basicName'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }
    },
    {field: 'workProcessName', width: 120, title: t('report.workProcessName')},
    {field: 'workProcessName', width: 120, title: t('report.workProcessName'),
      filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'edgingType', width: 110, title: t('order.edgingType'),filters:[{ data: '' }],slots: { filter: 'num1_filter' }},
    {field: 'completedQuantity', width: 90, title: t('reportingWorks.completedQuantity')},
    {field: 'area', width: 100, title: t('reportingWorks.completedArea')},
north-glass-erp/src/main/java/com/example/erp/controller/pp/GlassOptimizeController.java
@@ -375,7 +375,11 @@
        return Result.seccess(glassOptimizeService.getProcessCardMpThirdParty(projectNo));
    }
    @ApiOperation("mes工程任务下发接口")
    @PostMapping("/getIssuingProjects")
    public Result issuingProjects(@RequestBody String projectNo) throws JsonProcessingException {
        return Result.seccess(glassOptimizeService.issuingProjects(projectNo));
    }
north-glass-erp/src/main/java/com/example/erp/controller/pp/ProcessCardController.java
@@ -492,4 +492,25 @@
        //参数:相应的数据,实体类信息,相应的方法(数据获取),生成的excel名字
        DownExcel.download(response, FlowCardDTO.class, flowCardService.exportDateProcessSv(dates), "DateProcess");
    }
    @ApiOperation("修改生产终止数量")
    @PostMapping("/updateTermination/{processId}/{orderNumber}/{value}")
    public Result updateTermination(
            @PathVariable String processId,
            @PathVariable Integer orderNumber,
            @PathVariable Integer value
    ) {
        return Result.seccess(flowCardService.updateTerminationSv(processId,orderNumber,value));
    }
    @ApiOperation("查询用于修改生产终止数量的完工数量")
    @PostMapping("/selectCompleted/{processId}/{orderNumber}/{process}")
    public Result selectCompleted(
            @PathVariable String processId,
            @PathVariable Integer orderNumber,
            @PathVariable String process) {
        return Result.seccess(flowCardService.selectCompletedSv(processId, orderNumber,process));
    }
}
north-glass-erp/src/main/java/com/example/erp/controller/sd/DeliveryController.java
@@ -15,6 +15,7 @@
import com.example.erp.exception.ServiceException;
import com.example.erp.service.sd.DeliveryService;
import com.example.erp.tools.DownExcel;
import com.fasterxml.jackson.core.JsonProcessingException;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
@@ -38,7 +39,7 @@
    @ApiOperation("发货订单查询接口")
    @SaCheckPermission("selectDelivery.search")
    @PostMapping("/getSelectShippingOrder/{pageNum}/{pageSize}/{selectDate}")
    public Result getSelectShippingOrder(@PathVariable Integer pageNum, @PathVariable Integer pageSize,@PathVariable List<String> selectDate, @RequestBody Delivery delivery){
    public Result getSelectShippingOrder(@PathVariable Integer pageNum, @PathVariable Integer pageSize,@PathVariable List<String> selectDate, @RequestBody Delivery delivery) throws JsonProcessingException {
        return Result.seccess(deliveryService.getSelectShippingOrder(pageNum,pageSize,selectDate,delivery));
    }
@@ -135,7 +136,6 @@
        return  Result.seccess(deliveryService.updateDeliveryPrintNumber(deliveryId));
    }
north-glass-erp/src/main/java/com/example/erp/mapper/pp/FlowCardMapper.java
@@ -267,4 +267,8 @@
    Integer getLayoutStatus(String processId);
    List<Map<String, String>> selectSortingCardMp(String orderId, String productionId, String flashback, String optionVal, FlowCard flowCard);
    Boolean updateTerminationMp(String processId, Integer orderNumber, Integer value);
    Integer selectCompletedMp(String processId, Integer orderNumber, String interceptProcess);
}
north-glass-erp/src/main/java/com/example/erp/mapper/pp/GlassOptimizeMapper.java
@@ -186,4 +186,12 @@
    List<Map<String, Object>> getProjectByProjectNoSv(String projectNo);
    void updateFlowCardRack(String processId, String technologyNumber, int rackValue);
    Map<String,Object> selectOptimizeProject(String projectNo);
    List<Map<String,Object>> selectOptimizeLayout(String projectNo);
    List<Map<String,Object>> selectOptimizeDetail(String projectNo);
    List<Map<String,Object>> selectFlowCardInfoList(String projectNo);
}
north-glass-erp/src/main/java/com/example/erp/mapper/sd/DeliveryMapper.java
@@ -64,5 +64,4 @@
}
north-glass-erp/src/main/java/com/example/erp/mapper/sd/OrderProcessDetailMapper.java
@@ -20,7 +20,7 @@
    List<Map<String,String>> filterOrderProcess(String orderId);
    List<Map<String,Integer>> getGlassLRow(String orderId);
    List<Map<String,Object>> getGlassLRow(String orderId);
    List<Map<String, String>> filterLastProcess(String orderId, String orderNumber, String technologyNumber,String id);
north-glass-erp/src/main/java/com/example/erp/service/pp/FlowCardService.java
@@ -11,12 +11,12 @@
import com.example.erp.entity.userInfo.Log;
import com.example.erp.exception.ServiceException;
import com.example.erp.mapper.pp.FlowCardMapper;
import com.example.erp.mapper.pp.ReportingWorkMapper;
import com.example.erp.mapper.sd.*;
import com.example.erp.service.userInfo.LogService;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.stereotype.Service;
import java.awt.*;
import java.time.LocalDate;
import java.util.List;
import java.util.Map;
@@ -48,8 +48,12 @@
    private final OrderDetailMapper orderDetailMapper;
    private final OrderMapper orderMapper;
    private final ReportingWorkMapper reportingWorkMapper;
    public FlowCardService(FlowCardMapper flowCardMapper, OrderGlassDetailMapper orderGlassDetailMapper, OrderProcessDetailMapper orderProcessDetailMapper, LogService logService, ProductMapper productMapper, ProductDetailMapper productDetailMapper, OrderDetailMapper orderDetailMapper, OrderMapper orderMapper) {
    public FlowCardService(FlowCardMapper flowCardMapper, OrderGlassDetailMapper orderGlassDetailMapper,
                           OrderProcessDetailMapper orderProcessDetailMapper, LogService logService,
                           ProductMapper productMapper, ProductDetailMapper productDetailMapper,
                           OrderDetailMapper orderDetailMapper, OrderMapper orderMapper,ReportingWorkMapper reportingWorkMapper) {
        this.flowCardMapper = flowCardMapper;
        this.orderGlassDetailMapper = orderGlassDetailMapper;
        this.orderProcessDetailMapper = orderProcessDetailMapper;
@@ -58,6 +62,7 @@
        this.productDetailMapper = productDetailMapper;
        this.orderDetailMapper = orderDetailMapper;
        this.orderMapper = orderMapper;
        this.reportingWorkMapper = reportingWorkMapper;
    }
    //流程卡管理查询
@@ -1439,6 +1444,26 @@
        map.put("orderOtherMoney", flowCardMapper.selectorderOtherMoney());
        return map;
    }
    public Boolean updateTerminationSv(String processId, Integer orderNumber, Integer value) {
        if (processId!=""){
            flowCardMapper.updateTerminationMp(processId,orderNumber,value);
            return true;
        }else {
            return false;
        }
    }
    public Map<String, Object> selectCompletedSv(String processId, Integer orderNumber, String process) {
        Map<String, Object> map = new HashMap<>();
        String[] processList = process.split("->");
        //获取工艺流程第一个工序
        String interceptProcess = processList[0];
        map.put("data", flowCardMapper.selectCompletedMp(processId, orderNumber,interceptProcess));
        return map;
    }
}
north-glass-erp/src/main/java/com/example/erp/service/pp/GlassOptimizeService.java
@@ -14,7 +14,9 @@
import com.example.erp.entity.userInfo.SysError;
import com.example.erp.mapper.pp.GlassOptimizeMapper;
import com.example.erp.service.userInfo.SysErrorService;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -892,4 +894,58 @@
        return map;
    }
    public Boolean issuingProjects(String projectNo) throws JsonProcessingException {
        boolean  saveState=false;
        try {
            // 1. åˆ›å»ºURL对象
            URL url = new URL("http://localhost:88/api/loadGlass/engineering/importEngineer");
            // 2. æ‰“开连接
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Content-Type", "application/json");
            conn.setRequestProperty("Accept", "application/json");
            conn.setDoOutput(true);
            // 3. å‡†å¤‡è¯·æ±‚体
            Map<String, Object> optimizeProject=glassOptimizeMapper.selectOptimizeProject(projectNo);
            optimizeProject.put("engineeringRawQueueList", glassOptimizeMapper.selectOptimizeLayout(projectNo));
            optimizeProject.put("glassInfolList", glassOptimizeMapper.selectOptimizeDetail(projectNo));
            optimizeProject.put("flowCardInfoList", glassOptimizeMapper.selectFlowCardInfoList(projectNo));
            ObjectMapper mapper = new ObjectMapper();
            mapper.registerModule(new JavaTimeModule());
            String jsonInputString = mapper.writeValueAsString(optimizeProject);
            //发送请求
            try(OutputStream os = conn.getOutputStream()) {
                byte[] input = jsonInputString.getBytes(StandardCharsets.UTF_8);
                os.write(input, 0, input.length);
            }
            // èŽ·å–å“åº”
            try(BufferedReader br = new BufferedReader(
                    new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8))) {
                StringBuilder response = new StringBuilder();
                String responseLine;
                while ((responseLine = br.readLine()) != null) {
                    response.append(responseLine.trim());
                }
                System.out.println("Response: " + response.toString());
                JSONObject obj = JSONObject.parseObject(response.toString());
                if(obj.get("code").equals(200)&&obj.get("data").equals(true)){
                    saveState=true;
                }
            }
            //关闭连接
            conn.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
            saveState= false;
        }
        return saveState;
    }
}
north-glass-erp/src/main/java/com/example/erp/service/pp/ReportService.java
@@ -165,15 +165,15 @@
        }
        List<Map<String, Integer>> getRowCount = orderProcessDetailMapper.getGlassLRow(orderId);
        List<Map<String, Object>> getRowCount = orderProcessDetailMapper.getGlassLRow(orderId);
        List<Map<String, Integer>> rowCount = new ArrayList<>();
        columns.forEach(col -> {
            getRowCount.forEach(row -> {
                Map<String, Integer> getRow = new HashMap<>();
                // { row: 0, col: 1, rowspan: 3, colspan: 0},
                getRow.put("row",  row.get("RowNum"));
                getRow.put("row", ((Number) row.get("RowNum")).intValue());
                getRow.put("col", col);
                getRow.put("rowspan", row.get("rowCount"));
                getRow.put("rowspan", ((Number) row.get("rowCount")).intValue());
                getRow.put("colspan", 0);
                rowCount.add(getRow);
            });
@@ -389,15 +389,15 @@
        map.put("title", uniqueList);
        List<Map<String, Integer>> getRowCount = orderProcessDetailMapper.getGlassLRow(orderId);
        List<Map<String, Object>> getRowCount = orderProcessDetailMapper.getGlassLRow(orderId);
        List<Map<String, Integer>> rowCount = new ArrayList<>();
        columns.forEach(col -> {
            getRowCount.forEach(row -> {
                Map<String, Integer> getRow = new HashMap<>();
                // { row: 0, col: 1, rowspan: 3, colspan: 0},
                getRow.put("row", row.get("RowNum"));
                getRow.put("row", ((Number) row.get("RowNum")).intValue());
                getRow.put("col", col);
                getRow.put("rowspan", row.get("rowCount"));
                getRow.put("rowspan", ((Number) row.get("rowCount")).intValue());
                getRow.put("colspan", 0);
                rowCount.add(getRow);
            });
north-glass-erp/src/main/java/com/example/erp/service/pp/ReportingWorkService.java
@@ -637,6 +637,13 @@
                    log.setOperatorId(userId);
                    log.setOperator(userName);
                    if(reportingWork.getReviewedState()==0){
                        //查询当前报工编号完工次破数量的数据
                        List<Map<String, Object>> workDateList = reportingWorkMapper.reportingWorkDate(reportingWorkId);
                        for (Map<String, Object> item : workDateList) {
                            //更新报工流程表数据
                            reportingWorkMapper.updateWorkProcess(processId, item.get("order_number"), item.get("technology_number"), item.get("completed_quantity"), item.get("breakage_quantity"), thisProcess);
                        }
                        //删除报工,将审核状态改为-1
                        reportingWorkMapper.deleteWork(reportingWorkId);
                        logService.saveLog(log);
                        return true;
north-glass-erp/src/main/java/com/example/erp/service/sd/DeliveryService.java
@@ -10,6 +10,7 @@
import com.example.erp.dto.sd.DeliveryDetailDTO;
import com.example.erp.dto.sd.DeliveryDetailProductDTO;
import com.example.erp.entity.mm.FinishedOperateLog;
import com.example.erp.entity.pp.BasicDataProduce;
import com.example.erp.entity.sd.*;
import com.example.erp.entity.userInfo.Log;
import com.example.erp.entity.userInfo.SysError;
@@ -19,14 +20,23 @@
import com.example.erp.service.mm.FinishedGoodsInventoryService;
import com.example.erp.service.userInfo.LogService;
import com.example.erp.service.userInfo.SysErrorService;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.*;
@@ -58,7 +68,7 @@
    FinishedGoodsInventoryService finishedGoodsInventoryService;
    public Map<String, Object> getSelectShippingOrder(Integer pageNum, Integer pageSize,List<String> selectDate, Delivery delivery) {
    public Map<String, Object> getSelectShippingOrder(Integer pageNum, Integer pageSize,List<String> selectDate, Delivery delivery) throws JsonProcessingException {
        Integer offset = (pageNum - 1) * pageSize;
        String endDate = LocalDate.now().toString();
        String startDate = LocalDate.now().minusDays(15).toString();
@@ -953,4 +963,6 @@
        return oddNumbers;
    }
}
north-glass-erp/src/main/resources/mapper/mm/MaterialInventory.xml
@@ -1297,7 +1297,6 @@
    <select id="getSelectMaterialInventoryMes">
        select
            mi.material_code AS materialCode,
            mi.producer,
            sum(mi.available_quantity) AS quantity,
            JSON_UNQUOTE(JSON_EXTRACT(ms.json, '$.width')) AS width,
            JSON_UNQUOTE(JSON_EXTRACT(ms.json, '$.height')) AS height,
north-glass-erp/src/main/resources/mapper/pp/FolwCard.xml
@@ -484,7 +484,8 @@
               fc.founder,
               date(fc.splitFrame_time)                                             as splitFrame_time,
               ogd.process,
               c.concatNumber
               c.concatNumber,
               ifnull(fc.termination_quantity,0) as termination_quantity
        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
@@ -3544,4 +3545,14 @@
            ORDER BY od.height DESC, od.width DESC
        </if>
    </select>
    <update id="updateTerminationMp">
        update  pp.flow_card fc set fc.termination_quantity=#{value}
        where fc.process_id = #{processId} and fc.order_number=#{orderNumber}
    </update>
    <select id="selectCompletedMp">
        SELECT max(reporting_work_num) FROM  sd.`order_process_detail`
        where process_id=#{processId} and order_number=#{orderNumber} and process=#{interceptProcess}
    </select>
</mapper>
north-glass-erp/src/main/resources/mapper/pp/GlassOptimize.xml
@@ -1637,7 +1637,118 @@
    </delete>
    <select id="selectOptimizeProject">
        select
            project_no as engineerId,
            project_name as engineerName,
            avg_cut_pct as avgAvailability,
            valid_cut_pct as validAvailability,
            last_cut_pct as lastAvailability,
            glass_total as glassTotal,
            glass_total_area as glassTotalArea,
            raw_stock_qty as planPatternTotal,
            raw_stock_area as planPatternTotalArea,
            glass_thickness as thickness,
            glass_type as filmsId
        from
            pp.optimize_project
        where
            project_no = #{projectNo}
    </select>
    <select id="selectOptimizeLayout">
        select
            ol.project_no as engineeringId,
            op.glass_type as filmsId,
            ol.realwidth as rawGlassWidth,
            ol.realheight as rawGlassHeight,
            op.glass_thickness as rawGlassThickness,
            ol.stock_id rawSequence
        from
            pp.optimize_layout ol
                left join pp.optimize_project op on ol.project_no = op.project_no
        where
            ol.project_no = #{projectNo}
        order by
            ol.stock_id
    </select>
    <select id="selectOptimizeDetail">
        select
            opd.glass_id as glassId,
            opd.project_no as engineerId,
            opd.process_id as flowCardId,
            opd.order_sort as orderNumber,
            opd.o_width as width,
            opd.o_height as height,
            op.glass_thickness as thickness,
            op.glass_type as filmsId,
            opd.total_layer as totalLayer,
            opd.layer,
            opd.stock_id as rawSequence,
            opd.p_width as edgWidth,
            opd.p_height as edgHeight,
            opd.x_axis as xAxis,
            opd.y_axis as yAxis,
            if(opd.o_width!=opd.width,1,0) as rawAngle,
            opd.heat_layout_id as temperingLayoutId,
            opd.heat_layout_sort as temperingFeedSequence,
            ohd.x_axis as xCoordinate,
            ohd.y_axis as yCoordinate,
            ohd.rotate_angle as angle,
            IF(LOCATE('中空', ogd.process ) > 0 or LOCATE('夹层', ogd.process ) > 0, 1, 0) as isMultiple,
            od.width as maxWidth,
            od.height as maxHeight,
            opd.mark_icon as markIcon,
            fc.`merge` as combine,
            concat( opd.process_id, '/', opd.layer ) as flowCardSequence,
            ogd.process
        from
            pp.optimize_detail opd
                left join pp.optimize_project op on op.project_no = opd.project_no
                left join pp.flow_card fc on opd.process_id = fc.process_id
                and opd.layer = fc.technology_number
                and opd.order_sort = order_number
                left join sd.`order` o on fc.order_id = o.order_id
                left join sd.order_detail od on fc.order_id = od.order_id
                and fc.order_number = od.order_number
                left join sd.order_glass_detail ogd on fc.order_id = ogd.order_id
                and fc.order_number = ogd.order_number
                and ogd.technology_number = fc.technology_number
                left join pp.optimize_heat_detail ohd on ohd.layout_id = opd.heat_layout_id
                and ohd.sort = opd.heat_layout_sort and ohd.project_no=opd.project_no
        where
            opd.project_no = #{projectNo}
    </select>
    <select id="selectFlowCardInfoList">
        select
            fc.process_id as flowCardId,
            ogd.child_width as width,
            ogd.child_height as height,
            REPLACE (JSON_UNQUOTE( JSON_EXTRACT( pd.separation, '$.thickness' )), 'mm', '' ) as thickness,
            JSON_UNQUOTE(JSON_EXTRACT( pd.separation, '$.color' )) as filmsId,
            fc.layers_number as totalLayer,
            fc.technology_number as layer,
            fc.quantity as glassTotal,
            od.order_number as orderNumber,
            od.product_name as productName,
            o.customer_name as customerName
        from
            pp.flow_card fc
                left join sd.`order` o on fc.order_id = o.order_id
                left join sd.order_detail od on fc.order_id = od.order_id
                and fc.order_number = od.order_number
                left join sd.order_glass_detail ogd on fc.order_id = ogd.order_id
                and fc.order_number = ogd.order_number
                and ogd.technology_number = fc.technology_number
                left join sd.product p on od.product_id = p.id
                left join sd.product_detail pd on od.product_id = pd.prod_id
                and fc.technology_number = pd.glass_sort
        where
            project_no =#{projectNo}
    </select>
north-glass-erp/src/main/resources/mapper/pp/PatchLogMapper.xml
@@ -26,8 +26,8 @@
        ogd.glass_address,
        ogd.glass_child,
        r.patch_num,
        od.width,
        od.height,
        ogd.child_width as width,
        ogd.child_height as height,
        od.shape,
        r.patch_type,
        r.patch_reason,
@@ -82,10 +82,10 @@
                and r.quality_inspector regexp #{patchLog.qualityInspector}
            </if>
            <if test="patchLog.width != null and patchLog.width != ''">
                and od.width regexp #{patchLog.width}
                and ogd.child_width regexp REGEXP_REPLACE(#{patchLog.width},'\\.0+$','')
            </if>
            <if test="patchLog.height != null and patchLog.height != ''">
                and od.height regexp #{patchLog.height}
                and ogd.child_height regexp REGEXP_REPLACE(#{patchLog.height},'\\.0+$','')
            </if>
            <if test="patchLog.shape != null and patchLog.shape != ''">
                and od.shape regexp #{patchLog.shape}
@@ -175,10 +175,10 @@
                and r.quality_inspector regexp #{patchLog.qualityInspector}
            </if>
            <if test="patchLog.width != null and patchLog.width != ''">
                and od.width regexp #{patchLog.width}
                and ogd.child_width regexp REGEXP_REPLACE(#{patchLog.width},'\\.0+$','')
            </if>
            <if test="patchLog.height != null and patchLog.height != ''">
                and od.height regexp #{patchLog.height}
                and ogd.child_height regexp REGEXP_REPLACE(#{patchLog.height},'\\.0+$','')
            </if>
            <if test="patchLog.shape != null and patchLog.shape != ''">
                and od.shape regexp #{patchLog.shape}
@@ -293,8 +293,8 @@
               dd.technology_number as technologyNumber,
               ogd.glass_address as glassAddress,
               dd.breakage_quantity-dd.quantity as patchNum,
               od.width,
               od.height,
                ogd.child_width as width,
                ogd.child_height as height,
               od.shape,
               dd.responsible_process as responsibleProcess,
               rw.this_process as patchProcesses,
@@ -352,10 +352,10 @@
                and rw.quality_inspector regexp #{patchLogAddDTO.qualityInspector}
            </if>
            <if test="patchLogAddDTO.width != null and patchLogAddDTO.width != ''">
                and od.width regexp #{patchLogAddDTO.width}
                and ogd.child_width regexp REGEXP_REPLACE(#{patchLogAddDTO.width},'\\.0+$','')
            </if>
            <if test="patchLogAddDTO.height != null and patchLogAddDTO.height != ''">
                and od.height regexp #{patchLogAddDTO.height}
                and ogd.child_height regexp REGEXP_REPLACE(#{patchLogAddDTO.height},'\\.0+$','')
            </if>
            <if test="patchLogAddDTO.shape != null and patchLogAddDTO.shape != ''">
                and od.shape regexp #{patchLogAddDTO.shape}
north-glass-erp/src/main/resources/mapper/pp/Report.xml
@@ -174,18 +174,18 @@
               c.technology_number,
               b.child_width,
               b.child_height,
              if(c.technology_number=1,c.quantity,0) as quantity,
              if(c.technology_number=1,c.quantity-ifnull(c.termination_quantity,0),0) as quantity,
               c.quantity as thisQuantity,/*用于判断是否改变颜色*/
               c.quantity-ifnull(c.termination_quantity,0) as thisQuantity,/*用于判断是否改变颜色*/
               e.reportWorkQuantity,
               e.reportWorkQuantityShow,
               e.reportWorkQuantityCount,
               e.reportWorkTime,
               e.broken_num,
               c.quantity as glassQuantity,
               c.quantity-ifnull(c.termination_quantity,0) as glassQuantity,
               c.quantity as quantityShow,
               c.quantity*a.area as grossAreaShow,
               c.quantity-ifnull(c.termination_quantity,0) as quantityShow,
               (c.quantity-ifnull(c.termination_quantity,0))*a.area as grossAreaShow,
               ifnull(f.inventory, 0) as inventoryShow,
               round(ifnull(f.inventory, 0) * a.area, 2) as inventoryAreaShow,
               ifnull(dd.quantity, 0) as shippedQuantityShow,
@@ -244,7 +244,7 @@
                           on e.process_id = c.process_id
                               and e.technology_number = c.technology_number
                               and e.order_number = c.order_number
        where a.order_id = #{orderId} and d.create_order>0
        where a.order_id = #{orderId} and d.create_order>0 and c.quantity-ifnull(c.termination_quantity,0)>0
        group by c.order_number,
                 c.technology_number,
                 c.process_id
@@ -550,14 +550,14 @@
               ogd.glass_child,
               ogd.child_width,
               ogd.child_height,
               fc.quantity,
               fc.quantity - ifnull(fc.termination_quantity,0) as quantity,
               ROUND(ogd.child_width * ogd.child_height / 1000000, 2)               as childArea,
               ROUND(ogd.child_width * ogd.child_height * fc.quantity / 1000000, 2) as actualArea,
               ROUND(ogd.child_width * ogd.child_height * (fc.quantity- ifnull(fc.termination_quantity,0)) / 1000000, 2) as actualArea,
               odpd.reporting_work_num                                              as completeNum,
               ROUND(ogd.child_width * ogd.child_height * odpd.reporting_work_num / 1000000,
                     2)                                                             as completeArea,
               fc.quantity - odpd.reporting_work_num                                as incompleteNum,
               ROUND(ogd.child_width * ogd.child_height * (fc.quantity - odpd.reporting_work_num) / 1000000,
               fc.quantity - odpd.reporting_work_num - ifnull(fc.termination_quantity,0)      as incompleteNum,
               ROUND(ogd.child_width * ogd.child_height * (fc.quantity - odpd.reporting_work_num- ifnull(fc.termination_quantity,0)) / 1000000,
                     2)                                                             as incompleteArea,
               od.product_name
@@ -584,6 +584,7 @@
          and position(#{orderId} in od.order_id)
          and position(#{inputProject} in o.project)
          and GREATEST(fc.quantity - odpd.reporting_work_num, 0)>0
          and fc.quantity-ifnull(fc.termination_quantity,0)>0
        group by fc.process_id, fc.order_number, fc.technology_number
        order by fc.process_id, fc.order_number, fc.technology_number
@@ -818,7 +819,7 @@
               a.product_name,
               b.child_width,
               b.child_height,
               c.quantity,
               c.quantity - ifnull(c.termination_quantity,0) as quantity,
               c.technology_number,
               b.glass_child,
               ifnull(e.reportWorkQuantity, 0)                      as reportWorkQuantity,
@@ -861,7 +862,7 @@
                                and   e.order_number=c.order_number
                               and e.technology_number = c.technology_number
                 left join sd.delivery_detail as dd on dd.order_id = a.order_id and dd.order_number = a.order_number
        where a.order_id = #{orderId} and d.create_order>0
        where a.order_id = #{orderId} and d.create_order>0 and c.quantity - ifnull(c.termination_quantity,0)>0
        group by c.order_number,c.technology_number
        ORDER BY a.order_number
    </select>
north-glass-erp/src/main/resources/mapper/pp/ReportingWork.xml
@@ -135,8 +135,8 @@
            ogd.child_width,
            ogd.child_height,
            if(od.shape=1,'普形',if(od.shape=2,'异形','')) as shape,
            fc.quantity -fc.export_number + ifnull(patch.patch_num,0) -odpd.reporting_work_num -odpd.broken_num   as quantity,
            fc.quantity -fc.export_number + ifnull(patch.patch_num,0) -odpd.reporting_work_num -odpd.broken_num   as completedQuantity,
            fc.quantity -fc.export_number + ifnull(patch.patch_num,0) -odpd.reporting_work_num -odpd.broken_num - ifnull(fc.termination_quantity,0)  as quantity,
            fc.quantity -fc.export_number + ifnull(patch.patch_num,0) -odpd.reporting_work_num -odpd.broken_num - ifnull(fc.termination_quantity,0)   as completedQuantity,
            odpd.reporting_work_num as completed,
            odpd.broken_num as onceBroken,
            if(fc.quantity -odpd.reporting_work_num = 0 ,true,false) as saveFlag, -- åˆ¤æ–­æ˜¯å¦å·²ç»å®Œæˆï¼Œå·²ç»å®Œæˆä¸åºå·å’ŒåŒåºå·æ•°é‡ç›¸åŒæ‰èƒ½æäº¤
@@ -178,7 +178,7 @@
          AND  POSITION(fc.technology_number in #{technologyStr})
          AND odpd.process = #{process}
          and if(#{reportType}=1,o.order_type!='样品订单',o.order_id!='')
        and o.create_order>0
        and o.create_order>0 and fc.quantity - ifnull(fc.termination_quantity,0)>0
        group by fc.order_number,
                 ogd.technology_number
        order by fc.order_number
north-glass-erp/src/main/resources/mapper/sd/DeliveryMapper.xml
@@ -372,4 +372,7 @@
        where delivery_id = #{deliveryId}
    </update>
</mapper>