diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/vehicle/dao/MdPbBucketrecord.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/vehicle/dao/MdPbBucketrecord.java index 366d7cb6..d1d3b351 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/vehicle/dao/MdPbBucketrecord.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/vehicle/dao/MdPbBucketrecord.java @@ -126,7 +126,7 @@ public class MdPbBucketrecord implements Serializable { /** * 存储载具标识 */ - private Long storagevehicle_id; + private String storagevehicle_id; /** * 存储载具编码 diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/vehicle/impl/MdPbBucketrecordServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/vehicle/impl/MdPbBucketrecordServiceImpl.java index f930d511..d63355d7 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/vehicle/impl/MdPbBucketrecordServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/vehicle/impl/MdPbBucketrecordServiceImpl.java @@ -67,7 +67,7 @@ public class MdPbBucketrecordServiceImpl extends ServiceImpl(HttpStatus.OK); } + @PostMapping("/cancelConfirmvehicle") + @Log("取消组盘") + @ApiOperation("取消组盘") + public ResponseEntity cancelConfirmvehicle(@RequestBody JSONObject whereJson){ + iStIvtIostorinvCpService.cancelConfirmvehicle(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } + @PostMapping("/divStruct") @Log("分配") @ApiOperation("分配") diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/IStIvtIostorinvCpService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/IStIvtIostorinvCpService.java index d82b7976..d5a191a2 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/IStIvtIostorinvCpService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/IStIvtIostorinvCpService.java @@ -91,6 +91,15 @@ public interface IStIvtIostorinvCpService extends IService { */ void confirmvehicle(JSONObject whereJson); + /** + * 取消组盘 + * @param whereJson + * { + * "dtl_row":{明细对象..} + * } + */ + void cancelConfirmvehicle(JSONObject whereJson); + /** * 删除 * @param ids @@ -144,4 +153,5 @@ public interface IStIvtIostorinvCpService extends IService { * } */ void confirm(JSONObject whereJson); + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvCpServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvCpServiceImpl.java index 2789151f..04a85910 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvCpServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvCpServiceImpl.java @@ -7,6 +7,7 @@ import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import io.jsonwebtoken.lang.Assert; @@ -202,6 +203,14 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl().lambda() + .eq(StIvtIostorinvdisCp::getIostorinvdtl_id, jsonDtl.getString("iostorinvdtl_id")) + ); + if (ObjectUtil.isNotEmpty(disIs)) throw new BadRequestException("此明细已组盘"); + List disDtlList = tableDisDtl .stream() .map(row -> (JSONObject) row) @@ -302,6 +311,55 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl disDaoList = iostorinvdisCpService.list( + new QueryWrapper().lambda() + .eq(StIvtIostorinvdisCp::getIostorinvdtl_id, whereJson.getString("iostorinvdtl_id")) + ); + + if (ObjectUtil.isEmpty(disDaoList)) throw new BadRequestException("没有可取消组盘的分配明细!"); + + boolean is_struct = disDaoList.stream() + .anyMatch(row -> ObjectUtil.isNotEmpty(row.getStruct_id())); + + if (is_struct) throw new BadRequestException("有分配明细已分配货位不可取消组盘!"); + + // 2.更新载具扩展属性、 箱记录 + Map> collect = disDaoList.stream().collect(Collectors.groupingBy(StIvtIostorinvdisCp::getStoragevehicle_code)); + + for (String storagevehicle_code : collect.keySet()) { + // 更新载具扩展属性 + iMdPbStoragevehicleextService.update( + new UpdateWrapper().lambda() + .set(MdPbStoragevehicleext::getMaterial_id, "") + .set(MdPbStoragevehicleext::getStorage_qty, "0") + .eq(MdPbStoragevehicleext::getStoragevehicle_code, storagevehicle_code) + ); + + // 更新箱记录表 + iMdPbBucketrecordService.update( + new UpdateWrapper().lambda() + .set(MdPbBucketrecord::getStoragevehicle_code, "") + .set(MdPbBucketrecord::getStatus, MasterEnum.BOX_STATUS.code("生成")) + .set(MdPbBucketrecord::getStoragevehicle_id, "") + .eq(MdPbBucketrecord::getStatus, MasterEnum.BOX_STATUS.code("组盘")) + .eq(MdPbBucketrecord::getStoragevehicle_code, storagevehicle_code) + ); + } + + // 3.删除分配表 + iostorinvdisCpService.remove( + new QueryWrapper().lambda() + .eq(StIvtIostorinvdisCp::getIostorinvdtl_id, whereJson.getString("iostorinvdtl_id")) + ); + + } + + @Override + @Transactional(rollbackFor = Exception.class) public void delete(Long[] ids) { for (Long id : ids) { @@ -331,7 +389,7 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl - + @@ -99,6 +99,7 @@ import crudProductIn from '@/views/wms/storage_manage/product/productIn/producti const start = new Date() export default { name: 'AddBox', + dicts: ['BOX_STATUS'], components: { crudOperation, rrOperation, pagination, DateRangePicker }, cruds() { return CRUD({ @@ -155,6 +156,9 @@ export default { this.$emit('update:dialogShow', false) this.rows = this.$refs.multipleTable.selection this.$emit('tableChanged2', this.tableRadio) + }, + formterStatus(row) { + return this.dict.label.BOX_STATUS[row.status] } } } diff --git a/mes/qd/src/views/wms/storage_manage/product/productIn/AddDtl.vue b/mes/qd/src/views/wms/storage_manage/product/productIn/AddDtl.vue index 5cfb6f20..97b93c6b 100644 --- a/mes/qd/src/views/wms/storage_manage/product/productIn/AddDtl.vue +++ b/mes/qd/src/views/wms/storage_manage/product/productIn/AddDtl.vue @@ -70,8 +70,8 @@ - - + + @@ -106,6 +106,7 @@ import crudProductIn from '@/views/wms/storage_manage/product/productIn/producti const start = new Date() export default { name: 'AddDtl', + dicts: ['PCS_SAL_TYPE', 'PCS_SALE_STATUS'], components: { crudOperation, rrOperation, pagination, DateRangePicker }, cruds() { return CRUD({ @@ -160,6 +161,12 @@ export default { this.$emit('update:dialogShow', false) this.rows = this.$refs.multipleTable.selection this.$emit('tableChanged', this.tableRadio) + }, + formterType(row) { + return this.dict.label.PCS_SAL_TYPE[row.sale_type] + }, + formterStatus(row) { + return this.dict.label.PCS_SALE_STATUS[row.status] } } } diff --git a/mes/qd/src/views/wms/storage_manage/product/productIn/DivDialog.vue b/mes/qd/src/views/wms/storage_manage/product/productIn/DivDialog.vue index c16f7a52..474aade3 100644 --- a/mes/qd/src/views/wms/storage_manage/product/productIn/DivDialog.vue +++ b/mes/qd/src/views/wms/storage_manage/product/productIn/DivDialog.vue @@ -85,6 +85,7 @@ 组盘确认 + + 取消组盘 + import CRUD, { crud } from '@crud/crud' -import StructDiv from '@/views/wms/pub/StructDialog' +import StructDiv from '@/views/wms/storage_manage/product/productIn/StructDiv' import crudProductIn from '@/views/wms/storage_manage/product/productIn/productin' import crudPoint from '@/views/wms/scheduler_manage/point/point' import AddBox from '@/views/wms/storage_manage/product/productIn/AddBox' @@ -474,6 +485,22 @@ export default { }) }) }, + cancelConfirmvehicle() { + if (!this.form.dtl_row) { + this.crud.notify('请选择一条明细', CRUD.NOTIFICATION_TYPE.INFO) + return + } + crudProductIn.cancelConfirmvehicle(this.form.dtl_row).then(res => { + crudProductIn.getIosInvDtl({ 'iostorinv_id': this.form.dtl_row.iostorinv_id }).then(res => { + this.form.vehicle_code = '' + this.form.bucketunique = '' + this.openParam = res + this.form.tableMater = [] + this.dis_row = null + this.crud.notify('取消成功!', CRUD.NOTIFICATION_TYPE.SUCCESS) + }) + }) + }, sectQueryChange(val) { debugger this.sectProp = val @@ -493,20 +520,17 @@ export default { tableChanged(row) { this.form.sect_id = this.sect_id this.form.stor_id = this.stor_id - // 新增一行物料时,给行进行赋值 - for (let i = 0; i < this.form.tableMater.length; i++) { - this.form.tableMater[i].struct_id = row.point_id - this.form.tableMater[i].struct_code = row.point_code - this.form.tableMater[i].struct_name = row.point_name - this.form.tableMater[i].region_code = row.region_code - this.form.tableMater[i].region_name = row.region_name - this.form.tableMater.splice(i, 1, this.form.tableMater[i]) // 通过splice 替换数据 触发视图更新 - } - crudProductIn.divStruct(this.form).then(res => { - crudProductIn.getIODtl({ 'iostorinv_id': this.form.dtl_row.iostorinv_id, 'open_flag': '1' }).then(res => { + this.dis_row.struct_id = row.struct_id + this.divBtn = true + crudProductIn.divStruct(this.dis_row).then(res => { + crudProductIn.getIosInvDtl({ 'iostorinv_id': this.dis_row.iostorinv_id }).then(res => { this.openParam = res + this.form.tableMater = [] + this.dis_row = null + this.crud.notify('分配成功!', CRUD.NOTIFICATION_TYPE.SUCCESS) }) - this.form.tableMater = [] + }).finally(() => { + this.divBtn = false }) }, tableChanged2(row) { @@ -520,15 +544,14 @@ export default { this.crud.notify('请先选择一条分配明细!', CRUD.NOTIFICATION_TYPE.INFO) return } - if (!this.sect_id) { - this.crud.notify('请先选择区域!', CRUD.NOTIFICATION_TYPE.INFO) - return - } // 如果勾选了,直接跳后台 if (this.form.checked) { + if (!this.sect_id) { + this.crud.notify('请先选择区域!', CRUD.NOTIFICATION_TYPE.INFO) + return + } this.divBtn = true - debugger this.dis_row.stor_id = this.stor_id.toString() this.dis_row.sect_id = this.sect_id.toString() crudProductIn.divStruct(this.dis_row).then(res => { @@ -542,6 +565,10 @@ export default { this.divBtn = false }) } else { + if (!this.stor_id) { + this.crud.notify('请先选择仓库!', CRUD.NOTIFICATION_TYPE.INFO) + return + } this.structShow = true this.$refs.child.getMsg(false) } diff --git a/mes/qd/src/views/wms/storage_manage/product/productIn/StructDiv.vue b/mes/qd/src/views/wms/storage_manage/product/productIn/StructDiv.vue new file mode 100644 index 00000000..667729b0 --- /dev/null +++ b/mes/qd/src/views/wms/storage_manage/product/productIn/StructDiv.vue @@ -0,0 +1,208 @@ + + + + diff --git a/mes/qd/src/views/wms/storage_manage/product/productIn/productin.js b/mes/qd/src/views/wms/storage_manage/product/productIn/productin.js index 57dccafb..e8674222 100644 --- a/mes/qd/src/views/wms/storage_manage/product/productIn/productin.js +++ b/mes/qd/src/views/wms/storage_manage/product/productIn/productin.js @@ -96,6 +96,14 @@ export function confirm(data) { }) } +export function cancelConfirmvehicle(data) { + return request({ + url: '/api/productIn/cancelConfirmvehicle', + method: 'post', + data + }) +} + export default { add, edit, @@ -108,5 +116,6 @@ export default { divStruct, unDivStruct, setPoint, - confirm + confirm, + cancelConfirmvehicle } diff --git a/mes/qd/src/views/wms/storage_manage/product/productMoreOrless/AddDialog.vue b/mes/qd/src/views/wms/storage_manage/product/productMoreOrless/AddDialog.vue index c1062b1f..d75d7b28 100644 --- a/mes/qd/src/views/wms/storage_manage/product/productMoreOrless/AddDialog.vue +++ b/mes/qd/src/views/wms/storage_manage/product/productMoreOrless/AddDialog.vue @@ -409,7 +409,7 @@ export default { this.nowrow = row }, async queryStruct() { - if (!this.form.mol_type) {structShow + if (!this.form.mol_type) { this.crud.notify('请先选择损溢类型!', CRUD.NOTIFICATION_TYPE.INFO) return }