jcdm-admin/src/main/resources/application-druid.yml
@@ -28,7 +28,7 @@ # username: dt # password: dtroot master: url: jdbc:sqlserver://192.168.6.238:1433;DataBaseName=Jcdm041-Mes url: jdbc:sqlserver://192.168.6.238:1433;DataBaseName=Jcdm041-Mes2 username: dt password: dtroot # 从库数据源 jcdm-main/src/main/java/com/jcdm/main/bs/orderScheduling/controller/BsOrderSchedulingController.java
@@ -476,4 +476,27 @@ } } @GetMapping("/changeBoxCode") public R changeBoxCode(String sfcCode,String newBoxCode){ if (StringUtils.isEmpty(newBoxCode)){ return R.fail(500,"箱体码不能为空,请重试"); } if (StringUtils.isEmpty(sfcCode)){ return R.fail(500,"发动机号不能为空,请重试"); } if (!newBoxCode.contains(",")){ return R.fail(500,"箱体码格式有误,请重试"); } ProductNewPassStation checkStation = new ProductNewPassStation(); checkStation.setSfcCode(sfcCode); List<ProductNewPassStation> productPassStationList = productNewPassStationService.getProductPassStationList(checkStation); if (CollUtil.isNotEmpty(productPassStationList)){ productNewPassStationService.updateBoxCodeBySfcCode(sfcCode, newBoxCode); return R.ok(); } else { return R.fail("未查找到该发动机号对应的箱体"); } } } jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/mapper/ProductNewPassStationMapper.java
@@ -24,6 +24,7 @@ public List<ProductNewPassStation> getProductPassStationListByEngineList(@Param("engineNoList") List<String> engineNoList); public void updatePassStationBySfcCode(String sfcCode); public void updateBoxCodeBySfcCode(@Param("sfcCode") String sfcCode, @Param("newBoxCode") String newBoxCode); public void updatePassStationRodCodeBySfcCode(String sfcCode); } jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/service/ProductNewPassStationService.java
@@ -20,6 +20,7 @@ public List<ProductNewPassStation> getProductPassStationListByEngineList(List<String> engineNoList); public void updatePassStationBySfcCode(String sfcCode); public void updateBoxCodeBySfcCode(String sfcCode,String newBoxCode); public void insertPassStation(ProductNewPassStation productNewPassStation); jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/service/impl/DaPassingStationCollectionServiceImpl.java
@@ -225,6 +225,7 @@ rmRepairRecordMapper.deleteRmRepairRecordByCode(sfcCode); } } if (ObjectUtil.isNotEmpty(result)){ RmRepairRecord rmRepairRecord = new RmRepairRecord(); rmRepairRecord.setBoxCode(result.getSfcCode()); rmRepairRecord.setProcessesCode(result.getLocationCode()); @@ -233,6 +234,7 @@ rmRepairRecordMapper.insertRmRepairRecord(rmRepairRecord); daPassingStationCollectionMapper.deleteDaPassingStationCollectionById(result.getId()); } } } @Override jcdm-main/src/main/java/com/jcdm/main/da/passingStationCollection/service/impl/ProductNewPassStationServiceImpl.java
@@ -42,6 +42,11 @@ } @Override public void updateBoxCodeBySfcCode(String sfcCode, String newBoxCode) { productNewPassStationMapper.updateBoxCodeBySfcCode(sfcCode, newBoxCode); } @Override public void insertPassStation(ProductNewPassStation productNewPassStation) { productNewPassStationMapper.insertPassStation(productNewPassStation); } jcdm-main/src/main/java/com/jcdm/main/om/productionOrde/controller/OmProductionOrdeInfoController.java
@@ -264,8 +264,11 @@ if (StrUtil.isBlank(factory)){ throw new ServiceException("请选择工厂编号"); } List<OmProductionOrdeInfo> omProductionOrdeInfos = omProductionOrdeInfoService.selectOmProductionOrdeInfoList(omProductionOrdeInfo); if(omProductionOrdeInfos.size() == 0){ OmProductionOrdeInfo queryProductOrder = new OmProductionOrdeInfo(); queryProductOrder.setWorkshopCode(factory); queryProductOrder.setProductionNotice(productionNotice); List<OmProductionOrdeInfo> omProductionOrdeInfos = omProductionOrdeInfoService.selectOmProductionOrdeInfoList(queryProductOrder); if(CollUtil.isEmpty(omProductionOrdeInfos)){ try { logger.info("接收工单号:,{}",productionNotice); ReceivingServices.insertWebserviceData(factory,productionNotice); jcdm-main/src/main/java/com/jcdm/main/webservice/service/ReceivingServices.java
@@ -31,9 +31,8 @@ import org.springframework.web.bind.annotation.RestController; import javax.swing.border.Border; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.io.*; import java.nio.charset.StandardCharsets; import java.util.List; public class ReceivingServices { @@ -176,7 +175,7 @@ } // 设置请求头部,否则可能会报 “no SOAPAction header” 的错误 postMethod.setRequestHeader("SOAPAction", ""); postMethod.setRequestHeader("SOAPAction", "application/x-www-form-urlencoded; charset=UTF-8"); // 设置请求体 postMethod.setRequestEntity(requestEntity); int status = 0; @@ -188,19 +187,14 @@ } if (status == 200) {// 成功 InputStream is = null; try { is = postMethod.getResponseBodyAsStream(); } catch (IOException e) { logger.info("errorLocation2,"+e); throw new RuntimeException(e); } // 获取请求结果字符串 String result = null; try { result = IOUtils.toString(is); result = postMethod.getResponseBodyAsString(); logger.info("二次输出流333333,{}",result); return result; } catch (IOException e) { logger.info("errorLocation3,"+e); logger.info("errorLocation2,"+e); throw new RuntimeException(e); } } jcdm-main/src/main/resources/mapper/da/passingStationCollection/ProductNewPassStationMapper.xml
@@ -64,6 +64,9 @@ <update id="updatePassStationRodCode"> update product_new_pass_station set rod_code = #{rodCode} where sfc_code = #{sfcCode} </update> <update id="updateBoxCodeBySfcCode"> update product_new_pass_station set box_code = #{newBoxCode} where sfc_code = #{sfcCode} </update> <select id="getPassStation" resultMap="ProductNewPassStationResult"> <include refid="selectProductNewPassStationVo"/> jcdm-quartz/src/main/java/com/jcdm/quartz/task/RyTask.java
@@ -95,7 +95,8 @@ List<BsOrderScheduling> bsOrderSchedulings = bsOrderSchedulingService.selectBsOrderSchedulingList(bsOrderScheduling); String status=""; String ev_meassage=""; for (BsOrderScheduling orderScheduling : bsOrderSchedulings) { if (CollUtil.isNotEmpty(bsOrderSchedulings)){ BsOrderScheduling orderScheduling = bsOrderSchedulings.get(0); try { String xmlResult = ReceivingServices.getInterfaceInformationXml(url, getProductionPlanInformationXml(orderScheduling.getOrderNo(), "0010")); ev_meassage=ReceivingServices.xmlToJSON1(xmlResult); @@ -135,7 +136,8 @@ List<BsOrderScheduling> bsOrderSchedulings = bsOrderSchedulingService.selectBsOrderSchedulingList(bsOrderScheduling); String status=""; String ev_meassage=""; for (BsOrderScheduling orderScheduling : bsOrderSchedulings) { if (CollUtil.isNotEmpty(bsOrderSchedulings)){ BsOrderScheduling orderScheduling = bsOrderSchedulings.get(0); try { String xmlResult = ReceivingServices.getInterfaceInformationXml(url, getProductionPlanInformationXml(orderScheduling.getOrderNo(), "0020")); ev_meassage=ReceivingServices.xmlToJSON1(xmlResult); jcdm-ui/src/api/main/bs/orderScheduling/orderScheduling.js
@@ -67,6 +67,13 @@ params: param }) } export function changeBoxCode(param) { return request({ url: '/bs/orderScheduling/changeBoxCode', method: 'get', params: param }) } // 查询订单排产详细 export function getOrderScheduling(id) { jcdm-ui/src/views/main/om/productionOrde/detail.vue
@@ -70,7 +70,14 @@ <span>{{ parseTime(scope.row.operateTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span> </template> </el-table-column> <el-table-column fixed="right" label="操作" width="100"> <template slot-scope="scope"> <el-button @click="handleClick(scope.row)" type="text" size="small">更换箱体上线</el-button> </template> </el-table-column> </el-table> <pagination v-show="total>0" @@ -84,18 +91,51 @@ </el-col> </el-row> </div> <el-dialog v-dialogpop-up :title="title" :visible.sync="changeBoxFlag" width="500px" append-to-body> <span slot="title"> <i class="el-icon-s-order"></i> {{titleName}} </span> <el-form ref="changeFrom" inline :model="changeFrom" label-width="80px"> <el-form-item label="发动机号" prop="sfcCode"> <el-input disabled v-model="changeFrom.sfcCode" style="width: 370px"/> </el-form-item> <el-form-item label="原箱体码" prop="boxCode"> <el-input disabled v-model="changeFrom.boxCode" style="width: 370px"/> </el-form-item> <el-form-item label="现箱体码" v-model="changeFrom.newBoxCode" prop="newBoxCode"> <input v-model="changeFrom.newBoxCode" ref="changeBoxInput" style="height: 39px; width: 370px" placeholder="请扫描箱体码" /> </el-form-item> </el-form> <div slot="footer" class="dialog-footer"> <el-button type="primary" @click="submitFormForBoxCode">确 定</el-button> <el-button @click="cancel">取 消</el-button> </div> </el-dialog> </div> </template> <script> import { engineNoIsInModel, getSumDataMethod, listOrderScheduling3 } from "../../../../api/main/bs/orderScheduling/orderScheduling"; import { engineNoIsInModel, changeBoxCode, getSumDataMethod, listOrderScheduling3 } from "../../../../api/main/bs/orderScheduling/orderScheduling"; export default { name: 'Detail', props: ['singleSelect'], dicts: ['order_scheduling_produce_status','quality_status','print_status','material_type'], data(){ return{ title: '更换箱体', changeBoxFlag: false, titleName: '更换箱体', changeFrom: { boxCode: '', newBoxCode: '', sfcCode: '' }, // 总条数 total: 0, repairFlag:false, @@ -115,8 +155,53 @@ handleQuery(){ }, submitFormForBoxCode(){ if (this.changeFrom.newBoxCode === '' || this.changeFrom.newBoxCode === null){ this.$message.info("新箱体码不能为空") } else { changeBoxCode({sfcCode:this.changeFrom.sfcCode,newBoxCode:this.changeFrom.newBoxCode}).then(res => { console.log('res',res) if (res.code===200){ this.$message({ message:'操作成功', type:'success' }) this.changeBoxFlag = false this.getListData() this.$refs.inputdata.focus() }else { this.$message({ message:res.msg, type:'warning' }) } }) } }, handleClick(row){ console.log('row',row) this.changeBoxFlag = true this.changeFrom.sfcCode = row.engineNo this.changeFrom.boxCode = row.boxCode this.changeFrom.newBoxCode = '' this.$nextTick(()=>{ this.$refs.changeBoxInput.focus() }) }, cancel(){ this.changeBoxFlag = false this.$refs.inputdata.focus() }, handleChangeBoxInput(event){ const input = event.target const inputValue = input.value this.changeFrom.newBoxCode = inputValue }, refresh() { location.reload(); this.$emit("reserveChild",null) }, setFocus(){ this.$nextTick(()=>{ @@ -173,9 +258,11 @@ this.getListData() this.setFocus() this.$refs.inputdata.addEventListener('keydown',this.handleScannerInput) this.$refs.changeBoxInput.addEventListener('keydown',this.handleChangeBoxInput) }, beforeDestroy() { this.$refs.inputdata.removeEventListener('keydown',this.handleScannerInput) this.$refs.changeBoxInput.removeEventListener('keydown',this.handleChangeBoxInput) } } </script> jcdm-ui/src/views/main/om/productionOrde/index.vue
@@ -41,7 +41,13 @@ </el-form> <el-form :model="queryParams" ref="queryParams" size="small" :inline="true" v-show="advancedShowSearch" label-width="68px"> <el-form-item label="机型" prop="typeZ"> <el-input v-model="queryParams.typeZ" placeholder="请输入机型" clearable @keyup.enter.native="handleQuery"/> <el-select v-model="queryParams.typeZ" placeholder="请选择机型" clearable> <el-option v-for="dict in typeSelectList" :key="dict.value" :label="dict.label" :value="dict.value"/> </el-select> </el-form-item> <el-form-item label-width="130" label="发动机号" prop="engineNo"> <el-input v-model="queryParams.engineNo" placeholder="请输入发动机号" clearable @keyup.enter.native="handleQuery"/> @@ -51,16 +57,6 @@ <el-card style="margin-top: 10px" class="box-card"> <el-row :gutter="10" class="mb8"> <el-col :span="1.5"> <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" v-hasPermi="['om:productionOrde:add']" >新增</el-button> </el-col> <el-col :span="1.5"> <el-button type="success" @@ -185,16 +181,13 @@ </span> <el-form ref="form" inline :model="form" :rules="rules" label-width="80px"> <el-form-item label="工单号" prop="workOrderNo"> <el-input v-model="form.workOrderNo" placeholder="请输入生产订单" /> <el-input v-model="form.workOrderNo" disabled placeholder="请输入生产订单" /> </el-form-item> <el-form-item label="订单编号" prop="salesOrderCode"> <el-input v-model="form.salesOrderCode" placeholder="请输入订单编号" /> <el-form-item label="订单编号" prop="productionNotice"> <el-input v-model="form.productionNotice" disabled placeholder="请输入订单编号" /> </el-form-item> <el-form-item label="产品编号" prop="productCode"> <el-input v-model="form.productCode" placeholder="请选择产品" > <el-button slot="append" @click="handleSelectProduct" icon="el-icon-search"></el-button> </el-input> <ItemSelect ref="itemSelect" @onSelected="onItemSelected" > </ItemSelect> <el-input v-model="form.productCode" disabled placeholder="请输入产品编号" /> </el-form-item> <el-form-item label="产品名称" prop="productName"> <el-input v-model="form.productName" disabled placeholder="请输入产品名称" /> @@ -202,75 +195,17 @@ <el-form-item label="种类" prop="productName"> <el-input v-model="form.typeZ" disabled placeholder="请输入种类" /> </el-form-item> <el-form-item label="实际数量" prop="actualQty"> <el-input v-model="form.actualQty" placeholder="请输入实际数量" /> </el-form-item> <el-form-item label="车间编号" prop="workshopCode"> <el-select style="width: 93%" @change="handleSelectChange(form.workshopCode)" v-model="form.workshopCode" placeholder="请选择车间编号"> <el-form-item label="工单状态" prop="orderStatus"> <el-select style="width: 93%" v-model="form.orderStatus" placeholder="请选择工单状态"> <el-option v-for="item in options" :key="item.workshopCode" :label="item.workshopName" :value="item.workshopCode"> v-for="item in statuOptions" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select> </el-form-item> <el-form-item style="margin-left: -15px" label="产线编号" prop="lineCode"> <el-select style="width: 93%" v-model="form.lineCode" placeholder="请选择产线编号"> <el-option v-for="item in lineOptions" :key="item.lineCode" :label="item.lineName" :value="item.lineCode"> </el-option> </el-select> </el-form-item> <el-form-item label="工艺流程" prop="routeCode"> <el-input v-model="form.routeCode" disabled placeholder="请输入工艺流程" /> </el-form-item> <el-form-item label="产品BOM" prop="bomCode"> <el-input v-model="form.bomCode" disabled placeholder="请输入产品BOM" /> </el-form-item> <el-form-item label="工艺配方" prop="recipeCode"> <el-input v-model="form.recipeCode" placeholder="请输入工艺配方" /> </el-form-item> <el-form-item label="计划数量" prop="planQty"> <el-input v-model="form.planQty" placeholder="请输入计划数量" /> </el-form-item> <el-form-item label="需求日期" prop="demandDate"> <el-date-picker style="width: 88%" clearable v-model="form.demandDate" type="date" value-format="yyyy-MM-dd" placeholder="请选择需求日期"> </el-date-picker> </el-form-item> <el-form-item style="margin-left: -30px" label="备注" prop="remarks"> <el-input v-model="form.remarks" placeholder="请输入备注" /> </el-form-item> <el-row> <el-col :span="12"> <el-form-item style="margin-left: 10px" label-width="120" label="计划开始时间" prop="planStartTime"> <el-date-picker clearable v-model="form.planStartTime" type="date" value-format="yyyy-MM-dd" placeholder="请选择计划开始时间"> </el-date-picker> </el-form-item> </el-col> <el-col :span="12"> <el-form-item style="margin-left: 76px" label-width="120" label="计划结束时间" prop="planEndTime"> <el-date-picker clearable v-model="form.planEndTime" type="date" value-format="yyyy-MM-dd" placeholder="请选择计划结束时间"> </el-date-picker> </el-form-item> </el-col> </el-row> </el-form> <div slot="footer" class="dialog-footer"> <el-button type="primary" @click="submitForm">确 定</el-button> @@ -278,7 +213,7 @@ </div> </el-dialog> <el-dialog v-dialogpop-up :title="title" :visible.sync="Createopen" width="400px" append-to-body> <el-dialog v-dialogpop-up :title="title" :visible.sync="Createopen" width="500px" append-to-body> <span slot="title"> <i class="el-icon-s-order"></i> {{titleName}} @@ -292,14 +227,14 @@ v-model="form.dateTime" type="date" value-format="yyyy-MM-dd" placeholder="请选择日期" @input="handleCodeChange"> placeholder="请选择日期" @input="handleCodeChangeData"> </el-date-picker> </el-form-item> <el-form-item class="hidden-form-item" label="日期规则" prop="dateTimeRule"> <el-input v-model="form.dateTimeRule"/> </el-form-item> <el-form-item label="起始编号" prop="startCode"> <el-input type="number" :maxlength="3" :pattern="'[0-9]{3}'" v-model="form.startCode" placeholder="请输入起始编号" @input="handleCodeChange"/> <el-input type="number" :maxlength="3" :pattern="'[0-9]{3}'" v-model="form.startCode" placeholder="请输入起始编号" @input="handleCodeChangeStart"/> </el-form-item> <el-form-item label="起止编号" prop="startEndCode"> <el-input type="textarea" disabled v-model="form.startEndCode"/> @@ -311,7 +246,7 @@ </div> </el-dialog> </div> <Detail v-if="showDetailFlag" :singleSelect="singleSelect"></Detail> <Detail v-if="showDetailFlag" :singleSelect="singleSelect" @reserveChild = "reserveChild"></Detail> </div> </template> @@ -343,6 +278,27 @@ }, data() { return { statuOptions:[ { label:"待下达", value:"1" }, { label:"已下达", value:"2" } ], typeSelectList: [ { label:"380", value:"380" }, { label:"280", value:"280" } ], typeZDateRules: '', showDetailFlag: false, singleSelect:{}, titleName: '', @@ -431,12 +387,6 @@ year: [ { required: true, message: "不能为空", trigger: "blur" } ], dateTime: [ { required: true, message: "不能为空", trigger: "blur" } ], startCode: [ { required: true, message: "不能为空", trigger: "blur" } ], }, change: { day: '', @@ -478,22 +428,21 @@ this.initWorkshop(); }, methods: { //日期或开始编号输入时 handleCodeChange(data){ reserveChild(){ this.showDetailFlag = false }, handleCodeChangeData(){ console.log('1111111111111111') let dateTime = this.form.dateTime; let planQty = this.form.planQty; let startCode = this.form.startCode if(dateTime !== null && dateTime !== undefined && startCode !== null && startCode !== undefined) { let dateTimeRule = ""; if(dateTime !== null && dateTime !== undefined){ let dateTimes = dateTime.split("-"); let year = dateTimes[0]; let month = dateTimes[1]; let day = dateTimes[2]; let dictYear = this.dict.type.year; let dictMonth = this.dict.type.month; let startCode = this.form.startCode let dateTimeRule = ""; //年 for (let i = 0; i < dictYear.length; i++) { if (year === dictYear[i].label) { @@ -512,10 +461,31 @@ dateTimeRule = dateTimeRule + this.markNo; this.form.dateTimeRule = dateTimeRule;//此处赋值不加机型 dateTimeRule = this.form.typeZ +" "+dateTimeRule;//此处加机型,顺序不能颠倒 //赋值起始编码 this.form.startEndCode = dateTimeRule + String(parseInt(startCode)).padStart(3, '0') +"\n"+ dateTimeRule + String(parseInt(startCode) + parseInt(planQty)-1).padStart(3, '0') ; } if (this.form.typeZ !== null && this.form.typeZ !== '' && dateTimeRule !== null && dateTimeRule !== '' ){ this.typeZDateRules = dateTimeRule console.log('222222222222') let queryParams = { model: this.form.typeZ, modelDate: this.form.dateTimeRule, } listModelNumber(queryParams).then(response => { if(response.rows.length === 0){ this.form.startCode = 1 }else { let max = response.rows[0].maxnumValue this.form.startCode = parseInt(max) + 1 } this.form.startEndCode = this.typeZDateRules + String(parseInt(this.form.startCode)).padStart(3, '0') +"\n"+ this.typeZDateRules + String(parseInt(this.form.startCode) + parseInt(planQty)-1).padStart(3, '0') ; }); } }, handleCodeChangeStart(){ let planQty = this.form.planQty; console.log('planQty',planQty) //赋值起始编码 this.form.startEndCode = this.typeZDateRules + String(parseInt(this.form.startCode)).padStart(3, '0') +"\n"+ this.typeZDateRules + String(parseInt(this.form.startCode) + parseInt(planQty)-1).padStart(3, '0') ; }, getProductionNotice(){ @@ -743,8 +713,15 @@ console.log(response.data.productCode) this.materialQueryParams.materialCode = response.data.productCode; listMaterial(this.materialQueryParams).then(response => { console.log("res2121",response) if (response.rows.length === 0){ this.$message.error('未查找到物料编码对应编号!'); this.cancel() } else { this.markNo = response.rows[0].mark this.form.typeL = response.rows[0].typeL; } }); this.form = response.data; this.form.idNums=id; @@ -790,16 +767,21 @@ /** 生成箱体条码提交按钮 */ submitFormForBoxCode() { if (this.form.startCode === null || this.form.startCode === ''){ this.$message.error('起始编号不能为空!'); return; } let startCode = parseInt(this.form.startCode); let queryParams = { model: this.form.typeZ, modelDate: this.form.dateTimeRule, } if(startCode>999){ this.$message.error('起始编号超出最大范围,请输入1-999的数字!'); return; }else if(startCode<1){ this.$message.error('起始编号超出最小范围,请输入1-999的数字!'); this.$message.error('请输入1-999的数字!'); return; } listModelNumber(queryParams).then(response => {