package com.huaheng.pc.shipment.shipmentHeader.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.huaheng.common.utils.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.huaheng.common.constant.QuantityConstant; import com.huaheng.common.exception.service.ServiceException; import com.huaheng.common.support.Convert; import com.huaheng.common.utils.StringUtils; import com.huaheng.common.utils.security.ShiroUtils; 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; import com.huaheng.pc.config.company.domain.Company; import com.huaheng.pc.config.company.service.CompanyService; import com.huaheng.pc.config.waveMaster.domain.WaveMaster; import com.huaheng.pc.config.waveMaster.service.WaveMasterService; import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail; import com.huaheng.pc.receipt.receiptDetailHistory.domain.ReceiptDetailHistory; import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader; import com.huaheng.pc.receipt.receiptHeaderHistory.domain.ReceiptHeaderHistory; import com.huaheng.pc.shipment.shipmentDetail.domain.ShipmentDetail; import com.huaheng.pc.shipment.shipmentDetail.service.ShipmentDetailService; import com.huaheng.pc.shipment.shipmentDetailHistory.domain.ShipmentDetailHistory; import com.huaheng.pc.shipment.shipmentDetailHistory.service.ShipmentDetailHistoryService; import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader; import com.huaheng.pc.shipment.shipmentHeader.service.ShipmentHeaderService; import com.huaheng.pc.shipment.shipmentHeaderHistory.domain.ShipmentHeaderHistory; import com.huaheng.pc.shipment.shipmentHeaderHistory.service.ShipmentHeaderHistoryService; import io.swagger.annotations.ApiParam; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.transaction.annotation.Transactional; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; /** * 出库单主 信息操作处理 * * @author huaheng * @date 2018-08-19 */ @Controller @RequestMapping("/shipment/shipmentHeader") public class ShipmentHeaderController extends BaseController { private String prefix = "shipment/shipmentHeader"; @Resource private ShipmentHeaderService shipmentHeaderService; @Resource private ShipmentDetailService shipmentDetailService; @Resource private WaveMasterService waveMasterService; @Resource private CompanyService companyService; @Resource private ShipmentHeaderHistoryService shipmentHeaderHistoryService; @Resource private ShipmentDetailHistoryService shipmentDetailHistoryService; @RequiresPermissions("shipment:bill:view") @GetMapping() public String shipmentHeader() { return prefix + "/shipmentHeader"; } /** * 查询出库单主列表 */ @RequiresPermissions("shipment:bill:list") @Log(title = "出库-出库单", operating="查看出库主单", action = BusinessType.GRANT) @PostMapping("/list") @ResponseBody public TableDataInfo list(ShipmentHeader shipmentHeader,String createdBegin, String createdEnd) { LambdaQueryWrapper<ShipmentHeader> lambdaQueryWrapper = Wrappers.lambdaQuery(); PageDomain pageDomain = TableSupport.buildPageRequest(); Integer pageNum = pageDomain.getPageNum(); Integer pageSize = pageDomain.getPageSize(); lambdaQueryWrapper.ge(StringUtils.isNotEmpty(createdBegin),ShipmentHeader::getCreated, createdBegin) .le(StringUtils.isNotEmpty(createdEnd), ShipmentHeader::getCreated, createdEnd) .eq(ShipmentHeader::getWarehouseCode,ShiroUtils.getWarehouseCode()) .eq(ShipmentHeader::getDeleted,false) .in(StringUtils.isNotEmpty(shipmentHeader.getCompanyCode()),ShipmentHeader::getCompanyCode, shipmentHeader.getCompanyCode()) .in(StringUtils.isEmpty(shipmentHeader.getCompanyCode()), ShipmentHeader::getCompanyCode, ShiroUtils.getCompanyCodeList()) .eq(StringUtils.isNotEmpty(shipmentHeader.getCode()),ShipmentHeader::getCode,shipmentHeader.getCode()) .eq(StringUtils.isNotEmpty(shipmentHeader.getShipmentType()),ShipmentHeader::getShipmentType,shipmentHeader.getShipmentType()) .notIn(ShipmentHeader::getShipmentType,"OO") .eq(StringUtils.isNotEmpty(shipmentHeader.getReferCode()), ShipmentHeader::getReferCode, shipmentHeader.getReferCode()) .eq(StringUtils.isNotEmpty(shipmentHeader.getReferCodeType()), ShipmentHeader::getReferCodeType, shipmentHeader.getReferCodeType()) .eq(shipmentHeader.getFirstStatus()!=null, ShipmentHeader::getFirstStatus, shipmentHeader.getFirstStatus()) .eq(shipmentHeader.getLastStatus()!=null, ShipmentHeader::getLastStatus, shipmentHeader.getLastStatus()) .eq(StringUtils.isNotNull(shipmentHeader.getKdEable()), ShipmentHeader::getKdEable, shipmentHeader.getKdEable()) .eq(StringUtils.isNotEmpty(shipmentHeader.getCreatedBy()), ShipmentHeader::getCreatedBy, shipmentHeader.getCreatedBy()) .orderByDesc(ShipmentHeader::getId); if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)){ /** * 使用分页查询 */ Page<ShipmentHeader> page = new Page<>(pageNum, pageSize); IPage<ShipmentHeader> iPage = shipmentHeaderService.page(page, lambdaQueryWrapper); return getMpDataTable(iPage.getRecords(),iPage.getTotal()); } else { List<ShipmentHeader> list = shipmentHeaderService.list(lambdaQueryWrapper); return getDataTable(list); } } /** * 新增出库单主 */ @GetMapping("/add") public String add() { return prefix + "/add"; } /** * 新增保存出库单主 */ @RequiresPermissions("shipment:bill:add") @Log(title = "出库-出库单", operating="新增出库主单", action = BusinessType.INSERT) @PostMapping("/add") @ResponseBody public AjaxResult addSave(ShipmentHeader shipmentHeader) { AjaxResult ajaxResult=shipmentHeaderService.saveHeader(shipmentHeader); return ajaxResult; } /** * 修改出库单主 */ @GetMapping("/edit/{id}") public String edit(@PathVariable("id") Integer id, ModelMap mmap) { ShipmentHeader shipmentHeader = shipmentHeaderService.getById(id); mmap.put("shipmentHeader", shipmentHeader); return prefix + "/edit"; } /** * 修改保存出库单主 */ @RequiresPermissions("shipment:bill:edit") @Log(title = "出库-出库单", operating="修改出库主单", action = BusinessType.UPDATE) @PostMapping("/edit") @ResponseBody public AjaxResult editSave(ShipmentHeader shipmentHeader) { ShipmentHeader temp = shipmentHeaderService.getById(shipmentHeader.getId()); if(temp.getFirstStatus()>100){ return AjaxResult.error("已经超过订单池状态,不能修改"); } temp.setCompanyCode(shipmentHeader.getCompanyCode()); temp.setReferCode(shipmentHeader.getReferCode()); temp.setReferPlatform(shipmentHeader.getReferPlatform()); temp.setCustomerCode(shipmentHeader.getCustomerCode()); temp.setPriority(shipmentHeader.getPriority()); temp.setLastUpdatedBy(ShiroUtils.getLoginName()); temp.setLastUpdated(new Date()); return toAjax(shipmentHeaderService.saveOrUpdate(temp)); } /** * 删除出库单主 */ @RequiresPermissions("shipment:bill:remove") @Log(title = "出库-出库单", operating="删除出库主单", action = BusinessType.DELETE) @PostMapping( "/remove") @ResponseBody @Transactional public AjaxResult remove(String ids) throws InvocationTargetException, IllegalAccessException { if (StringUtils.isEmpty(ids)) { return AjaxResult.error("id不能为空"); } return shipmentHeaderService.deleteHeaderAndDetail(ids); } /** * 审核出库主单 */ @RequiresPermissions("shipment:bill:edit") @Log(title = "出库-出库单", operating="审核出库主单", action = BusinessType.UPDATE) @PostMapping("/review") @ResponseBody public AjaxResult review(String ids) { if (StringUtils.isEmpty(ids)) { return AjaxResult.error("id不能为空"); } return shipmentHeaderService.review(ids); } /** * 出库单报表打印 * @return */ @RequiresPermissions("shipment:bill:report") @Log(title = "出库-出库单", operating="打印出库单报表", action = BusinessType.OTHER) @GetMapping("/report/{id}") public String report(@PathVariable("id") Integer id, ModelMap mmap) { ShipmentHeader shipmentHeader = shipmentHeaderService.getById(id); mmap.put("shipmentHeader", shipmentHeader); LambdaQueryWrapper<ShipmentDetail> lambdaQueryWrapper = Wrappers.lambdaQuery(); lambdaQueryWrapper.eq(ShipmentDetail::getShipmentId,id) .eq(ShipmentDetail::getWarehouseCode,ShiroUtils.getWarehouseCode()); List<ShipmentDetail> details = shipmentDetailService.list(lambdaQueryWrapper); mmap.put("details", details); return prefix + "/report"; } @PostMapping("/getShipmentHeader") @ResponseBody public AjaxResult<ShipmentHeader> getShipmentHeader(int id){ return AjaxResult.success(shipmentHeaderService.getById(id)); } /** * 订单分析 */ // @RequiresPermissions("shipment:bill:edit") // @Log(title = "出库-出库单", operating="订单分析", action = BusinessType.OTHER) // @PostMapping( "/analysis") // @ResponseBody // @Transactional // public void analysis(String ids){ // if (StringUtils.isEmpty(ids)) // throw new ServiceException("id不能为空"); // for (Integer id : Convert.toIntArray(ids)) // { // // } // // } /** * 加入波次 */ @GetMapping("/wave") public String addZoneCode() { return prefix + "/addWave"; } /** * 查询波次列表 */ @RequiresPermissions("shipment:bill:wave") @Log(title = "出库-出库单", operating = "查询库区列表", action = BusinessType.GRANT) @PostMapping("/waveList") @ResponseBody public TableDataInfo waveList() { LambdaQueryWrapper<WaveMaster> lam = Wrappers.lambdaQuery(); lam.eq(WaveMaster::getWarehouseCode,ShiroUtils.getWarehouseCode()); List<WaveMaster> waveMasters = waveMasterService.list(lam); return getDataTable(waveMasters); } /** * 波次 */ @RequiresPermissions("shipment:bill:wave") @Log(title = "出库-出库单", operating="波次", action = BusinessType.OTHER) @PostMapping( "/addWave") @ResponseBody @Transactional public AjaxResult analysis(String ids,String code){ if (StringUtils.isEmpty(ids)) { throw new ServiceException("id不能为空"); } if(StringUtils.isEmpty(code)){ throw new ServiceException("波次不能为空"); } shipmentDetailService.saveWave(ids,code); return AjaxResult.success("加入波次成功"); } /** * */ @PostMapping( "/backERP") @ResponseBody @Transactional public AjaxResult backERP(String id){ if (StringUtils.isEmpty(id)) { return AjaxResult.error("id不能为空"); } ShipmentHeader shipmentHeader = shipmentHeaderService.getById(id); if (shipmentHeader == null) { return AjaxResult.error("没有找到出库单"); } shipmentHeader.setFirstStatus(QuantityConstant.SHIPMENT_HEADER_RETURN); shipmentHeader.setLastStatus(QuantityConstant.SHIPMENT_HEADER_RETURN); shipmentHeaderService.updateById(shipmentHeader); return AjaxResult.success("回传成功"); } }