package com.huaheng.pc.config.material.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; 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.exception.service.ServiceException; import com.huaheng.common.support.Convert; import com.huaheng.common.utils.StringUtils; import com.huaheng.common.utils.poi.ExcelUtil; 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.common.JasperPrint.Print; import com.huaheng.pc.config.material.domain.Material; import com.huaheng.pc.config.material.service.MaterialService; import com.huaheng.pc.config.materialArea.domain.MaterialArea; import com.huaheng.pc.config.materialArea.service.MaterialAreaService; import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail; import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.sql.DataSource; import java.util.*; @Api(tags = {"物料控制类"}) @Controller @RequestMapping("/config/material") public class MaterialController extends BaseController { private String prefix = "config/material"; @Resource private MaterialService materialService; @Resource private MaterialAreaService materialAreaService; @Resource private InventoryDetailService inventoryDetailService; @Resource private DataSource dataSource; @Resource private Print print; @RequiresPermissions("config:material:view") @GetMapping() public String material () { return prefix + "/material"; } @GetMapping("materialSelect") public String materialSelect () { return "config/material/materialSelect.html"; } /** * 查询物料列表 */ @ApiOperation(value = "查看物料列表", notes = "根据物料编码、名称、规格、物料类别、创建时间获取物料的详细信息", httpMethod = "POST") @RequiresPermissions("config:material:list") @Log(title = "通用-物料管理", operating = "查看物料列表", action = BusinessType.GRANT) @PostMapping("/list") @ResponseBody public TableDataInfo list ( @ApiParam(name = "location", value = "物料编码、名称、规格、物料类别") Material material, @ApiParam(name = "createdBegin", value = "起止时间") String createdBegin, @ApiParam(name = "createdEnd", value = "结束时间") String createdEnd) { PageDomain pageDomain = TableSupport.buildPageRequest(); Integer pageNum = pageDomain.getPageNum(); Integer pageSize = pageDomain.getPageSize(); LambdaQueryWrapper<Material> lambda = Wrappers.lambdaQuery(); lambda.gt(StringUtils.isNotEmpty(createdBegin), Material::getCreated, createdBegin) .lt(StringUtils.isNotEmpty(createdEnd), Material::getCreated, createdEnd) .eq(StringUtils.isNotNull(material.getCode()) && StringUtils.isNotEmpty(material.getCode()), Material::getCode, material.getCode()) .like(StringUtils.isNotNull(material.getName()) && StringUtils.isNotEmpty(material.getName()), Material::getName, material.getName()) .eq(StringUtils.isNotEmpty(material.getType()), Material::getType, material.getType()) .like(StringUtils.isNotNull(material.getSpec()) && StringUtils.isNotEmpty(material.getSpec()), Material::getSpec, material.getSpec()) .eq(Material::getWarehouseCode, ShiroUtils.getWarehouseCode()) .eq(Material::getDeleted, false); if(StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)) { /*使用分页查询*/ Page<Material> page = new Page<>(pageNum, pageSize); IPage<Material> iPage = materialService.page(page, lambda); return getMpDataTable(iPage.getRecords(), iPage.getTotal()); } else { List<Material> list = materialService.list(lambda); return getDataTable(list); } } /** * 新增物料 */ @GetMapping("/add") public String add () { return prefix + "/add"; } /** * 新增保存物料 */ @ApiOperation(value = "新增物料", notes = "新增物料", httpMethod = "POST") @RequiresPermissions("config:material:add") @Log(title = "通用-物料管理", operating = "新增物料", action = BusinessType.INSERT) @PostMapping("/add") @ResponseBody public AjaxResult addSave (Material material) { return materialService.addSave(material); } /** * 修改物料 */ @GetMapping("/edit/{id}") public String edit (@PathVariable("id") Integer id, ModelMap mmap) { Material material = materialService.getById(id); mmap.put("material", material); return prefix + "/edit"; } /** * 修改保存物料 */ @ApiOperation(value = "修改物料", notes = "修改物料", httpMethod = "POST") @RequiresPermissions("config:material:edit") @Log(title = "通用-物料管理", operating = "修改物料", action = BusinessType.UPDATE) @PostMapping("/edit") @ResponseBody public AjaxResult editSave (Material material) { material.setLastUpdatedBy(ShiroUtils.getLoginName()); return toAjax(materialService.updateById(material)); } /** * 修改物料 */ @GetMapping("/editBatch/{ids}") public String editBatch (@PathVariable("ids") String ids, ModelMap mmap) { mmap.put("ids", ids); return prefix + "/editBatch"; } /** * 修改保存物料 */ @ApiOperation(value = "批量修改物料", notes = "批量修改物料", httpMethod = "POST") @RequiresPermissions("config:material:edit") @Log(title = "基础数据-物料管理", operating = "批量修改物料", action = BusinessType.UPDATE) @PostMapping("/editBatchSave") @ResponseBody public AjaxResult editBatchSave (String ids, String materialAreaCode) { if(StringUtils.isNotEmpty(materialAreaCode)) { LambdaQueryWrapper<MaterialArea> materialAreaLambdaQueryWrapper = Wrappers.lambdaQuery(); materialAreaLambdaQueryWrapper.eq(MaterialArea::getCode, materialAreaCode); MaterialArea materialArea = materialAreaService.getOne(materialAreaLambdaQueryWrapper); if (materialArea == null) { return AjaxResult.error("没找到对应的物料区域"); } } String[] idArray = Convert.toStrArray(ids); LambdaUpdateWrapper<Material> wrapper = Wrappers.lambdaUpdate(); wrapper.in(Material::getId, idArray) .set(Material::getMaterialAreaCode, materialAreaCode); return toAjax(materialService.update(wrapper)); } /** * 删除物料 */ @RequiresPermissions("config:material:remove") @Log(title = "通用-物料管理", operating = "删除物料", action = BusinessType.DELETE) @PostMapping("/remove") @ResponseBody public AjaxResult remove (String ids) { if(StringUtils.isEmpty(ids)) { return AjaxResult.error("id不能为空"); } else { for (Integer id : Convert.toIntArray(ids)) { Material material = materialService.getById(id); LambdaQueryWrapper<InventoryDetail> lamb = Wrappers.lambdaQuery(); lamb.eq(InventoryDetail::getWarehouseCode, ShiroUtils.getWarehouseCode()) .eq(InventoryDetail::getMaterialCode, material.getCode()); List<InventoryDetail> inventoryDetails = inventoryDetailService.list(lamb); if(!inventoryDetails.isEmpty()) { throw new ServiceException("id为" + id + "的物料有库存"); } } return materialService.removeByIds(ids); } } @PostMapping("/importData") @ResponseBody public AjaxResult importData (MultipartFile file) throws Exception { ExcelUtil<Material> util = new ExcelUtil<>(Material.class); List<Material> materialList = util.importExcel(file.getInputStream()); String operName = ShiroUtils.getLoginName(); String message = materialService.importMaterial(materialList, false, operName); return AjaxResult.success(message); } /** * 导出模板 * * @return * @throws Exception */ @GetMapping("/importTemplate") @ResponseBody public AjaxResult importTemplate () { ExcelUtil<Material> util = new ExcelUtil<>(Material.class); return util.importTemplateExcel("物料"); } @RequiresPermissions("config:material:print") @Log(title = "库存-库存交易明细", operating = "库存交易明细报表打印", action = BusinessType.OTHER) @GetMapping("/print/{ids}") public void print (@PathVariable("ids") Integer[] ids, ModelMap mmap) // arg1:物料id arg2:会话对象不需要直接返回 { print.jasperPrint(ids, prefix);// 不用返回json打印 } @PostMapping("/getData") @ResponseBody // 这个是物料编码list要增加表单提交获取的 public Map<String, Object> getData (String materialName, String materialCode) { // 新增表单是没有物料名和物料编码 LambdaQueryWrapper<Material> queryWrapper = Wrappers.lambdaQuery(); queryWrapper.like(StringUtils.isNotEmpty(materialName), Material::getCode, materialName) // WHERE material = .or() // sql语句拼接or .like(StringUtils.isNotEmpty(materialName), Material::getName, materialName); queryWrapper.eq(Material::getWarehouseCode, ShiroUtils.getWarehouseCode()).ne(Material::getDeleted,1) .last("LIMIT 100"); List<Material> materialList = materialService.list(queryWrapper); List<Map<String, Object>> list = new ArrayList<>(); for (Material material : materialList) { Map<String, Object> resultMap = new HashMap<>(); if(StringUtils.isNotEmpty(materialCode) && material.getCode().equals(materialCode)) { resultMap.put("selected", true); } resultMap.put("id", material.getCode()); resultMap.put("text", material.getName()); list.add(resultMap); } Map<String, Object> map = new HashMap<>(); map.put("results", list); return map; // 不返回页面只返回数据 } }