ShipmentDetailController.java 9.82 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.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.material.domain.Material;
import com.huaheng.pc.config.material.service.MaterialService;
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.stereotype.Service;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Date;
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;
	@Resource
	private MaterialService materialService;
	@Resource
	private CompanyService companyService;



	@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();
		List<ShipmentDetail> shipmentDetails =new ArrayList<>();
		List<ShipmentDetail> shipmentDetailList =new ArrayList<>();
		List<ShipmentDetail> shipmentDetailLists =new ArrayList<>();

		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);
			for(ShipmentDetail item : list){
				InventoryDetail inventory=new InventoryDetail();
				inventory.setWarehouseCode(item.getWarehouseCode());
				inventory.setMaterialCode(item.getMaterialCode());
				inventory.setInventorySts(item.getInventorySts());
				item.setInventoryQty(inventoryDetailService.getSumQty(inventory));
				if(item.getShipQty().compareTo(item.getRequestQty()) !=0){
					if(item.getInventoryQty().compareTo(new BigDecimal(0)) == 0){
						shipmentDetails.add(item);
					}else {
						shipmentDetailList.add(item);
					}
				}else {
					shipmentDetailLists.add(item);
				}

			}
			if(shipmentDetailList !=null && shipmentDetailList.size()>0) {
				shipmentDetails.addAll(shipmentDetailList);
			}
			if(shipmentDetailLists !=null && shipmentDetailLists.size()>0) {
				shipmentDetails.addAll(shipmentDetailLists);
			}
			return getDataTable(shipmentDetails);
		}
	}
	
	/**
	 * 新增出库明细
	 */
	@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("超过订单池,出库明细不能修改");
		}
		shipmentDetail.setLastUpdated(new Date());
		 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){
				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("成功");
	}



	@RequiresPermissions("shipment:bill:report")
	@Log(title = "出库-出库单", operating = "打印出库单明细报表", action = BusinessType.OTHER)
	@GetMapping("/report/{ids}")
	public String report(@PathVariable("ids") Integer[] ids, ModelMap mmap)
	{
		List<ShipmentDetail> list=new ArrayList<ShipmentDetail>();
		for(Integer id:ids){
			if(id!=null) {
				ShipmentDetail shipmentDetail = shipmentDetailService.getById(id);

				//获得物料信息
				LambdaQueryWrapper<Material> materialLambd = Wrappers.lambdaQuery();
				materialLambd.eq(Material::getCode,shipmentDetail.getMaterialCode())
						.eq(Material::getWarehouseCode,ShiroUtils.getWarehouseCode());
				Material material =materialService.getOne(materialLambd);
				if(material == null){
					throw new ServiceException("系统没有此物料编码"+shipmentDetail.getMaterialCode());
				}
				shipmentDetail.setMaterialSpec(material.getSpec());
				shipmentDetail.setMaterialName(material.getName());
				NumberFormat nf = NumberFormat.getInstance();
				shipmentDetail.setShipQty(new BigDecimal(nf.format(shipmentDetail.getShipQty())));

				LambdaQueryWrapper<Company>  companyLambda =Wrappers.lambdaQuery();
				companyLambda.eq(Company::getCode,shipmentDetail.getCompanyCode());
				Company company= companyService.getOne(companyLambda);
				if(company == null){
					throw new ServiceException("系统没有此货主编码"+shipmentDetail.getCompanyCode());
				}
				shipmentDetail.setCompanyName(company.getName());
				list.add(shipmentDetail);
			}
			mmap.put("shipmentDetails", list);
		}
		return prefix + "/report";
	}
}