ShipmentDetailController.java 6.92 KB
package com.huaheng.pc.shipment.shipmentDetail.controller;

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.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.shipmentPreference.service.ShipmentPreferenceService;
import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService;
import com.huaheng.pc.shipment.shipmentDetail.domain.ShipmentDetail;
import com.huaheng.pc.shipment.shipmentDetail.service.ShipmentDetailService;
import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 出库明细 信息操作处理
 * 
 * @author huaheng
 * @date 2018-08-19
 */
@Controller
@RequestMapping("/shipment/shipmentDetail")
public class ShipmentDetailController extends BaseController
{
    private String prefix = "shipment/shipmentDetail";
	
	@Autowired
	private ShipmentDetailService shipmentDetailService;
	@Autowired
	private InventoryDetailService inventoryDetailService;
	@Autowired
	private ShipmentPreferenceService shipmentPreferenceService;



	@RequiresPermissions("shipment:bill:view")
    @GetMapping("/{shipmentId}/{shipmentCode}")
	public String shipmentDetail(@PathVariable("shipmentId") String shipmentId, @PathVariable("shipmentCode") String shipmentCode,@PathVariable("inventoryStatus") String inventoryStatus, ModelMap mmap)
	{
        mmap.put("receiptId", shipmentId);
		mmap.put("shipmentCode", shipmentCode);
		mmap.put("inventoryStatus",inventoryStatus);
	    return prefix + "/shipmentDetail";
	}
	
	/**
	 * 查询出库明细列表
	 */
	@RequiresPermissions("shipment:bill:list")
	@Log(title = "出库-出库单", operating= "查看出库明细", action = BusinessType.GRANT)
	@PostMapping("/list")
	@ResponseBody
	public TableDataInfo list(ShipmentDetail shipmentDetail)
	{
		LambdaQueryWrapper<ShipmentDetail> lambdaQueryWrapper = Wrappers.lambdaQuery();
		PageDomain pageDomain = TableSupport.buildPageRequest();
		Integer pageNum = pageDomain.getPageNum();
		Integer pageSize = pageDomain.getPageSize();

		lambdaQueryWrapper
				.eq(ShipmentDetail::getWarehouseCode,ShiroUtils.getWarehouseCode())
				.in(ShipmentDetail::getCompanyCode,ShiroUtils.getCompanyCodeList())
				.eq(StringUtils.isNotEmpty(shipmentDetail.getShipmentCode()),ShipmentDetail::getShipmentCode,shipmentDetail.getShipmentCode())
				.eq(shipmentDetail.getShipmentId()!=null,ShipmentDetail::getShipmentId,shipmentDetail.getShipmentId())
				.orderByAsc(ShipmentDetail::getId);

		if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)){
			/**
			 * 使用分页查询
			 */
			Page<ShipmentDetail> page = new Page<>(pageNum, pageSize);
			IPage<ShipmentDetail> iPage = shipmentDetailService.page(page, lambdaQueryWrapper);
			return getMpDataTable(iPage.getRecords(),iPage.getTotal());
		} else {
			List<ShipmentDetail> list = shipmentDetailService.list(lambdaQueryWrapper);
			list.forEach(t->{
				InventoryDetail inventory=new InventoryDetail();
				inventory.setWarehouseCode(t.getWarehouseCode());
				inventory.setMaterialCode(t.getMaterialCode());
				inventory.setInventorySts(t.getInventorySts());
				t.setInventoryQty(inventoryDetailService.getSumQty(inventory));
			});
			return getDataTable(list);
		}
	}
	
	/**
	 * 新增出库明细
	 */
	@GetMapping("/add")
	public String add(String shipmentId, String shipmentCode,String companyId, String companyCode, String sourceCode, ModelMap mmap)
	{
        mmap.put("shipmentId", shipmentId);
        mmap.put("shipmentCode", shipmentCode);
		mmap.put("companyCode", companyCode);
		mmap.put("sourceCode", sourceCode);
	    return prefix + "/add";
	}
	
	/**
	 * 新增保存出库明细
	 */
	@RequiresPermissions("shipment:bill:add")
	@Log(title = "出库-出库单", operating= "新增出库明细", action = BusinessType.INSERT)
	@PostMapping("/add")
	@ResponseBody
	public AjaxResult addSave(ShipmentDetail shipmentDetail)
	{		
		return shipmentDetailService.insertDetail(shipmentDetail);
	}

	/**
	 * 修改出库明细
	 */
	@GetMapping("/edit/{id}")
	public String edit(@PathVariable("id") Integer id, ModelMap mmap)
	{
		ShipmentDetail shipmentDetail = shipmentDetailService.getById(id);
		mmap.put("shipmentDetail", shipmentDetail);
	    return prefix + "/edit";
	}
	
	/**
	 * 修改保存出库明细
	 */
	@RequiresPermissions("shipment:bill:edit")
	@Log(title = "出库-出库单", operating= "修改出库明细", action = BusinessType.UPDATE)
	@PostMapping("/edit")
	@ResponseBody
	public AjaxResult editSave(ShipmentDetail shipmentDetail)
	{
		if(shipmentDetail.getStatus()>100 ){
			return AjaxResult.error("超过订单池,出库明细不能修改");
		}
		 if(shipmentDetailService.saveOrUpdate(shipmentDetail)==false){
		 	return AjaxResult.error("出库明细修改失败");
		 }else {
		 	return AjaxResult.success("出库明细修改成功");
		 }
	}
	
	/**
	 * 删除出库明细
	 */
	@RequiresPermissions("shipment:bill:remove")
	@Log(title = "出库-出库单", operating= "删除出库明细", action = BusinessType.DELETE)
	@PostMapping( "/remove")
	@ResponseBody
	public AjaxResult remove(String ids)
	{
		if (StringUtils.isEmpty(ids))
			return AjaxResult.error("id不能为空");
		for (Integer id : Convert.toIntArray(ids))
		{
			ShipmentDetail shipmentDetail=shipmentDetailService.getById(id);
			if(shipmentDetail == null){
				return AjaxResult.error("id为"+id+"的单据明细找不到");
			}
			if(shipmentDetail.getStatus()>100 && shipmentDetail.getStatus()<500){
				return AjaxResult.error("此单据状态在订单池和拣货完成之间,无法删除");
			}
		}
        AjaxResult result = shipmentDetailService.deleteDetail(ids);
		return result;
	}



	@RequiresPermissions("shipment:bill:view")
	@PostMapping( "/shippingCombination")
	@ResponseBody
	public AjaxResult ShippingCombination(String shipmentCode, ModelMap map){
		map.put("code", shipmentCode);
		Integer status = 100;
		String ids="";
		List<ShipmentHeader> shipmentHeaderList =shipmentPreferenceService.checkShipmentProcess(ids,status,shipmentCode);
		return AjaxResult.success("成功");
	}

}