package com.huaheng.pc.srm.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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.ApiLogger; 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.TableDataInfo; import com.huaheng.pc.config.material.domain.Material; import com.huaheng.pc.config.material.service.MaterialService; import com.huaheng.pc.config.warehouse.domain.WarehouseU8; import com.huaheng.pc.config.warehouse.service.WarehouseU8Service; import com.huaheng.pc.srm.domain.SrmDetail; import com.huaheng.pc.srm.domain.SrmHeader; import com.huaheng.pc.srm.service.SrmDetailService; import com.huaheng.pc.srm.service.SrmHeaderService; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.apache.shiro.crypto.hash.format.Shiro1CryptFormat; 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.math.BigDecimal; import java.text.ParseException; import java.util.*; @Controller @RequestMapping("/srm/srmDetailNone") public class SRMDetailNoneController extends BaseController { private String prefix = "srm/srmDetailNone"; @RequiresPermissions("srm:srmDetail:view") @GetMapping("/{headerId}") public String srmDetail(@PathVariable("headerId") String headerId, ModelMap mmap) { mmap.put("headerId", headerId); return prefix + "/srmDetailNone"; } @Resource private SrmDetailService srmDetailService; @Resource private WarehouseU8Service warehouseU8Service; @Resource private SrmHeaderService srmHeaderService; @Resource private MaterialService materialService; /** * 查询已到送货单明细 */ // @RequiresPermissions("srm:srmDetail:list") @Log(title = "送货单-送货单", operating="查看送货单明细", action = BusinessType.GRANT) @PostMapping("/list") @ResponseBody public TableDataInfo list(SrmDetail srmDetail) { srmDetail.setEnable(0); startPage(); List<SrmDetail> list = srmDetailService.selectList(srmDetail) ; for (SrmDetail detail : list) { WarehouseU8 warehouseWu = new WarehouseU8(); warehouseWu.setWarehouseCode(srmDetail.getWarehouseCode()); warehouseWu.setUCompanyCode(detail.getCompanyCode()); warehouseWu.setUWarehouseCode(detail.getUWarehouseCode()); List<WarehouseU8> warehouseWulist = warehouseU8Service.getByDomain(warehouseWu); if(warehouseWulist != null&&warehouseWulist.size()>0){ warehouseWu=warehouseWulist.get(0); detail.setUWarehouseName(warehouseWu.getUWarehouseName()); } } return getDataTable(list); } /** * 选择仓库 */ @GetMapping("/checkWarehouse/{ids}") public String checkWarehouse(@PathVariable("ids") String ids, ModelMap mmap) { if (StringUtils.isEmpty(ids)){ throw new ServiceException("没有选中明细行"); } List<Integer> list = Arrays.asList(Convert.toIntArray(ids)); SrmDetail srmDetail = new SrmDetail(); srmDetail.setId(list.get(0)); srmDetail = srmDetailService.selectFirstModel(srmDetail); if(srmDetail !=null){ srmDetail.setCompanyName(ids); mmap.put("srmDetail",srmDetail); } return prefix + "/checkWarehouse"; } /** * 选择仓库 */ @RequiresPermissions("srm:srmDetail:checkWarehouse") @Log(title = "送货单-送货单", operating = "选择仓库", action = BusinessType.DELETE) @PostMapping("/checkWarehouse") @ResponseBody @Transactional(rollbackFor = Exception.class) public AjaxResult confirmQty(String ids,String uWarehouseCode) { if (StringUtils.isEmpty(ids)){ return AjaxResult.error("没有选中明细行"); } Integer[] list = Convert.toIntArray(ids); for (Integer id : list) { SrmDetail srmDetail = new SrmDetail(); srmDetail.setId(id); srmDetail.setUWarehouseCode(uWarehouseCode); srmDetail.setLastUpdateBy(ShiroUtils.getLoginName()); srmDetail.setLastUpdate(new Date()); srmDetailService.updateById(srmDetail); } return AjaxResult.success("成功"); } /** * 确认数量 */ @GetMapping("/confirmConfirQty") public String confirmConfirQty( Integer id, ModelMap mmap) { SrmDetail srmDetail = new SrmDetail(); srmDetail.setId(id); srmDetail =srmDetailService.selectFirstModel(srmDetail); mmap.put("srmDetail", srmDetail); return prefix + "/confirmConfirQty"; } /** * 确认数量 */ @RequiresPermissions("srm:srmDetail:confirmQty") @Log(title = "送货单-送货单", operating = "确认到货数量", action = BusinessType.DELETE) @PostMapping("/confirmConfirQty") @ResponseBody public AjaxResult confirmConfirQty(SrmDetail srmDetail) { srmDetail.setLastUpdateBy(ShiroUtils.getLoginName()); srmDetail.setLastUpdate(new Date()); srmDetailService.updateById(srmDetail); return AjaxResult.success("成功"); } /** * 确认数量 */ @RequiresPermissions("srm:srmDetail:confirmQty") @Log(title = "送货单-送货单", operating = "确认到货数量", action = BusinessType.DELETE) @PostMapping("/confirmQty") @ResponseBody public AjaxResult confirmQty(String ids) { if (StringUtils.isEmpty(ids)){ return AjaxResult.error("没有选中明细行"); } Integer[] list = Convert.toIntArray(ids); for (Integer id : list) { SrmDetail srmDetail = new SrmDetail(); srmDetail.setId(id); srmDetail =srmDetailService.selectFirstModel(srmDetail); if(srmDetail != null){ srmDetail.setConfirmQty(srmDetail.getQty()); srmDetail.setLastUpdateBy(ShiroUtils.getLoginName()); srmDetail.setLastUpdate(new Date()); srmDetailService.updateById(srmDetail); } } return AjaxResult.success("成功"); } /** * 提交 */ @RequiresPermissions("srm:srmDetail:confirm") @Log(title = "送货单-送货单", operating = "提交", action = BusinessType.DELETE) @PostMapping("/confirm") @ResponseBody // @ApiLogger(apiName = "srm送货单-提交", from = "SRM" ) @Transactional(rollbackFor = Exception.class) public AjaxResult confirm(String ids,String warehouseCode) throws ParseException { if (StringUtils.isEmpty(ids)){ return AjaxResult.error("没有选中明细行"); } Integer[] list = Convert.toIntArray(ids); List<SrmDetail> srmDetails = new ArrayList<>(); Integer headId = 0; List<SrmDetail> failedSrmDetail = new ArrayList<>(); for (Integer id : list) { SrmDetail srmDetail = srmDetailService.getOne(new LambdaQueryWrapper<SrmDetail>().eq(SrmDetail::getId,id).eq(SrmDetail::getWarehouseCode,ShiroUtils.getWarehouseCode())); if(srmDetail == null){ return AjaxResult.error("id为"+id+"的送货单明细不存在"); } if(StringUtils.isEmpty(srmDetail.getUWarehouseCode())){ return AjaxResult.error("id为"+id+"的送货单明细没有选择仓库"); } srmDetail.setConfirmQty(srmDetail.getQty()); srmDetail.setEnable(1); srmDetail.setLastUpdateBy(ShiroUtils.getLoginName()); srmDetail.setLastUpdate(new Date()); // 如果不合格数量不等于0 if (srmDetail.getUnqualifiedQty().compareTo(new BigDecimal(0)) != 0){ failedSrmDetail.add(srmDetail); } srmDetailService.updateById(srmDetail); srmDetails.add(srmDetail); headId=srmDetail.getHeaderId(); } SrmHeader srmHeader = srmHeaderService.getOne(new LambdaQueryWrapper<SrmHeader>().eq(SrmHeader::getId,headId).eq(SrmHeader::getWarehouseCode, ShiroUtils.getWarehouseCode())); if (srmHeader != null) { SrmDetail srmDetail = new SrmDetail(); srmDetail.setCode(srmHeader.getCode()); srmDetail.setWarehouseCode(ShiroUtils.getWarehouseCode()); List<SrmDetail> srmDetailList = srmDetailService.selectList(srmDetail); srmDetail.setEnable(1); List<SrmDetail> details = srmDetailService.selectList(srmDetail); if (srmDetailList.size() == details.size()) { srmHeader.setEnable(2); } else { srmHeader.setEnable(1); } srmHeader.setLastUpdate(new Date()); srmHeader.setLastUpdateBy(ShiroUtils.getLoginName()); srmHeaderService.updateById(srmHeader); } //默认质检的物料是不做到货的 // Iterator<SrmDetail> iterator = srmDetails.iterator(); // while (iterator.hasNext()) { // SrmDetail srmDetail = iterator.next(); // Material material = materialService.getMaterialByCode(srmDetail.getMaterialCode(), ShiroUtils.getWarehouseCode()); // if(material.getCode().startsWith("2")&&(StringUtils.isEmpty(material.getQcFlag())||(StringUtils.isNotEmpty(material.getQcFlag())&&!material.getQcFlag().equals("0")))){ // srmDetail.setQcFlag("1"); // srmDetailService.updateById(srmDetail); // iterator.remove(); // } // } //告诉SRM到货数量 //SRM提交到货 //SRM提示到货失败的需要去定时任务 if(!srmDetails.isEmpty()){ srmHeaderService.confirmSRMModel(srmDetails); } //告诉U8合格数量 AjaxResult result = AjaxResult.success(); result = srmHeaderService.confirmU8Model(srmDetails); if (result.hasErr()){ result.setMsg("系统自动获取erp到货单失败请手动获取:" + result.getMsg()); return result; } // 存在不合格数量直接调用退料单接口 if (failedSrmDetail.size() > 0){ srmDetailService.checkWhetherQualified(failedSrmDetail, srmHeader); } return AjaxResult.success("成功"); } }