diff --git a/src/main/java/com/huaheng/pc/inventory/inventoryDetail/mapper/InventoryDetailMapper.java b/src/main/java/com/huaheng/pc/inventory/inventoryDetail/mapper/InventoryDetailMapper.java index 90f6936..8600e90 100644 --- a/src/main/java/com/huaheng/pc/inventory/inventoryDetail/mapper/InventoryDetailMapper.java +++ b/src/main/java/com/huaheng/pc/inventory/inventoryDetail/mapper/InventoryDetailMapper.java @@ -3,5 +3,10 @@ package com.huaheng.pc.inventory.inventoryDetail.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail; +import java.util.List; + public interface InventoryDetailMapper extends BaseMapper<InventoryDetail> { + + List<InventoryDetail> selectBysql(String sql); + } \ No newline at end of file diff --git a/src/main/java/com/huaheng/pc/inventory/inventoryDetail/service/InventoryDetailService.java b/src/main/java/com/huaheng/pc/inventory/inventoryDetail/service/InventoryDetailService.java index e241784..96af1bf 100644 --- a/src/main/java/com/huaheng/pc/inventory/inventoryDetail/service/InventoryDetailService.java +++ b/src/main/java/com/huaheng/pc/inventory/inventoryDetail/service/InventoryDetailService.java @@ -4,11 +4,15 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.huaheng.framework.web.domain.AjaxResult; import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail; +import java.util.List; + public interface InventoryDetailService extends IService<InventoryDetail> { AjaxResult detailcreateCheckOutTask (Integer id); + List<InventoryDetail> selectBysql(String sql); + } diff --git a/src/main/java/com/huaheng/pc/inventory/inventoryDetail/service/InventoryDetailServiceImpl.java b/src/main/java/com/huaheng/pc/inventory/inventoryDetail/service/InventoryDetailServiceImpl.java index 99d286e..457d060 100644 --- a/src/main/java/com/huaheng/pc/inventory/inventoryDetail/service/InventoryDetailServiceImpl.java +++ b/src/main/java/com/huaheng/pc/inventory/inventoryDetail/service/InventoryDetailServiceImpl.java @@ -102,6 +102,10 @@ public class InventoryDetailServiceImpl extends ServiceImpl<InventoryDetailMappe return AjaxResult.success("库存明细出库查看任务下发成功!"); } + @Override + public List<InventoryDetail> selectBysql(String sql) { + return inventoryDetailMapper.selectBysql(sql); + } } diff --git a/src/main/java/com/huaheng/pc/receipt/receiptContainerDetail/controller/ReceiptContainerDetailController.java b/src/main/java/com/huaheng/pc/receipt/receiptContainerDetail/controller/ReceiptContainerDetailController.java index c2166a7..6357164 100644 --- a/src/main/java/com/huaheng/pc/receipt/receiptContainerDetail/controller/ReceiptContainerDetailController.java +++ b/src/main/java/com/huaheng/pc/receipt/receiptContainerDetail/controller/ReceiptContainerDetailController.java @@ -4,10 +4,12 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.huaheng.common.support.Convert; import com.huaheng.common.utils.StringUtils; import com.huaheng.framework.aspectj.lang.annotation.Log; import com.huaheng.framework.aspectj.lang.constant.BusinessType; import com.huaheng.framework.web.controller.BaseController; +import com.huaheng.framework.web.domain.AjaxResult; import com.huaheng.framework.web.page.PageDomain; import com.huaheng.framework.web.page.TableDataInfo; import com.huaheng.framework.web.page.TableSupport; @@ -23,6 +25,7 @@ import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import java.util.Arrays; import java.util.List; @Controller @@ -67,4 +70,16 @@ public class ReceiptContainerDetailController extends BaseController { return getDataTable(list); } } + + @RequiresPermissions("receipt:receiptContainerDetail:remove") + @Log(title = "入库-入库详情列表", operating = "入库详情列表", action = BusinessType.GRANT) + @PostMapping("remove") + public AjaxResult remove(String ids) { + if (StringUtils.isEmpty(ids)){ + return AjaxResult.error("id不能为空"); + } + + List<Integer> idList = Arrays.asList(Convert.toIntArray(ids)); + return toAjax(receiptContainerDetailService.detailRemove(idList)); + } } diff --git a/src/main/java/com/huaheng/pc/receipt/receiptContainerDetail/service/ReceiptContainerDetailService.java b/src/main/java/com/huaheng/pc/receipt/receiptContainerDetail/service/ReceiptContainerDetailService.java index 8b1d0cb..3654762 100644 --- a/src/main/java/com/huaheng/pc/receipt/receiptContainerDetail/service/ReceiptContainerDetailService.java +++ b/src/main/java/com/huaheng/pc/receipt/receiptContainerDetail/service/ReceiptContainerDetailService.java @@ -3,6 +3,7 @@ package com.huaheng.pc.receipt.receiptContainerDetail.service; import com.huaheng.framework.web.domain.AjaxResult; import com.huaheng.pc.receipt.receiptContainerDetail.domain.ReceiptContainerDetail; import com.baomidou.mybatisplus.extension.service.IService; +import com.sun.org.apache.xpath.internal.operations.Bool; import java.util.List; import java.util.Map; @@ -10,4 +11,6 @@ import java.util.Map; public interface ReceiptContainerDetailService extends IService<ReceiptContainerDetail>{ AjaxResult<List<Map<String, Object>>> getReceiptInfoByBill(String receiptCode); + + Boolean detailRemove(List<Integer> idList); } diff --git a/src/main/java/com/huaheng/pc/receipt/receiptContainerDetail/service/ReceiptContainerDetailServiceImpl.java b/src/main/java/com/huaheng/pc/receipt/receiptContainerDetail/service/ReceiptContainerDetailServiceImpl.java index 00f8193..d4b73e8 100644 --- a/src/main/java/com/huaheng/pc/receipt/receiptContainerDetail/service/ReceiptContainerDetailServiceImpl.java +++ b/src/main/java/com/huaheng/pc/receipt/receiptContainerDetail/service/ReceiptContainerDetailServiceImpl.java @@ -3,17 +3,32 @@ package com.huaheng.pc.receipt.receiptContainerDetail.service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.huaheng.common.exception.service.ServiceException; import com.huaheng.common.utils.security.ShiroUtils; import com.huaheng.framework.web.domain.AjaxResult; import com.huaheng.pc.receipt.receiptContainerDetail.domain.ReceiptContainerDetail; import com.huaheng.pc.receipt.receiptContainerDetail.mapper.ReceiptContainerDetailMapper; +import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail; +import com.huaheng.pc.receipt.receiptDetail.service.ReceiptDetailService; +import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader; +import com.huaheng.pc.receipt.receiptHeader.service.ReceiptHeaderService; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.util.List; import java.util.Map; @Service public class ReceiptContainerDetailServiceImpl extends ServiceImpl<ReceiptContainerDetailMapper, ReceiptContainerDetail> implements ReceiptContainerDetailService{ + @Resource + private ReceiptDetailService receiptDetailService; + @Resource + private ReceiptHeaderService receiptHeaderService; + /** + * 根据入库单编码查询入库组盘明细 + * @param receiptCode + * @return + */ @Override public AjaxResult<List<Map<String, Object>>> getReceiptInfoByBill(String receiptCode) { LambdaQueryWrapper<ReceiptContainerDetail> lambdaQueryWrapper = Wrappers.lambdaQuery(); @@ -24,5 +39,44 @@ public class ReceiptContainerDetailServiceImpl extends ServiceImpl<ReceiptContai return AjaxResult.success(detail); } + /** + * 撤销入库组盘明细 + * @param idList + * @return + */ + @Override + public Boolean detailRemove(List<Integer> idList) { + for (Integer id : idList){ + ReceiptContainerDetail receiptContainerDetail = this.getById(id); + //如果已生成任务不允许撤销 + if (receiptContainerDetail.getStatus() < 10){ + //回滚入库单明细收货数量 + ReceiptDetail receiptDetail = receiptDetailService.getById(receiptContainerDetail.getReceiptDetailId()); + receiptDetail.setOpenQty(receiptDetail.getOpenQty() - receiptContainerDetail.getQty()); + if (!receiptDetailService.updateById(receiptDetail)){throw new SecurityException("回滚入库单明细失败");} + + //查询入库头表 + LambdaQueryWrapper<ReceiptContainerDetail> containerDetailLambda = Wrappers.lambdaQuery(); + containerDetailLambda = Wrappers.lambdaQuery(); + containerDetailLambda.eq(ReceiptContainerDetail::getReceiptId, receiptContainerDetail.getReceiptId()); + List<ReceiptContainerDetail> containerDetailList = this.list(containerDetailLambda); + //如果入库组盘没有该入库单的组盘信息,回滚入库单状态 + if (containerDetailList == null){ + ReceiptHeader receiptHeader = new ReceiptHeader(); + receiptHeader.setId(receiptContainerDetail.getReceiptId()); + receiptHeader.setFirstStatus(200); + receiptHeader.setLastStatus(200); + receiptHeader.setLastUpdatedBy(ShiroUtils.getLoginName()); + + if (!receiptHeaderService.updateById(receiptHeader)){ throw new ServiceException("回滚头表状态失败"); } + } + + } else { + throw new SecurityException("已生成任务,不允许取消"); + } + } + return true; + } + } diff --git a/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/controller/ReceiptContainerHeaderController.java b/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/controller/ReceiptContainerHeaderController.java index e49b48c..f7dc832 100644 --- a/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/controller/ReceiptContainerHeaderController.java +++ b/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/controller/ReceiptContainerHeaderController.java @@ -102,7 +102,7 @@ public class ReceiptContainerHeaderController extends BaseController { } /** - * 删除入库单 + * 删除入库组盘 */ @ApiOperation(value="取消", notes="取消入库组盘", httpMethod = "POST") @RequiresPermissions("receipt:receiptContainer:remove") @@ -114,7 +114,7 @@ public class ReceiptContainerHeaderController extends BaseController { return AjaxResult.error("id为空"); } List<Integer> idList = Arrays.asList(Convert.toIntArray(ids)); - return toAjax(receiptContainerHeaderService.removeByIds(idList)); + return toAjax(receiptContainerHeaderService.cancelByIds(idList)); } /** * 生成任务 @@ -134,7 +134,6 @@ public class ReceiptContainerHeaderController extends BaseController { lambda.select(ReceiptContainerHeader::getId) .lt(ReceiptContainerHeader::getStatus, 10) .le(ReceiptContainerHeader::getId, maxId); - List<Object> ContainerIdList = receiptContainerHeaderService.listObjs(lambda); return taskHeaderService.createReceiptTask(idList); } diff --git a/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/service/ReceiptContainerHeaderService.java b/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/service/ReceiptContainerHeaderService.java index c057a18..5f71188 100644 --- a/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/service/ReceiptContainerHeaderService.java +++ b/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/service/ReceiptContainerHeaderService.java @@ -3,6 +3,9 @@ package com.huaheng.pc.receipt.receiptContainerHeader.service; import com.huaheng.framework.web.domain.AjaxResult; import com.huaheng.pc.receipt.receiptContainerHeader.domain.ReceiptContainerHeader; import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + public interface ReceiptContainerHeaderService extends IService<ReceiptContainerHeader>{ /** @@ -18,4 +21,6 @@ public interface ReceiptContainerHeaderService extends IService<ReceiptContainer */ AjaxResult saveCountain(String receiptCode, String containerCode, Integer receiptDetailId, Integer taskType, String locationCode, Integer qty, String locatingRule); + + Boolean cancelByIds(List<Integer> id); } diff --git a/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/service/ReceiptContainerHeaderServiceImpl.java b/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/service/ReceiptContainerHeaderServiceImpl.java index 607d624..768cc3b 100644 --- a/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/service/ReceiptContainerHeaderServiceImpl.java +++ b/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/service/ReceiptContainerHeaderServiceImpl.java @@ -114,16 +114,66 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl<ReceiptContai receiptDetail = receiptDetailService.getById(receiptDetailId); receiptContainerDetailAdd(receiptContainerHeaders.get(0).getId(), receiptDetail, qty, containerCode); - //更新入库详情状态和入库单状态 - ReceiptDetail receiptDetail1 = receiptDetailService.queryflow(receiptDetail); - if (!receiptDetailService.updateById(receiptDetail1)){ - throw new ServiceException("更新入库详情下一流程失败"); + //如果单据数量等于已收数量,更新入库详情状态和入库单状态 + if (receiptDetail.getTotalQty() == receiptDetail.getOpenQty()){ + ReceiptDetail receiptDetail1 = receiptDetailService.queryflow(receiptDetail); + if (!receiptDetailService.updateById(receiptDetail1)){ + throw new ServiceException("更新入库详情下一流程失败"); + } } receiptDetailService.updateReceiptHeaderLastStatus(receiptDetail.getReceiptId()); return AjaxResult.success("success"); } /** + * 批量撤销入库组盘 + * @param ids + * @return + */ + @Override + public Boolean cancelByIds(List<Integer> ids) { + for (Integer id : ids) { + //如果已生成任务则不允许取消组盘 + if (this.getById(id).getStatus() < 10){ + //根据组盘头表id查询组盘明细表 + LambdaQueryWrapper<ReceiptContainerDetail> containerDetailLambda = Wrappers.lambdaQuery(); + containerDetailLambda.eq(ReceiptContainerDetail::getReceiptContainerId, id); + List<ReceiptContainerDetail> receiptContainerDetails = receiptContainerDetailService.list(containerDetailLambda); + + //查询入库单明细,减去已收数量,更新单据 + for (ReceiptContainerDetail receiptContainerDetail: receiptContainerDetails){ + ReceiptDetail receiptDetail = receiptDetailService.getById(receiptContainerDetail.getReceiptDetailId()); + receiptDetail.setOpenQty(receiptDetail.getOpenQty()-receiptContainerDetail.getQty()); + if (!receiptDetailService.updateById(receiptDetail)){throw new ServiceException("回滚入库明细失败"); } + + containerDetailLambda = Wrappers.lambdaQuery(); + containerDetailLambda.eq(ReceiptContainerDetail::getReceiptId, receiptContainerDetail.getReceiptId()); + List<ReceiptContainerDetail> containerDetailList = receiptContainerDetailService.list(containerDetailLambda); + //如果入库组盘没有该入库单的组盘信息,回滚入库单状态 + if (containerDetailList == null){ + ReceiptHeader receiptHeader = new ReceiptHeader(); + receiptHeader.setId(receiptContainerDetail.getReceiptId()); + receiptHeader.setFirstStatus(200); + receiptHeader.setLastStatus(200); + receiptHeader.setLastUpdatedBy(ShiroUtils.getLoginName()); + + if (!receiptHeaderService.updateById(receiptHeader)){ throw new ServiceException("回滚头表状态失败"); } + } + + if (!receiptContainerDetailService.removeById(receiptContainerDetail.getId())){ + throw new ServiceException("删除入库组盘明细表失败,id是"+receiptContainerDetail.getId()); + } + } + //删除入库组盘头表 + this.removeById(id); + } else { + throw new ServiceException("已生成任务不允许取消"); + } + } + return true; + } + + /** * 检查容器编码合法性 * @param containerCode * @return diff --git a/src/main/java/com/huaheng/pc/shipment/shipmentDetail/controller/ShipmentDetailController.java b/src/main/java/com/huaheng/pc/shipment/shipmentDetail/controller/ShipmentDetailController.java index 886abeb..6864033 100644 --- a/src/main/java/com/huaheng/pc/shipment/shipmentDetail/controller/ShipmentDetailController.java +++ b/src/main/java/com/huaheng/pc/shipment/shipmentDetail/controller/ShipmentDetailController.java @@ -67,6 +67,7 @@ public class ShipmentDetailController extends BaseController .eq(ShipmentDetail::getWarehouseCode,ShiroUtils.getWarehouseCode()) .in(ShipmentDetail::getCompanyCode,ShiroUtils.getCompanyCodeList()) .eq(StringUtils.isNotEmpty(shipmentDetail.getShipmentCode()),ShipmentDetail::getShipmentCode,shipmentDetail.getShipmentCode()) + .eq(ShipmentDetail::getShipmentId,shipmentDetail.getShipmentId()) .orderByAsc(ShipmentDetail::getId); if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)){ diff --git a/src/main/java/com/huaheng/pc/shipment/shippingCombination/controller/ShippingCombinationController.java b/src/main/java/com/huaheng/pc/shipment/shippingCombination/controller/ShippingCombinationController.java index 26a00d2..67d1df9 100644 --- a/src/main/java/com/huaheng/pc/shipment/shippingCombination/controller/ShippingCombinationController.java +++ b/src/main/java/com/huaheng/pc/shipment/shippingCombination/controller/ShippingCombinationController.java @@ -8,11 +8,14 @@ import com.huaheng.common.utils.security.ShiroUtils; import com.huaheng.framework.web.controller.BaseController; import com.huaheng.framework.web.domain.AjaxResult; import com.huaheng.framework.web.page.TableDataInfo; +import com.huaheng.pc.config.FilterConfigDetail.domain.FilterConfigDetail; +import com.huaheng.pc.config.FilterConfigDetail.service.FilterConfigDetailService; import com.huaheng.pc.config.configValue.domain.ConfigValue; import com.huaheng.pc.config.configValue.service.ConfigValueService; import com.huaheng.pc.config.material.domain.Material; import com.huaheng.pc.config.material.service.MaterialServiceImpl; import com.huaheng.pc.config.shipmentPreference.domain.ShipmentPreference; +import com.huaheng.pc.config.shipmentPreference.service.ShipmentPreferenceService; import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail; import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService; import com.huaheng.pc.shipment.shipmentContainerDetail.service.ShipmentContainerDetailService; @@ -30,6 +33,7 @@ import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.*; +import java.util.ArrayList; import java.util.List; @Controller @@ -54,6 +58,10 @@ public class ShippingCombinationController extends BaseController { InventoryDetailService inventoryDetailService; @Autowired ConfigValueService configValueService; + @Autowired + FilterConfigDetailService filterConfigDetailService; + @Autowired + ShipmentPreferenceService shipmentPreferenceService; /** @@ -89,38 +97,6 @@ public class ShippingCombinationController extends BaseController { } - /** - * 获取能出库的库存列表 - * @param code,id - * @return - */ - @PostMapping("/getInventory") - @ResponseBody - public TableDataInfo getInventory(String code, Integer id){ - //找到主单的账套 - LambdaQueryWrapper<ShipmentHeader> lambdaQueryWrapper = Wrappers.lambdaQuery(); - lambdaQueryWrapper.eq(ShipmentHeader::getCode,code) - .eq(ShipmentHeader::getWarehouseCode,ShiroUtils.getWarehouseCode()); - ShipmentHeader shipmentHeader=shipmentHeaderService.getOne(lambdaQueryWrapper); - if(shipmentHeader==null){ - throw new ServiceException("找不到主单"); - } - //找到子单物料 - ShipmentDetail shipmentDetail=new ShipmentDetail(); - shipmentDetail=shipmentDetailService.getById(id); - if(shipmentDetail==null){ - throw new ServiceException("找不到子单"); - } - LambdaQueryWrapper<InventoryDetail> lam = Wrappers.lambdaQuery(); - lam.eq(InventoryDetail::getWarehouseCode,shipmentHeader.getWarehouseCode()) - .eq(InventoryDetail::getCompanyCode,shipmentHeader.getCompanyCode()) - .eq(InventoryDetail::getMaterialCode,shipmentDetail.getMaterialCode()); - - List<InventoryDetail> list= inventoryDetailService.list(lam); - return getDataTable(list); - } - - // /** // * 获取能出库的库存列表 // * @param code,id @@ -143,42 +119,10 @@ public class ShippingCombinationController extends BaseController { // if(shipmentDetail==null){ // throw new ServiceException("找不到子单"); // } -// -// //出库首选项 -// LambdaQueryWrapper<ShipmentPreference> shipmentPreferenceLambdaQueryWrapper=Wrappers.lambdaQuery(); -// -// //出库规则 -// //出库子单的分配规则 -// if(StringUtils.isNotEmpty(shipmentDetail.getAllocationRule())){ -// -// -// } -// -// //物料的分+配规则 -// LambdaQueryWrapper<Material> materialLambdaQueryWrapper=Wrappers.lambdaQuery(); -// materialLambdaQueryWrapper.eq(Material::getCode,shipmentDetail.getMaterialCode()) -// .eq(Material::getWarehouseCode,shipmentDetail.getWarehouseCode()); -// Material material=materialService.getOne(materialLambdaQueryWrapper); -// if(StringUtils.isNotEmpty(material.getAllocationRule())){ -// -// -// } -// -// //仓库的分配规则 -// LambdaQueryWrapper<ConfigValue> configValueLambdaQueryWrapper=Wrappers.lambdaQuery(); -// configValueLambdaQueryWrapper.eq(ConfigValue::getModuleType,"shipment") -// .eq(ConfigValue::getWarehouseCode,shipmentDetail.getWarehouseCode()); -// ConfigValue configValue=configValueService.getOne(configValueLambdaQueryWrapper); -// //查找出库首选项 -// -// configValue.getIdentifier(); -// -// -// // LambdaQueryWrapper<InventoryDetail> lam = Wrappers.lambdaQuery(); // lam.eq(InventoryDetail::getWarehouseCode,shipmentHeader.getWarehouseCode()) // .eq(InventoryDetail::getCompanyCode,shipmentHeader.getCompanyCode()) -// .eq(InventoryDetail::getMaterialName,shipmentDetail.getMaterialCode()); +// .eq(InventoryDetail::getMaterialCode,shipmentDetail.getMaterialCode()); // // List<InventoryDetail> list= inventoryDetailService.list(lam); // return getDataTable(list); @@ -186,6 +130,99 @@ public class ShippingCombinationController extends BaseController { /** + * 获取能出库的库存列表 + * @param code,id + * @return + */ + @PostMapping("/getInventory") + @ResponseBody + public TableDataInfo getInventory(String code, Integer id){ + //找到主单 + LambdaQueryWrapper<ShipmentHeader> lambdaQueryWrapper = Wrappers.lambdaQuery(); + lambdaQueryWrapper.eq(ShipmentHeader::getCode,code) + .eq(ShipmentHeader::getWarehouseCode,ShiroUtils.getWarehouseCode()); + ShipmentHeader shipmentHeader=shipmentHeaderService.getOne(lambdaQueryWrapper); + if(shipmentHeader==null){ + throw new ServiceException("找不到主单"); + } + //找到子单 + ShipmentDetail shipmentDetail=new ShipmentDetail(); + shipmentDetail=shipmentDetailService.getById(id); + if(shipmentDetail==null){ + throw new ServiceException("找不到子单"); + } + + //查找分配规则 + List<InventoryDetail> list=new ArrayList<>(); + FilterConfigDetail filterConfigDetail=new FilterConfigDetail(); + LambdaQueryWrapper<FilterConfigDetail> filterConfigDetailLambdaQueryWrapper=Wrappers.lambdaQuery(); + filterConfigDetailLambdaQueryWrapper.eq(FilterConfigDetail::getWarehouseCode,shipmentDetail.getWarehouseCode()); + + //出库子单的分配规则有时,优先出库子单的分配规则 + if(StringUtils.isNotEmpty(shipmentDetail.getAllocationRule())){ + filterConfigDetailLambdaQueryWrapper.eq(FilterConfigDetail::getCode,shipmentDetail.getAllocationRule()); + filterConfigDetail=filterConfigDetailService.getOne(filterConfigDetailLambdaQueryWrapper); + if(filterConfigDetail==null){ + throw new ServiceException("出库子单出库规则配置不存在"); + } + + //根据sql查库存 + try { + list = inventoryDetailService.selectBysql(filterConfigDetail.getStatement()); + }catch (Exception e){ + throw new ServiceException("sql错误"); + } + return getDataTable(list); + } + + //出库子单的分配规则没有时,优先物料的分配规则 + LambdaQueryWrapper<Material> materialLambdaQueryWrapper=Wrappers.lambdaQuery(); + materialLambdaQueryWrapper.eq(Material::getCode,shipmentDetail.getMaterialCode()) + .eq(Material::getWarehouseCode,shipmentDetail.getWarehouseCode()); + Material material=materialService.getOne(materialLambdaQueryWrapper); + if(StringUtils.isNotEmpty(material.getAllocationRule())){ + filterConfigDetailLambdaQueryWrapper.eq(FilterConfigDetail::getCode,material.getAllocationRule()); + filterConfigDetail=filterConfigDetailService.getOne(filterConfigDetailLambdaQueryWrapper); + if(filterConfigDetail==null){ + throw new ServiceException("物料出库规则配置不存在"); + } + + //根据sql查库存 + list=inventoryDetailService.selectBysql(filterConfigDetail.getStatement()); + return getDataTable(list); + } + + //都没有时,默认仓库的分配规则 + LambdaQueryWrapper<ConfigValue> configValueLambdaQueryWrapper=Wrappers.lambdaQuery(); + configValueLambdaQueryWrapper.eq(ConfigValue::getModuleType,"shipment") + .eq(ConfigValue::getWarehouseCode,shipmentDetail.getWarehouseCode()); + ConfigValue configValue=configValueService.getOne(configValueLambdaQueryWrapper); + if(configValue==null){ + throw new ServiceException("仓库的出库配置不存在"); + } + + //查找出库首选项 + LambdaQueryWrapper<ShipmentPreference> slam=Wrappers.lambdaQuery(); + slam.eq(ShipmentPreference::getCode,configValue.getIdentifier()) + .eq(ShipmentPreference::getWarehouseCode,configValue.getWarehouseCode()); + ShipmentPreference shipmentPreference=shipmentPreferenceService.getOne(slam); + if(shipmentPreference==null){ + throw new ServiceException("仓库的出库配置中出库首选项不存在"); + } + //查找分配规则 + filterConfigDetailLambdaQueryWrapper.eq(FilterConfigDetail::getCode,shipmentPreference.getAllocationRule()); + filterConfigDetail=filterConfigDetailService.getOne(filterConfigDetailLambdaQueryWrapper); + if(filterConfigDetail==null){ + throw new ServiceException("出库首选项中出库规则配置不存在"); + } + + //根据sql查库存 + list=inventoryDetailService.selectBysql(filterConfigDetail.getStatement()); + return getDataTable(list); + } + + + /** * 保存组盘 * @param shipmentCombinationModel * @return diff --git a/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java b/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java index 1f41c21..af356d7 100644 --- a/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java +++ b/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java @@ -906,6 +906,10 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea throw new ServiceException("生成任务明细失败"); } + //更新入库组盘明细状态 + item.setStatus(10); + receiptContainerDetailService.updateById(item); + ReceiptDetail receiptDetail = receiptDetailService.getById(item.getReceiptDetailId()); if ("300".equals(receiptDetail.getProcessStamp())){ ReceiptDetail detail = receiptDetailService.queryflow(receiptDetail); diff --git a/src/main/resources/mybatis/inventory/InventoryDetailMapper.xml b/src/main/resources/mybatis/inventory/InventoryDetailMapper.xml index e936b0c..9ebf802 100644 --- a/src/main/resources/mybatis/inventory/InventoryDetailMapper.xml +++ b/src/main/resources/mybatis/inventory/InventoryDetailMapper.xml @@ -54,4 +54,9 @@ lastCycleCountDate, created, createdBy, lastUpdated, lastUpdatedBy, userDef1, userDef2, userDef3, processStamp, receiptCode, receiptDetailId </sql> + + + <select id="selectBysql" parameterType="String" resultType="com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail"> + ${value} + </select> </mapper> \ No newline at end of file diff --git a/src/main/resources/templates/shipment/shipmentDetail/add.html b/src/main/resources/templates/shipment/shipmentDetail/add.html index fc366c2..5f106fe 100644 --- a/src/main/resources/templates/shipment/shipmentDetail/add.html +++ b/src/main/resources/templates/shipment/shipmentDetail/add.html @@ -34,9 +34,9 @@ <div class="form-group"> <label class="col-sm-3 control-label">分配规则:</label> <div class="col-sm-8"> - <select id="allocationRule" class="form-control" th:with="allocationRule=${@filterConfigDetail.list()}"> + <select id="allocationRule" class="form-control" th:with="allocationRule=${@FilterConfigDetailService.list()}"> <option value=" " checked></option> - <option th:each="allocationRules:${allocationRule}" th:text="${allocationRules['code']}" th:value="${allocationRules['description']}"></option> + <option th:each="allocationRules:${allocationRule}" th:text="${allocationRules['description']}" th:value="${allocationRules['code']}"></option> </select> </div> </div> @@ -102,12 +102,6 @@ <input id="shipQty" name="shipQty" class="form-control" type="text" onkeyup=" this.value=this.value.replace(/^\s+|\s+$/g,'')"> </div> </div> - <div class="form-group"> - <label class="col-sm-3 control-label">物料单价:</label> - <div class="col-sm-8"> - <input id="price" name="price" class="form-control" type="text"> - </div> - </div> <div class="form-group"> <div class="form-control-static col-sm-offset-9"> <button type="submit" class="btn btn-primary">提交</button> @@ -160,6 +154,7 @@ "batch": $("input[name='batch']").val(), "lot": $("input[name='lot']").val(), "projectNo": $("input[name='project']").val(), + "allocationRule": $("#allocationRule option:selected").val(), "manufactureDate": $("input[name='manufactureDate']").val(), "expirationDate": $("input[name='expirationDate']").val(), "agingDate": $("input[name='agingDate']").val(), diff --git a/src/main/resources/templates/shipment/shipmentDetail/edit.html b/src/main/resources/templates/shipment/shipmentDetail/edit.html index bbaa021..12ae051 100644 --- a/src/main/resources/templates/shipment/shipmentDetail/edit.html +++ b/src/main/resources/templates/shipment/shipmentDetail/edit.html @@ -19,12 +19,6 @@ </div> </div> <div class="form-group"> - <label class="col-sm-3 control-label">上游系统行号:</label> - <div class="col-sm-8"> - <input id="sourceLine" name="sourceLine" th:field="*{sourceLine}" class="form-control" type="text" readonly="readonly"> - </div> - </div> - <div class="form-group"> <label class="col-sm-3 control-label">存货编码:</label> <div class="col-sm-8"> <input id="materialCode" name="materialCode" th:field="*{materialCode}" class="form-control" type="text" readonly="readonly"> @@ -51,7 +45,16 @@ <div class="form-group"> <label class="col-sm-3 control-label">项目号:</label> <div class="col-sm-8"> - <input id="project" name="project" th:field="*{project}" class="form-control" type="text"> + <input id="project" name="projectNo" th:field="*{projectNo}" class="form-control" type="text"> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">分配规则:</label> + <div class="col-sm-8"> + <select id="allocationRule" class="form-control" th:with="allocationRule=${@FilterConfigDetailService.list()}" th:field="*{allocationRule}"> + <option value=" " checked></option> + <option th:each="allocationRules:${allocationRule}" th:text="${allocationRules['description']}" th:value="${allocationRules['code']}"></option> + </select> </div> </div> <div class="form-group"> @@ -75,27 +78,21 @@ <div class="form-group"> <label class="col-sm-3 control-label">库存状态:</label> <div class="col-sm-8"> - <select id="inventoryStatus" class="form-control" th:with="inventoryStatus=${@dict.getType('inventoryStatus')}" th:field="*{inventoryStatus}"> + <select id="inventoryStatus" class="form-control" th:with="inventoryStatus=${@dict.getType('inventoryStatus')}" th:field="*{inventorySts}"> <option th:each="dict : ${inventoryStatus}" th:text="${dict['dictLabel']}" th:value="${dict['dictValue']}"></option> </select> </div> </div> - <div class="form-group"> + <div class="form-group"> <label class="col-sm-3 control-label">发货数量:</label> <div class="col-sm-8"> - <input id="qty" name="qty" th:field="*{qty}" class="form-control" type="text"> + <input id="qty" name="shipQty" th:field="*{shipQty}" class="form-control" type="text"> </div> </div> <div class="form-group"> <label class="col-sm-3 control-label">已出数量:</label> <div class="col-sm-8"> - <input id="qtyCompleted" name="qtyCompleted" th:field="*{qtyCompleted}" class="form-control" type="text" readonly="readonly"> - </div> - </div> - <div class="form-group"> - <label class="col-sm-3 control-label">物料单价:</label> - <div class="col-sm-8"> - <input id="price" name="price" th:field="*{price}" class="form-control" type="number"> + <input id="requestQty" name="requestQty" th:field="*{requestQty}" class="form-control" type="text" readonly="readonly"> </div> </div> <div class="form-group"> @@ -187,18 +184,15 @@ "id":$("#id").val(), "shipmentId": $("input[name='shipmentId']").val(), "shipmentCode": $("input[name='shipmentCode']").val(), - "sourceLine": $("input[name='sourceLine']").val(), - "materialId": $("input[name='materialId']").val(), "materialCode": $("input[name='materialCode']").val(), "batch": $("input[name='batch']").val(), "lot": $("input[name='lot']").val(), - "project": $("input[name='project']").val(), + "projectNo": $("input[name='projectNo']").val(), + "allocationRule": $("#allocationRule option:selected").val(), "manufactureDate": $("input[name='manufactureDate']").val(), "expirationDate": $("input[name='expirationDate']").val(), - "agingDate": $("input[name='agingDate']").val(), - "inventoryStatus": $("#inventoryStatus option:selected").val(), - "qty": $("input[name='qty']").val(), - "price": $("input[name='price']").val(), + "inventorySts": $("#inventoryStatus option:selected").val(), + "shipQty": $("input[name='shipQty']").val(), "userDef1": $("input[name='userDef1']").val(), "userDef2": $("input[name='userDef2']").val(), "userDef3": $("input[name='userDef3']").val(),