diff --git a/src/main/java/com/huaheng/pc/check/checkingRegister/controller/CheckingRegisterController.java b/src/main/java/com/huaheng/pc/check/checkingRegister/controller/CheckingRegisterController.java index f34e2d3..7752a5d 100644 --- a/src/main/java/com/huaheng/pc/check/checkingRegister/controller/CheckingRegisterController.java +++ b/src/main/java/com/huaheng/pc/check/checkingRegister/controller/CheckingRegisterController.java @@ -15,10 +15,16 @@ 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; +import com.huaheng.pc.check.checkDetail.domain.CheckDetail; +import com.huaheng.pc.check.checkDetail.service.CheckDetailService; import com.huaheng.pc.check.checkHeader.domain.CheckHeader; +import com.huaheng.pc.check.checkHeader.service.CheckHeaderService; import com.huaheng.pc.check.checkingRegister.domain.CheckingRegister; import com.huaheng.pc.check.checkingRegister.service.CheckingRegisterService; import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader; +import com.huaheng.pc.system.dict.domain.DictData; +import com.huaheng.pc.system.dict.service.DictDataServiceImpl; +import com.huaheng.pc.system.dict.service.IDictDataService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; @@ -42,12 +48,23 @@ public class CheckingRegisterController extends BaseController { @Resource private CheckingRegisterService checkingRegisterService; + @Resource + private CheckHeaderService checkHeaderService; + @Resource + private CheckDetailService checkDetailService; + private String prefix = "check/checkingRegister"; @RequiresPermissions("check:checkingRegister:view") @GetMapping("/{checkId}") public String checkingRegister(@PathVariable("checkId") Integer checkId, ModelMap modelMap) { + if (checkId != 0){ + CheckHeader checkHeader = checkHeaderService.getById(checkId); + modelMap.put("checkHeaderId",checkHeader.getId()); + modelMap.put("checkCode",checkHeader.getCode()); + } + modelMap.put("checkId",checkId); return prefix + "/checkingRegister"; } @@ -61,11 +78,22 @@ public class CheckingRegisterController extends BaseController { @ResponseBody public TableDataInfo list(@ApiParam(name="receiptDetail",value="质检头表") CheckingRegister checkingRegister, @ApiParam(name = "createdBegin", value = "起止时间") String createdBegin, - @ApiParam(name = "createdEnd", value = "结束时间") String createdEnd) { + @ApiParam(name = "createdEnd", value = "结束时间") String createdEnd, + Integer pageNumber) { LambdaQueryWrapper<CheckingRegister> lambdaQueryWrapper = Wrappers.lambdaQuery(); PageDomain pageDomain = TableSupport.buildPageRequest(); - Integer pageNum = pageDomain.getPageNum(); + Integer pageNum = pageNumber; Integer pageSize = pageDomain.getPageSize(); + boolean isDetailNull; + if (StringUtils.isNotNull(checkingRegister.getCheckDetailId())){ + isDetailNull = true; + if (checkingRegister.getCheckDetailId() == 0){ + isDetailNull = false; + } + } else { + isDetailNull = false; + } + CheckDetail checkDetail = checkDetailService.getById(checkingRegister.getCheckDetailId()); lambdaQueryWrapper.ge(StringUtils.isNotEmpty(createdBegin), CheckingRegister::getCreated, createdBegin) .le(StringUtils.isNotEmpty(createdEnd), CheckingRegister::getCreated, createdEnd) @@ -73,6 +101,8 @@ public class CheckingRegisterController extends BaseController { .eq(CheckingRegister::getWarehouseCode, ShiroUtils.getWarehouseCode()) .eq(StringUtils.isNotNull(checkingRegister.getCheckHeaderId()), CheckingRegister::getCheckHeaderId, checkingRegister.getCheckHeaderId()) + .eq(isDetailNull, CheckingRegister::getCheckDetailId, + checkingRegister.getCheckDetailId()) .eq(StringUtils.isNotNull(checkingRegister.getReceiptDetailId()), CheckingRegister::getReceiptDetailId, checkingRegister.getReceiptDetailId()) .eq(StringUtils.isNotEmpty(checkingRegister.getReceiptCode()), @@ -91,16 +121,34 @@ public class CheckingRegisterController extends BaseController { CheckingRegister::getInventorySts, checkingRegister.getInventorySts()) .eq(StringUtils.isNotEmpty(checkingRegister.getCheckBy()), CheckingRegister::getCheckAt, checkingRegister.getCheckAt()); -// .orderByDesc(CheckingRegister::getCheckAt) -// .orderByDesc(CheckingRegister::getReceiptDetailId); if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)){ // 使用分页查询 Page<CheckingRegister> page = new Page<>(pageNum, pageSize); IPage<CheckingRegister> iPage = checkingRegisterService.page(page, lambdaQueryWrapper); + if (isDetailNull){ + if (iPage.getTotal() == 0){ + List emptyList = checkingRegisterService.emptyList(checkingRegister.getCheckDetailId()); + return getMpDataTable(emptyList, Long.valueOf(emptyList.size())); + } + if (!"20".equals(checkDetail.getStatus())){ + List notCompleteList = checkingRegisterService.notCompleteList(checkingRegister.getCheckDetailId()); + return getMpDataTable(notCompleteList, Long.valueOf(notCompleteList.size())); + } + } return getMpDataTable(iPage.getRecords(), iPage.getTotal()); } else { List<CheckingRegister> list = checkingRegisterService.list(lambdaQueryWrapper); + if (isDetailNull){ + if (list.size() == 0){ + List emptyList = checkingRegisterService.emptyList(checkingRegister.getCheckDetailId()); + return getMpDataTable(emptyList, Long.valueOf(emptyList.size())); + } + if (!"20".equals(checkDetail.getStatus())){ + List notCompleteList = checkingRegisterService.notCompleteList(checkingRegister.getCheckDetailId()); + return getMpDataTable(notCompleteList, Long.valueOf(notCompleteList.size())); + } + } return getDataTable(list); } } @@ -144,9 +192,7 @@ public class CheckingRegisterController extends BaseController { @PostMapping("/edit") @ResponseBody public AjaxResult editSave(CheckingRegister checkingRegister) { - checkingRegister.setCheckBy(ShiroUtils.getLoginName()); - checkingRegister.setLastUpdatedBy(ShiroUtils.getLoginName()); - return toAjax(checkingRegisterService.updateById(checkingRegister)); + return checkingRegisterService.edit(checkingRegister); } /** diff --git a/src/main/java/com/huaheng/pc/check/checkingRegister/service/CheckingRegisterService.java b/src/main/java/com/huaheng/pc/check/checkingRegister/service/CheckingRegisterService.java index 1108846..7519ba3 100644 --- a/src/main/java/com/huaheng/pc/check/checkingRegister/service/CheckingRegisterService.java +++ b/src/main/java/com/huaheng/pc/check/checkingRegister/service/CheckingRegisterService.java @@ -1,7 +1,24 @@ package com.huaheng.pc.check.checkingRegister.service; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; + +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.huaheng.common.exception.service.ServiceException; +import com.huaheng.common.utils.StringUtils; +import com.huaheng.common.utils.security.ShiroUtils; +import com.huaheng.framework.web.domain.AjaxResult; +import com.huaheng.pc.check.checkDetail.domain.CheckDetail; +import com.huaheng.pc.check.checkDetail.service.CheckDetailService; +import com.huaheng.pc.check.checkHeader.domain.CheckHeader; +import com.huaheng.pc.check.checkHeader.service.CheckHeaderService; +import com.huaheng.pc.config.material.domain.Material; +import com.huaheng.pc.config.material.service.MaterialService; +import com.huaheng.pc.system.dict.domain.DictData; +import com.huaheng.pc.system.dict.service.IDictDataService; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Date; import java.util.List; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.huaheng.pc.check.checkingRegister.domain.CheckingRegister; @@ -9,4 +26,117 @@ import com.huaheng.pc.check.checkingRegister.mapper.CheckingRegisterMapper; @Service public class CheckingRegisterService extends ServiceImpl<CheckingRegisterMapper, CheckingRegister> { + @Resource + private CheckHeaderService checkHeaderService; + @Resource + private CheckDetailService checkDetailService; + @Resource + private MaterialService materialService; + @Resource + private IDictDataService dictDataService; + + /** + * 质检登记修改 + * @return + */ + public AjaxResult edit(CheckingRegister checkingRegister){ + + checkingRegister.setLastUpdatedBy(ShiroUtils.getLoginName()); + checkingRegister.setCheckAt(new Date()); + checkingRegister.setCheckBy(ShiroUtils.getLoginName()); + if (StringUtils.isNull(checkingRegister.getId())){ + checkingRegister.setCreatedBy(ShiroUtils.getLoginName()); + if (!this.save(checkingRegister)){ + throw new ServiceException("添加质检登记失败"); + } + } else { + if (!this.updateById(checkingRegister)){ + throw new SecurityException("更新质检登记失败"); + } + } + return AjaxResult.success("保存成功"); + } + + /** + * 如果质检报告为空,返回所有库存状态记录 + * @param checkDetailId + * @return + */ + public List<CheckingRegister> emptyList(Integer checkDetailId){ + List<CheckingRegister> list = new ArrayList<>(); + List<DictData> dictDataList = dictDataService.selectDictDataByType("inventoryStatus"); + CheckDetail checkDetail = checkDetailService.getById(checkDetailId); + for (DictData dictData: dictDataList){ + CheckingRegister checkingRegister1 = new CheckingRegister(); + checkingRegister1.setCheckDetailId(checkDetailId); + checkingRegister1.setCheckHeaderId(checkDetail.getCheckHeaderId()); + checkingRegister1.setWarehouseCode(ShiroUtils.getWarehouseCode()); + checkingRegister1.setCheckCode(checkDetail.getCheckCode()); + checkingRegister1.setReceiptDetailId(checkDetail.getReceiptDetailId()); + checkingRegister1.setReceiptCode(checkDetail.getReceiptCode()); + checkingRegister1.setReferCode(checkDetail.getReferCode()); + checkingRegister1.setReferLineId(checkDetail.getReferLineId()); + checkingRegister1.setReferPlatform(checkDetail.getReferPlatform()); + checkingRegister1.setMaterialCode(checkDetail.getMaterialCode()); + checkingRegister1.setMaterialName(checkDetail.getMaterialName()); + checkingRegister1.setMaterialSpec(checkDetail.getMaterialSpec()); + checkingRegister1.setMaterialUnit(checkDetail.getMaterialUnit()); + checkingRegister1.setCompanyCode(checkDetail.getCompanyCode()); + checkingRegister1.setInventorySts(dictData.getDictValue()); + checkingRegister1.setCheckBy(ShiroUtils.getLoginName()); + checkingRegister1.setCreated(new Date()); + checkingRegister1.setCreatedBy(ShiroUtils.getLoginName()); + checkingRegister1.setLastUpdated(new Date()); + checkingRegister1.setLastUpdatedBy(ShiroUtils.getLoginName()); + list.add(checkingRegister1); + } + return list; + } + + /** + * 如果质检未完成,返回 + * @param checkDetailId + * @return + */ + public List<CheckingRegister> notCompleteList(Integer checkDetailId){ + + LambdaQueryWrapper<CheckingRegister> lambda = Wrappers.lambdaQuery(); + lambda.eq(CheckingRegister::getCheckDetailId, checkDetailId); + List<CheckingRegister> list = this.list(lambda); + List<CheckingRegister> list1 = new ArrayList<>(); + List<DictData> dictDataList = dictDataService.selectDictDataByType("inventoryStatus"); + CheckDetail checkDetail = checkDetailService.getById(checkDetailId); + for (CheckingRegister checkingRegister: list){ + for (DictData dictData: dictDataList){ + if (!checkingRegister.getInventorySts().equals(dictData.getDictValue())) { + CheckingRegister checkingRegister1 = new CheckingRegister(); + checkingRegister1.setCheckDetailId(checkDetailId); + checkingRegister1.setCheckHeaderId(checkDetail.getCheckHeaderId()); + checkingRegister1.setWarehouseCode(ShiroUtils.getWarehouseCode()); + checkingRegister1.setCheckCode(checkDetail.getCheckCode()); + checkingRegister1.setReceiptDetailId(checkDetail.getReceiptDetailId()); + checkingRegister1.setReceiptCode(checkDetail.getReceiptCode()); + checkingRegister1.setReferCode(checkDetail.getReferCode()); + checkingRegister1.setReferLineId(checkDetail.getReferLineId()); + checkingRegister1.setReferPlatform(checkDetail.getReferPlatform()); + checkingRegister1.setMaterialCode(checkDetail.getMaterialCode()); + checkingRegister1.setMaterialName(checkDetail.getMaterialName()); + checkingRegister1.setMaterialSpec(checkDetail.getMaterialSpec()); + checkingRegister1.setMaterialUnit(checkDetail.getMaterialUnit()); + checkingRegister1.setCompanyCode(checkDetail.getCompanyCode()); + checkingRegister1.setInventorySts(dictData.getDictValue()); + checkingRegister1.setCheckBy(ShiroUtils.getLoginName()); + checkingRegister1.setCreated(new Date()); + checkingRegister1.setCreatedBy(ShiroUtils.getLoginName()); + checkingRegister1.setLastUpdated(new Date()); + checkingRegister1.setLastUpdatedBy(ShiroUtils.getLoginName()); + list1.add(checkingRegister1); + } + } + } + for (CheckingRegister checkingRegister: list) { + list1.add(checkingRegister); + } + return list1; + } } diff --git a/src/main/java/com/huaheng/pc/inventory/cycleCountDetail/controller/CycleCountDetailController.java b/src/main/java/com/huaheng/pc/inventory/cycleCountDetail/controller/CycleCountDetailController.java index bc7bd60..4c7e8eb 100644 --- a/src/main/java/com/huaheng/pc/inventory/cycleCountDetail/controller/CycleCountDetailController.java +++ b/src/main/java/com/huaheng/pc/inventory/cycleCountDetail/controller/CycleCountDetailController.java @@ -34,6 +34,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.annotation.Resource; +import java.math.BigDecimal; import java.util.Collections; import java.util.List; @@ -118,7 +119,6 @@ public class CycleCountDetailController extends BaseController { } - /** * 新增盘点明细 */ @@ -215,10 +215,30 @@ public class CycleCountDetailController extends BaseController { return cycleCountDetailService.createCycleCoutTaskByDetailId(cycleCoutdetailId); } + /** + *实盘登记 + * @param detailId + * @param qty + * @return + */ + //@RequiresPermissions("inventory:cyclecountDetail:confirm") + @PostMapping("/confirmGapQty") + @ResponseBody + public AjaxResult confirmGapQty(Integer detailId, BigDecimal qty){ + return cycleCountDetailService.confirmGapQty(detailId,qty); + } - - - + /** + * 差异复盘 + * @param cycleCountHeadCode + * @return + */ + //@RequiresPermissions("inventory:cyclecountDetail:cyclecountRepeat") + @PostMapping("/createCyclecountWithGapQty") + @ResponseBody + public AjaxResult createCyclecountWithGapQty(String cycleCountHeadCode){ + return cycleCountDetailService.createCyclecountWithGapQty(cycleCountHeadCode); + } diff --git a/src/main/java/com/huaheng/pc/inventory/cycleCountDetail/service/CycleCountDetailService.java b/src/main/java/com/huaheng/pc/inventory/cycleCountDetail/service/CycleCountDetailService.java index fdbfeb3..b2df118 100644 --- a/src/main/java/com/huaheng/pc/inventory/cycleCountDetail/service/CycleCountDetailService.java +++ b/src/main/java/com/huaheng/pc/inventory/cycleCountDetail/service/CycleCountDetailService.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.huaheng.framework.web.domain.AjaxResult; import com.huaheng.pc.inventory.cycleCountDetail.domain.CycleCountDetail; +import java.math.BigDecimal; public interface CycleCountDetailService extends IService<CycleCountDetail> { @@ -15,7 +16,11 @@ public interface CycleCountDetailService extends IService<CycleCountDetail> { AjaxResult createCycleCoutTaskByDetailId(Integer cycleCoutdetailId); + AjaxResult confirmGapQty(Integer detailId, BigDecimal qty); + void updataDetailStatus(Integer detailid,Integer status); + + AjaxResult createCyclecountWithGapQty(String cycleCountHeadCode); diff --git a/src/main/java/com/huaheng/pc/inventory/cycleCountDetail/service/CycleCountDetailServiceImpl.java b/src/main/java/com/huaheng/pc/inventory/cycleCountDetail/service/CycleCountDetailServiceImpl.java index 87a1b29..4675cf5 100644 --- a/src/main/java/com/huaheng/pc/inventory/cycleCountDetail/service/CycleCountDetailServiceImpl.java +++ b/src/main/java/com/huaheng/pc/inventory/cycleCountDetail/service/CycleCountDetailServiceImpl.java @@ -23,6 +23,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -46,6 +47,43 @@ public class CycleCountDetailServiceImpl extends ServiceImpl<CycleCountDetailMap + + + + + + /** + * 执行任务修改状态为10 + * @param detailid + */ + @Transactional + @Override + public void updataDetailStatus(Integer detailid,Integer status) { + /*传入明细ID,状态,通过明细ID修改状态,并修改主单状态 */ + if(detailid == null || status == null){ + throw new ServiceException("明细ID或状态不能为空!"); + } + CycleCountDetail cycleCountDetail = this.getById(detailid) ;//盘点明细单 + cycleCountDetail.setEnableStatus(status); + cycleCountDetail.setLastUpdated(new Date()); + cycleCountDetail.setLastUpdatedBy(ShiroUtils.getLoginName());//更新用户 + //主单 + CycleCountHeader cycleCountHeader = new CycleCountHeader(); + cycleCountHeader.setCode(cycleCountDetail.getCycleCountHeadCode()); + cycleCountHeader.setWarehouseCode(cycleCountDetail.getWarehouseCode()); + cycleCountHeader.setCompanyCode(cycleCountDetail.getCompanyCode()); + LambdaQueryWrapper<CycleCountHeader> lambdaQueryWrapper = Wrappers.lambdaQuery(cycleCountHeader); + cycleCountHeader = cycleCountHeaderService.getOne(lambdaQueryWrapper); + if(cycleCountHeader.getStatusCyc() < 10 ){ + //主单状态小于10则修改 + cycleCountHeader.setStatusCyc(status); //主单状态 + cycleCountHeaderService.saveOrUpdate(cycleCountHeader); + } + if(!this.saveOrUpdate(cycleCountDetail)){ + throw new ServiceException("更新盘点执行状态失败!"); + } + } + /** * 新增盘点明细 * */ @@ -118,7 +156,6 @@ public class CycleCountDetailServiceImpl extends ServiceImpl<CycleCountDetailMap return AjaxResult.success("生成盘点明细成功"); } - /** * 生成全部盘点任务 * @param cycleCountHeadCode @@ -196,7 +233,6 @@ public class CycleCountDetailServiceImpl extends ServiceImpl<CycleCountDetailMap } //查询任务头和明细有相同容器,没有就新增任务头和明细 - LambdaQueryWrapper<TaskHeader> taskHeaderLambdaQueryWrapper = Wrappers.lambdaQuery(); taskHeaderLambdaQueryWrapper .lt(TaskHeader::getStatus,100) @@ -207,12 +243,9 @@ public class CycleCountDetailServiceImpl extends ServiceImpl<CycleCountDetailMap .eq(TaskHeader::getContainerCode,cycleCountDetail.getContainerCode());//容器 List<TaskHeader> taskHeaderList = taskHeaderService.list(taskHeaderLambdaQueryWrapper); - TaskHeader task = new TaskHeader(); TaskDetail taskDetail = new TaskDetail(); - if(taskHeaderList.size() <= 0){ - //存在相同容器的主任务直接加入该条主任务的明细 task.setWarehouseCode(ShiroUtils.getWarehouseCode()); task.setCompanyCode(cycleCountDetail.getCompanyCode()); @@ -242,7 +275,6 @@ public class CycleCountDetailServiceImpl extends ServiceImpl<CycleCountDetailMap taskDetail.setWarehouseCode(task.getWarehouseCode()); cycleCountDetail.setTaskHeaderId(task.getId()); //盘点明细修改状态task数据源 }else{ - //取其中一条主单即可 TaskHeader taskHeader = taskHeaderList.get(0); taskDetail.setTaskId(taskHeader.getId());//主单ID @@ -254,7 +286,6 @@ public class CycleCountDetailServiceImpl extends ServiceImpl<CycleCountDetailMap taskDetail.setWarehouseCode(taskHeader.getWarehouseCode()); cycleCountDetail.setTaskHeaderId(taskHeader.getId());//盘点明细修改状态taskHeader数据源 } - taskDetail.setBillCode(cycleCountDetail.getCycleCountHeadCode()); taskDetail.setBillDetailId(cycleCountDetail.getId()); taskDetail.setMaterialCode(cycleCountDetail.getMaterialCode()); @@ -273,7 +304,6 @@ public class CycleCountDetailServiceImpl extends ServiceImpl<CycleCountDetailMap if(taskDetailService.save(taskDetail) == false){ throw new ServiceException("盘点任务明细生成失败!"); } - //修改细单状态 cycleCountDetail.setTaskHeaderId(taskDetail.getId()); //cycleCountDetail.setTaskHeaderId(task.getId()); @@ -283,7 +313,6 @@ public class CycleCountDetailServiceImpl extends ServiceImpl<CycleCountDetailMap cycleCountDetail.setTaskHeaderId(task.getId()); cycleCountDetail.setTaskDetailId(taskDetail.getId()); this.saveOrUpdate(cycleCountDetail); - //修改主单状态 CycleCountHeader cycleCountHeader = new CycleCountHeader(); cycleCountHeader.setCode(cycleCountDetail.getCycleCountHeadCode()); @@ -296,6 +325,124 @@ public class CycleCountDetailServiceImpl extends ServiceImpl<CycleCountDetailMap return AjaxResult.success("盘点任务生成成功"); } + /** + * 实盘登记 + * 登记完成后,修改状态为15 + * @param detailId + * @param qty + * @return + */ + @Transactional + @Override + public AjaxResult confirmGapQty(Integer detailId, BigDecimal qty) { + CycleCountDetail cyclecountDetail = this.getById(detailId); //明细单据 + CycleCountHeader cycleCountHeader =new CycleCountHeader(); + cycleCountHeader.setWarehouseCode(cyclecountDetail.getWarehouseCode()); + cycleCountHeader.setCompanyCode(cyclecountDetail.getCompanyCode()); + cycleCountHeader.setCode(cyclecountDetail.getCycleCountHeadCode()); + LambdaQueryWrapper<CycleCountHeader> cycleCountHeaderLambdaQueryWrapper = Wrappers.lambdaQuery(cycleCountHeader); + cycleCountHeader = cycleCountHeaderService.getOne(cycleCountHeaderLambdaQueryWrapper); //主单 + //任务执行后再实盘登记 + if(cyclecountDetail.getEnableStatus() < 10){ + return AjaxResult.error("盘点任务未执行不能登记数量!"); + } + if(cyclecountDetail.getEnableStatus() == 100){ + return AjaxResult.error("盘点任务完成后不能再登记数量!"); + } + if(cycleCountHeader==null){ + return AjaxResult.error("主单据不存在"); + } + /*if(cyclecountDetail.getEnableStatus() == 10){ + return AjaxResult.error("该条已调整,不能重复调整!"); + }*/ + if(qty.compareTo(new BigDecimal("0")) < 0){ + return AjaxResult.error("实盘登记数不能小于0"); + } + if(cyclecountDetail.getInventoryDetailId() != null){ + InventoryDetail inventoryDetail = inventoryDetailService.getById(cyclecountDetail.getInventoryDetailId()); + if (inventoryDetail == null) { + return AjaxResult.error("没有对应库存信息,请重建盘点单"); + } + if(qty.compareTo(inventoryDetail.getTaskQty()) < 0){ + return AjaxResult.error("登记数量不能小于任务分配数量"); + } + } + cyclecountDetail.setCountedQty(qty); + cyclecountDetail.setGapQty(qty.subtract(cyclecountDetail.getSystemQty())); + cyclecountDetail.setEnableStatus(15); + cyclecountDetail.setLastUpdatedBy(ShiroUtils.getLoginName()); + cyclecountDetail.setLastUpdated(new Date()); + this.saveOrUpdate(cyclecountDetail); + //修改主单状态 + cycleCountHeaderService.updataHeaderStatus(cycleCountHeader.getCode()); + + return AjaxResult.success("登记成功"); + } + + + /** + * 差异复盘 + * @param cycleCountHeaderCode + * @return + */ + @Transactional + @Override + public AjaxResult createCyclecountWithGapQty(String cycleCountHeaderCode) { + /*找出实盘登记中数量有差异的,重新生成盘点单*/ + + + CycleCountHeader cycleCountHeader = new CycleCountHeader(); + cycleCountHeader.setWarehouseCode(ShiroUtils.getWarehouseCode()); + cycleCountHeader.setCode(cycleCountHeaderCode); + LambdaQueryWrapper<CycleCountHeader> lambdaQueryWrapper = Wrappers.lambdaQuery(cycleCountHeader); + cycleCountHeader = cycleCountHeaderService.getOne(lambdaQueryWrapper);//主单 + if(cycleCountHeader == null){ + return AjaxResult.error("盘点单不存在"); + } + //不能重复生成,使用盘点单编码查找sourceCode源盘点单号,已存在就是重复 + CycleCountHeader cy = new CycleCountHeader(); + cy.setSourceCode(cycleCountHeader.getCode()); + cy.setWarehouseCode(cycleCountHeader.getWarehouseCode()); + cy.setCompanyCode(cycleCountHeader.getCompanyCode()); + LambdaQueryWrapper<CycleCountHeader> lam = Wrappers.lambdaQuery(cy); + CycleCountHeader countHeader = cycleCountHeaderService.getOne(lam); + if(countHeader != null){ + return AjaxResult.error("该单据已生成复盘单,请勿重复生成!"); + } + CycleCountDetail cycleCountDetail = new CycleCountDetail(); + cycleCountDetail.setTaskHeaderId(cycleCountHeader.getId()); + cycleCountDetail.setWarehouseCode(cycleCountHeader.getWarehouseCode()); + cycleCountDetail.setCompanyCode(cycleCountHeader.getCompanyCode()); + LambdaQueryWrapper<CycleCountDetail> cycleCountDetailLambdaQueryWrapper = Wrappers.lambdaQuery(); + List<CycleCountDetail> cycleCountDetails = this.list(cycleCountDetailLambdaQueryWrapper);//明细 + //生成复盘盘点主单 + cycleCountHeader.setCode(cycleCountHeaderService.createCode()); + cycleCountHeader.setRound(cycleCountHeader.getRound() + 1);//盘点轮次+1 + cycleCountHeader.setCreated(new Date()); + cycleCountHeader.setCreatedBy(ShiroUtils.getLoginName()); + cycleCountHeader.setSourceCode(cycleCountHeaderCode);//源盘点单号 + if(!cycleCountHeaderService.saveOrUpdate(cycleCountHeader)){ + throw new ServiceException("复盘主单生成失败!"); + } + //获取差异数量不为零的子单重新再生成盘点单 + List<CycleCountDetail> cycleCountDetailList = new ArrayList<>(); + for(CycleCountDetail item:cycleCountDetails){ + //getGapQty不能为null默认值为0 + int f = item.getGapQty().compareTo(BigDecimal.ZERO); + if(f > 0){ + item.setCountedQty(null); + item.setGapQty(BigDecimal.ZERO); + item.setCreatedBy(ShiroUtils.getLoginName()); + item.setCreated(new Date()); + cycleCountDetailList.add(item); + } + + } + if(!this.saveBatch(cycleCountDetailList)){ + throw new ServiceException("复盘明细子单生成失败"); + } + return AjaxResult.success("生成复盘单成功!"); + } 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 1116ed7..1b22eef 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 @@ -312,10 +312,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea } /** - * 下发WCS执行任务 - */ - /** - * + *下发WCS执行任务 * 执行任务 * */ @Override @@ -324,6 +321,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea TaskHeader task = null; for (Integer taskId : taskIds) { task = taskHeaderService.getById(taskId); + if (task.getStatus() > 9) { return AjaxResult.error("任务" + taskId + "已经下发,请不要重复下发,操作中止"); } @@ -335,17 +333,25 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea task.setLastUpdatedBy(ShiroUtils.getLoginName()); taskHeaderService.saveOrUpdate(task); //修改任务明细状态 - TaskDetail record = new TaskDetail(); - record.setStatus(10); - record.setLastUpdated(new Date()); - record.setLastUpdatedBy(ShiroUtils.getLoginName()); - record.setProcessStamp("100"); - taskDetailService.updateById(record); - LambdaUpdateWrapper<TaskDetail> lambdaUpdateWrapper = Wrappers.lambdaUpdate(); - lambdaUpdateWrapper.eq(TaskDetail::getTaskId, task.getId()); - if (!taskDetailService.update(record, lambdaUpdateWrapper)){ + LambdaQueryWrapper<TaskDetail> lambdaWrapper = Wrappers.lambdaQuery(); + lambdaWrapper.eq(TaskDetail::getTaskId, task.getId()); + List<TaskDetail> taskDetailList = taskDetailService.list(lambdaWrapper); + List<TaskDetail> taskDetails = new ArrayList<>(); + for (TaskDetail item:taskDetailList){ + item.setStatus(10); + item.setLastUpdated(new Date()); + item.setLastUpdatedBy(ShiroUtils.getLoginName()); + item.setProcessStamp("100"); + taskDetails.add(item); + //盘点执行修改盘点单据状态为10 + if(task.getTaskType() == 700){ + cycleCountDetailService.updataDetailStatus(item.getBillDetailId(),10); + } + } + if (!taskDetailService.saveOrUpdateBatch(taskDetails)){ throw new ServiceException("更新任务明细失败"); } + // //修改入库明细 // if (task.getInternalTaskType()==100){ // ReceiptDetail receiptDetail = receiptDetailService.queryflow(receiptDetailService.getById(record.getId())); @@ -387,7 +393,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea } - return AjaxResult.success("下发任务成功", task); + return AjaxResult.success("执行下发任务成功", task); } @Override @@ -416,7 +422,6 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea * 完成任务 * * @param task - * @throws Exception */ @Transactional public void completeTask(TaskHeader task) { @@ -429,7 +434,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea // 出库任务 completeShipmentTask(task); } - // 900 出库查看,包过空托出库查看 + // 900 出库查看,空托出库查看 if ( task.getTaskType() == 900) { completeSeeOutTask(task); } @@ -1004,10 +1009,6 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea @Transactional public void completeEmptyIn(TaskHeader taskHeader) { - //解锁容器,更新库位 - containerService.updateLocationCodeAndStatus(taskHeader.getContainerCode(),taskHeader.getToLocation(),"empty"); - //解锁库位,更新容器 - locationService.updateContainerCodeAndStatus(taskHeader.getToLocation(),taskHeader.getContainerCode(),"empty"); //完成任务,修改主单和明细状态 taskHeader.setStatus(100); taskHeader.setLastUpdatedBy(ShiroUtils.getLoginName()); @@ -1026,9 +1027,14 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea item.setLastUpdated(new Date()); //更新时间 taskDetailList.add(item); } - if (taskDetailService.saveOrUpdateBatch(taskDetailList) == false || taskHeaderService.saveOrUpdate(taskHeader) == false) { + if (taskDetailService.saveOrUpdateBatch(taskDetailList) == false || + taskHeaderService.saveOrUpdate(taskHeader) == false) { throw new ServiceException("任务单据状态更新失败!"); } + //解锁容器,更新库位 + containerService.updateLocationCodeAndStatus(taskHeader.getContainerCode(),taskHeader.getToLocation(),"empty"); + //解锁库位,更新容器 + locationService.updateContainerCodeAndStatus(taskHeader.getToLocation(),taskHeader.getContainerCode(),"empty"); } @@ -1038,10 +1044,6 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea */ @Transactional public void completeEmptyOut(TaskHeader taskHeader) { - //更新货位 - locationService.updateContainerCodeAndStatus(taskHeader.getFromLocation(), "", "empty"); - //更新容器信息 - containerService.updateLocationCodeAndStatus(taskHeader.getContainerCode(), "", "empty"); taskHeader.setStatus(100); taskHeader.setLastUpdatedBy(ShiroUtils.getLoginName()); @@ -1063,6 +1065,11 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea if (taskDetailService.saveOrUpdateBatch(taskDetailList) == false || taskHeaderService.saveOrUpdate(taskHeader) == false) { throw new ServiceException("任务单据状态更新失败!"); } + //更新货位 + locationService.updateContainerCodeAndStatus(taskHeader.getFromLocation(), "", "empty"); + //更新容器信息 + containerService.updateLocationCodeAndStatus(taskHeader.getContainerCode(), "", "empty"); + } /** diff --git a/src/main/resources/application-druid.properties b/src/main/resources/application-druid.properties index 54782c1..f46a33f 100644 --- a/src/main/resources/application-druid.properties +++ b/src/main/resources/application-druid.properties @@ -2,14 +2,14 @@ spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver # \u4E3B\u5E93 -spring.datasource.druid.master.url=jdbc:mysql://172.16.29.45:3306/wms_v2?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false +#spring.datasource.druid.master.url=jdbc:mysql://172.16.29.45:3306/wms_v2?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false #spring.datasource.druid.master.url=jdbc:mysql://172.16.29.45:3306/huahengExample?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false -#spring.datasource.druid.master.url=jdbc:mysql://localhost:3306/wms2.0?characterEncoding=utf8&serverTimezone=GMT%2b8 +spring.datasource.druid.master.url=jdbc:mysql://localhost:3306/wms2.0?characterEncoding=utf8&serverTimezone=GMT%2b8 -spring.datasource.druid.master.username=softhuaheng -spring.datasource.druid.master.password=HHrobot123. -#spring.datasource.druid.master.username=root -#spring.datasource.druid.master.password=123456 +#spring.datasource.druid.master.username=softhuaheng +#spring.datasource.druid.master.password=HHrobot123. +spring.datasource.druid.master.username=root +spring.datasource.druid.master.password=123456 # \u4ECE\u5E93 #spring.datasource.druid.slave.open = true #spring.datasource.druid.slave.url=jdbc:mysql://172.16.29.45:3306/huaheng?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false diff --git a/src/main/resources/static/huaheng/js/huahengUI.js b/src/main/resources/static/huaheng/js/huahengUI.js index f36dde4..40260c3 100644 --- a/src/main/resources/static/huaheng/js/huahengUI.js +++ b/src/main/resources/static/huaheng/js/huahengUI.js @@ -317,6 +317,10 @@ }, // 表单封装处理 form: { + reset: function(formId) { + var currentId = $.common.isEmpty(formId) ? $('form').attr('id') : formId; + $("#" + currentId)[0].reset(); + }, // 获取选中复选框项 selectCheckeds: function(name) { var checkeds = ""; diff --git a/src/main/resources/templates/check/checkDetail/checkDetail.html b/src/main/resources/templates/check/checkDetail/checkDetail.html index 567e70a..ccf7a4d 100644 --- a/src/main/resources/templates/check/checkDetail/checkDetail.html +++ b/src/main/resources/templates/check/checkDetail/checkDetail.html @@ -26,6 +26,7 @@ var checkDetailStatus = [[${@dict.getType('checkDetailStatus')}]]; var prefix = ctx + "check/checkDetail"; var inventorySts = [[${@dict.getType('inventoryStatus')}]]; + var prefix2 = ctx + "check/checkingRegister"; $(function() { var options = { @@ -173,6 +174,25 @@ checkHeaderId : [[${id}]] }; } + + function detail(id, code) { + checkId = id; + var url = prefix2+"/" + id; + createtable(); + } + + function createtable() { + var url = prefix2+"/"+checkId; + $("#tabDetail").children().remove(); + $("#myTab li").removeClass("active"); + var height = $(document).height()-100 + 'px'; + var str = '<iframe class="huaheng_iframe" name="iframe" width="100%" height="' + height + '" src="' + url + '" frameborder="0" data-id="' + url + '" seamless></iframe>'; + $("#tabDetail").append(str); + $(".tab-pane").removeClass("in active"); + $("#myTab li:eq(1)").addClass("active"); + $("#tabDetail").addClass("in active"); + } + </script> </body> </html> \ No newline at end of file diff --git a/src/main/resources/templates/check/checkHeader/checkHeader.html b/src/main/resources/templates/check/checkHeader/checkHeader.html index 0a23c26..80c3231 100644 --- a/src/main/resources/templates/check/checkHeader/checkHeader.html +++ b/src/main/resources/templates/check/checkHeader/checkHeader.html @@ -10,7 +10,7 @@ <ul id="myTab" class="nav nav-tabs"> <li class="active"><a href="#tabHeader" data-toggle="tab">主表</a></li> <li><a href="#tabDetail" data-toggle="tab">明细</a></li> - <li><a href="#registration" data-toggle="tab" onclick="createTableRegistration()">质检登记</a></li> + <li><a href="#registration" data-toggle="tab">质检登记</a></li> </ul> <div id="myTabContent" class="tab-content"> <div class="tab-pane fade in active" id="tabHeader"> @@ -62,8 +62,57 @@ </div> <div class="tab-pane fade" id="registration"> - <table id="bootstrap-table2" data-mobile-responsive="true" - class="table table-bordered table-hover"></table> + <div class="col-sm-12 select-info"> + <form id="registration-form"> + <div class="select-list"> + <ul> + <li> + 质检单号:<input type="text" name="checkCode"/> + </li> + <li> + 入库单号:<input type="text" name="receiptCode"/> + </li> + <li> + 关联单号:<input type="text" name="referCode"/> + </li> + <li> + 关联行号:<input type="text" name="referLineId"/> + </li> + <li> + 物料编码:<input type="text" name="materialCode"/> + </li> + <li> + 物料名称:<input type="text" name="materialName"/> + </li> + <li> + 质检人:<input type="text" name="checkBy"/> + </li> + <li class="time"> + <label>创建时间: </label> + <input type="text" class="time-input" id="startTime" placeholder="开始时间" name="params[createdBegin]"/> + <span>-</span> + <input type="text" class="time-input" id="endTime" placeholder="结束时间" name="params[createdEnd]"/> + </li> + <li> + <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i class="fa fa-search"></i> 搜索</a> + <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset('registration-form')"><i class="fa fa-refresh"></i> 重置</a> + </li> + </ul> + </div> + </form> + </div> + + <div class="btn-group hidden-xs" id="toolbarReg" role="group"> + <a class="btn btn-outline btn-danger btn-rounded" onclick="complete()" shiro:hasPermission="check:checkingRegister:remove"> + <i class="fa fa-trash-o"></i> 质检完成 + </a> + <a class="btn btn-outline btn-danger btn-rounded" onclick="$.operate.batRemove()" shiro:hasPermission="check:checkingRegister:remove"> + <i class="fa fa-trash-o"></i> 删除 + </a> + </div> + <div class="col-sm-12 select-info"> + <table id="bootstrap-table2" data-mobile-responsive="true" class="table table-bordered table-hover"></table> + </div> </div> </div> </div> @@ -78,11 +127,16 @@ var removeFlag = [[${@permission.hasPermi('check:checkHeader:remove')}]]; var receiptTypes = [[${@receiptTypeService.getType()}]]; var checkHeaderStatus = [[${@dict.getType('checkHeaderStatus')}]]; + var checkDetailStatus = [[${@dict.getType('checkDetailStatus')}]]; + var inventorySts = [[${@dict.getType('inventoryStatus')}]]; var printFlag = [[${@permission.hasPermi('check:checkHeader:report')}]]; var addFlag= [[${@permission.hasPermi('check:checkHeader:add')}]]; var datas = [[${@dict.getType('sys_normal_disable')}]]; var type = [[${@dict.getType('checkType')}]]; var checkId = 0; + var checkHeaderCode = 0; + var checkDetailId = 0; + $(function() { var options = { url: prefix + "/list", @@ -94,6 +148,7 @@ search: false, sortName: "id", sortOrder: "desc", + columns: [{ checkbox: true }, @@ -202,33 +257,381 @@ $.table.init(options); }); + //质检明细表格初始化 + $("#bootstrap-table1").bootstrapTable({ + url: prefix + "/list", + createUrl: prefix1 + "/add", + updateUrl: prefix1 + "/edit/{id}", + removeUrl: prefix1 + "/remove", + queryParams: queryParams, + modalName: "质检明细", + sortName: "lastUpdated", + sortOrder: "desc", + iconSize: "outline", + toolbar: "#toolbar1", + contentType: "application/x-www-form-urlencoded", + pagination: true, // 是否显示分页(*) + pageNumber: 1, // 初始化加载第一页,默认第一页 + pageSize: 50, // 每页的记录行数(*) + pageList: [10, 25, 50, 100], // 可供选择的每页的行数(*) + onRefresh: function(){ + loadDetail(); + }, + columns: [{ + checkbox: true + }, + { + field : 'id', + title : 'id' + }, + { + field : 'checkHeaderId', + title : '质检头id' + }, + { + field : 'warehouseCode', + title : '仓库编码', + visible : false + }, + { + field : 'checkCode', + title : '质检单编码' + }, + { + field : 'inventoryDetailId', + title : '库存明细标识' + }, + { + field : 'locationCode', + title : '库位编码' + }, + { + field : 'containerCode', + title : '容器编码' + }, + { + field : 'receiptDetailId', + title : '入库单明细标识' + }, + { + field : 'receiptCode', + title : '入库单号' + }, + { + field : 'referCode', + title : '关联单号' + }, + { + field : 'referLineId', + title : '关联行号' + }, + { + field : 'referPlatform', + title : '关联平台' + }, + { + field : 'materialCode', + title : '物料编码' + }, + { + field : 'materialName', + title : '物料名称' + }, + { + field : 'materialSpec', + title : '物料规格' + }, + { + field : 'materialUnit', + title : '物料单位' + }, + { + field : 'companyCode', + title : '货主代码' + }, + { + field : 'inventorySts', + title : '库存状态', + align: 'center', + formatter: function (value, row, index) { + return $.table.selectDictLabel(inventorySts, value); + } + }, + { + field : 'status', + title : '状态', + align: 'center', + formatter: function (value, row, index) { + return $.table.selectDictLabel(checkDetailStatus, value); + } + }, + { + field : 'qty', + title : '系统数量' + }, + { + field : 'checkBy', + title : '质检人' + }, + { + field : 'checkAt', + title : '质检时间' + }, + { + field : 'created', + title : '创建时间' + }, + { + field : 'createdBy', + title : '创建用户' + }, + { + title: '操作', + align: 'center', + formatter: function(value, row, index) { + var actions = []; + actions.push('<a class="btn btn-danger btn-xs ' + removeFlag + '" href="#" onclick="$.operate.remove(\'' + row.id + '\')"><i class="fa fa-remove"></i>删除</a>'); + return actions.join(''); + } + }], + onDblClickRow: function (row) { + if (typeof detail != 'undefined') { + detailReg(row.id) + } + } + }); + //质检登记表格初始化 + $("#bootstrap-table2").bootstrapTable({ + contentType: "application/x-www-form-urlencoded", + editable: true, + clickEdit: true, + clickToSelect: true, + cache: false, + showToggle:true, //显示切换按钮来切换表/卡片视图。 + showPaginationSwitch:false, //显示分页切换按钮 + pagination: true, + idePagination: "server", + queryParamsType: "params", + pageList: [10,25,50], + pageNumber: 1, + uniqueId: "id", + toolbar: "#toolbarReg", + iconSize: 'outline', + showRefresh: true, + showColumns: true, + showExport: true, + smartDisplay:true, + url: prefix2 + "/list", + modalName: "质检报告", + method: "post", + search: false, + sortName: "id", + sortOrder: "desc", + sortable: true, + onRefresh: function(){ + loadReg(); + }, + columns: [{ + checkbox: true + }, + { + field : 'id', + title : 'id' + }, + { + field : 'checkDetailId', + title : '质检明细标识', + visible : false + }, + { + field : 'checkHeaderId', + title : '头表标识', + visible : false + }, + { + field : 'warehouseCode', + title : '仓库代码', + visible : false + }, + { + field : 'checkCode', + title : '质检单号', + align:"center", + order:"asc", + sortable:"true" + }, + { + field : 'receiptDetailId', + title : '入库单明细标识' , + visible:false + }, + { + field : 'receiptCode', + title : '入库单号' + }, + { + field : 'referCode', + title : '关联单号' + }, + { + field : 'referLineId', + title : '关联行号' , + visible:false + }, + { + field : 'referPlatform', + title : '关联平台' , + visible:false + }, + { + field : 'materialCode', + title : '物料编码' + }, + { + field : 'materialName', + title : '物料名称' + }, + { + field : 'materialSpec', + title : '物料规格' + }, + { + field : 'materialUnit', + title : '物料单位' + }, + { + field : 'companyCode', + title : '货主编码' , + visible:false + }, + { + field : 'inventorySts', + title : '库存状态', + align: 'center', + formatter: function (value, row, index) { + return $.table.selectDictLabel(inventorySts, value); + } + }, + { + field : 'qty', + title : '数量', + editable: { + type: 'text', + title: '数量', + validate: function (v) { + if (isNaN(v)) return '数量必须是数字'; + var age = parseInt(v); + if (age < 0) return '数量必须是正整数'; + } + } + }, + { + field : 'checkBy', + title : '质检人' + }, + { + field : 'checkAt', + title : '质检时间' + }, + { + field : 'created', + title : '创建时间' + }, + { + field : 'createdBy', + title : '创建用户' + }, + { + field : 'lastUpdated', + title : '更新时间' + }, + { + field : 'lastUpdatedBy', + title : '更新用户' + }, + { + field : 'userDef1', + title : '自定义字段1' , + visible:false + }, + { + field : 'userDef2', + title : '自定义字段2' , + visible:false + }, + { + field : 'userDef3', + title : '自定义字段3' , + visible:false + }], + onClickRow: function (row, $element) { + curRow = row; + }, + onEditableSave: function (field, row, oldValue, $el) { + $.ajax({ + type: "post", + url: prefix2+"/edit", + data: row, + dataType: 'JSON', + success: function (data, status) { + if (status != "success") { + alert('提交数据失败'); + } + }, + error: function () { + alert('编辑失败'); + }, + complete: function () { + } + }); + } + }); + /* 质检单列表-详细 */ function detail(id, code) { checkId = id; - var url = prefix1+"/" + id; - createtable(url); - } - - function createtable(url) { - $("#tabDetail").children().remove(); + checkHeaderCode = code; $("#myTab li").removeClass("active"); - var height = $(document).height()-100 + 'px'; - var str = '<iframe class="huaheng_iframe" name="iframe" width="100%" height="' + height + '" src="' + url + '" frameborder="0" data-id="' + url + '" seamless></iframe>'; - $("#tabDetail").append(str); - $(".tab-pane").removeClass("in active"); + $("#tabHeader").removeClass("in active"); $("#myTab li:eq(1)").addClass("active"); $("#tabDetail").addClass("in active"); + loadDetail(); } - function createTableRegistration() { - url = prefix2+"/"+checkId; - $("#registration").children().remove(); - $("#myTab li").removeClass("active"); - var height = $(document).height()-100 + 'px'; - var str = '<iframe class="huaheng_iframe" name="iframe" width="100%" height="' + height + '" src="' + url + '" frameborder="0" data-id="' + url + '" seamless></iframe>'; - $("#registration").append(str); - $(".tab-pane").removeClass("in active"); - $("#myTab li:eq(1)").addClass("active"); + function detailReg(id) { + checkDetailId = id; + $("#myTab li:eq(1)").removeClass("active"); + $("#tabDetail").removeClass("in active"); + $("#myTab li:eq(2)").addClass("active"); $("#registration").addClass("in active"); + loadReg(); + } + + /* 质检单列表-详细 */ + function loadDetail() { + $.ajax({ + url:prefix1+'/list', + type:"post", + data:{ + checkHeaderId: checkId, + }, + success:function (value) { + $("#bootstrap-table1").bootstrapTable('load',value.data); + } + }); + } + + /* 质检登记*/ + function loadReg(params) { + $.ajax({ + url:prefix2+'/list', + type:"post", + data:{ + checkDetailId: checkDetailId + }, + success:function (value) { + $("#bootstrap-table2").bootstrapTable('load',value.data); + } + }); } function queryParams(params) { @@ -242,8 +645,10 @@ }; }; - - + function complete() { + var url = prefix1+"/complete"; + $.operate.submit(url, "post", "json", data); + } </script> </body> </html> \ No newline at end of file diff --git a/src/main/resources/templates/check/checkingRegister/checkingRegister.html b/src/main/resources/templates/check/checkingRegister/checkingRegister.html index ba92336..22e3298 100644 --- a/src/main/resources/templates/check/checkingRegister/checkingRegister.html +++ b/src/main/resources/templates/check/checkingRegister/checkingRegister.html @@ -60,6 +60,7 @@ var editFlag = [[${@permission.hasPermi('check:checkingRegister:edit')}]]; var removeFlag = [[${@permission.hasPermi('check:checkingRegister:remove')}]]; var inventorySts = [[${@dict.getType('inventoryStatus')}]]; + var curRow = {}; $(function() { $("#bootstrap-table").bootstrapTable({ @@ -70,12 +71,14 @@ cache: false, showToggle:true, //显示切换按钮来切换表/卡片视图。 showPaginationSwitch:true, //显示分页切换按钮 + method: "post", queryParams: queryParams, pagination: true, pageList: [10,25,50,100], pageSize:10, pageNumber:1, uniqueId: "id", + toolbar: "#toolbar", showRefresh: true, minimumCountColumns: 2, smartDisplay:true, @@ -97,7 +100,15 @@ { field : 'checkDetailId', title : '质检明细标识', - visible : false + editable: { + type: 'text', + title: '质检明细标识', + validate: function (v) { + if (isNaN(v)) return '必须是数字'; + var age = parseInt(v); + if (age < 0) return '必须是正整数'; + } + } }, { field : 'checkHeaderId', @@ -114,15 +125,7 @@ title : '质检单号', align:"center", order:"asc", - sortable:"true", - editable: { - type: 'text', - title: '用户名', - validate: function (v) { - if (!v) return '用户名不能为空'; - - } - } + sortable:"true" }, { field : 'receiptDetailId', @@ -131,16 +134,7 @@ }, { field : 'receiptCode', - title : '入库单号', - editable: { - type: 'text', - title: '入库单号', - validate: function (v) { - if (isNaN(v)) return '年龄必须是数字'; - var age = parseInt(v); - if (age <= 0) return '年龄必须是正整数'; - } - } + title : '入库单号' }, { field : 'referCode', @@ -158,7 +152,11 @@ }, { field : 'materialCode', - title : '物料编码' + title : '物料编码', + editable: { + type: 'text', + title: '物料编码', + } }, { field : 'materialName', @@ -181,13 +179,24 @@ field : 'inventorySts', title : '库存状态', align: 'center', - formatter: function (value, row, index) { - return $.table.selectDictLabel(inventorySts, value); + editable: { + type: 'select', + title: '库存状态', + source:[{value:"defective",text:"次品"},{value:"discussed",text:"待确认"},{value:"good",text:"良品"},{value:"scrap",text:"报废品"}] } }, { field : 'qty', - title : '数量' + title : '数量', + editable: { + type: 'text', + title: '数量', + validate: function (v) { + if (isNaN(v)) return '数量必须是数字'; + var age = parseInt(v); + if (age < 0) return '数量必须是正整数'; + } + } }, { field : 'checkBy', @@ -231,25 +240,24 @@ onClickRow: function (row, $element) { curRow = row; }, - onLoadSuccess: function (aa, bb, cc) { - $("#tb_user a").editable({ - url: function (params) { - var sName = $(this).attr("name"); - curRow[sName] = params.value; - $.ajax({ - type: 'POST', - url: "/Editable/Edit", - data: curRow, - dataType: 'JSON', - success: function (data, textStatus, jqXHR) { - alert('保存成功!'); - }, - error: function () { alert("error");} - }); + onEditableSave: function (field, row, oldValue, $el) { + $.ajax({ + type: "post", + url: prefix+"/edit", + data: row, + dataType: 'JSON', + success: function (data, status) { + if (status == "success") { + alert('提交数据成功'); + } + }, + error: function () { + alert('编辑失败'); }, - type: 'text' + complete: function () { + } }); - }, + } // onClickCell: function(field, value, row, $element) { // $element.attr('contenteditable', true); // $element.attr('bgcolor', "#FFF"); @@ -261,18 +269,7 @@ // }) // }, }); - // $('#bootstrap-table').editable({ - // type: "select", //编辑框的类型。支持text|textarea|select|date|checklist等 - // source: [{ value: 1, text: "开发部" }, { value: 2, text: "销售部" }, {value:3,text:"行政部"}], - // title: "选择部门", //编辑框的标题 - // disabled: false, //是否禁用编辑 - // mode: "popup", //编辑框的模式:支持popup和inline两种模式,默认是popup - // validate: function (value) { //字段验证 - // if (!$.trim(value)) { - // return '不能为空'; - // } - // } - // }); + // var options = { // // }; @@ -282,6 +279,12 @@ var checkHeaderId; + function addButton() { + if (checkHeaderId != ""){ + $("#toolbar").append("<a class=\"btn btn-outline btn-success btn-rounded\" onclick=\"addRow()\" shiro:hasPermission=\"check:checkingRegister:add\"><i class=\"fa fa-plus\"></i>新增</a>"); + } + } + function queryParams(params) { var checkId = [[${checkId}]]; if (checkId == 0) { @@ -289,19 +292,13 @@ } else { checkHeaderId = checkId; } + addButton(); return { checkHeaderId :checkHeaderId, pageSize: params.limit, pageNum: params.offset / params.limit + 1, searchValue: params.search, }; - addButton(); - } - - function addButton() { - if (checkHeaderId != ""){ - $("#toolbar").append("<a class=\"btn btn-outline btn-success btn-rounded\" onclick=\"addRow()\" shiro:hasPermission=\"check:checkingRegister:add\"><i class=\"fa fa-plus\"></i>新增</a>"); - } } function addRow() { @@ -310,9 +307,9 @@ row: { id: '', checkDetailId: '', - checkHeaderId: '', + checkHeaderId: [[${checkHeaderId}]], warehouseCode: '', - checkCode: '', + checkCode: [[${checkCode}]], receiptDetailId: '', receiptCode: '', referCode: '', diff --git a/src/main/resources/templates/include.html b/src/main/resources/templates/include.html index cdaac58..b67955d 100644 --- a/src/main/resources/templates/include.html +++ b/src/main/resources/templates/include.html @@ -25,6 +25,7 @@ <script th:src="@{/ajax/libs/bootstrap-table/bootstrap-table.min.js}"></script> <script th:src="@{/ajax/libs/bootstrap3-editable/js/bootstrap-editable.js}"></script> <script th:src="@{/ajax/libs/bootstrap-table/locale/bootstrap-table-zh-CN.min.js}"></script> + <script th:src="@{/ajax/libs/bootstrap-table/extensions/editable/bootstrap-table-editable.js}"></script> <script th:src="@{/ajax/libs/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js}"></script> <script th:src="@{/ajax/libs/bootstrap-table/extensions/toolbar/bootstrap-table-toolbar.min.js}"></script> <!-- jquery-validate 表单验证插件 --> diff --git a/src/main/resources/templates/inventory/cycleCountDetail/cycleCountDetail.html b/src/main/resources/templates/inventory/cycleCountDetail/cycleCountDetail.html index 7231b96..8c9e175 100644 --- a/src/main/resources/templates/inventory/cycleCountDetail/cycleCountDetail.html +++ b/src/main/resources/templates/inventory/cycleCountDetail/cycleCountDetail.html @@ -88,10 +88,10 @@ shiro:hasPermission="inventory:cycleCountDetail:add"> <i class="fa fa-plus"></i> 新增 </a> - <!--<a class="btn btn-outline btn-danger btn-rounded" onclick="createCyclecountWithGapQty()" + <a class="btn btn-outline btn-danger btn-rounded" onclick="createCyclecountWithGapQty()" shiro:hasPermission="inventory:cyclecountDetail:cyclecountRepeat"> <i class="fa fa-vcard"></i> 差异复盘 - </a>--> + </a> <a class="btn btn-outline btn-danger btn-rounded" onclick="outcheckAll()" shiro:hasPermission="inventory:cyclecountDetail:createTask"> <i class="fa fa-vcard"></i> 生成全部盘点任务