package com.zy.asrs.wms.asrs.controller; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.parser.Feature; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.zy.asrs.framework.common.Cools; import com.zy.asrs.framework.common.R; import com.zy.asrs.framework.exception.CoolException; import com.zy.asrs.wms.asrs.entity.*; import com.zy.asrs.wms.asrs.entity.enums.LocStsType; import com.zy.asrs.wms.asrs.entity.param.LocDetlFreezeParam; import com.zy.asrs.wms.asrs.service.LocDetlFieldService; import com.zy.asrs.wms.asrs.service.LocService; import com.zy.asrs.wms.asrs.service.MatFieldService; import com.zy.asrs.wms.common.annotation.CacheData; import com.zy.asrs.wms.common.annotation.OperationLog; import com.zy.asrs.wms.common.domain.BaseParam; import com.zy.asrs.wms.common.domain.KeyValVo; import com.zy.asrs.wms.common.domain.PageParam; import com.zy.asrs.wms.asrs.service.LocDetlService; import com.zy.asrs.wms.system.controller.BaseController; import com.zy.asrs.wms.utils.ExcelUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.util.*; @RestController @RequestMapping("/api") public class LocDetlController extends BaseController { @Autowired private LocService locService; @Autowired private LocDetlService locDetlService; @Autowired private MatFieldService matFieldService; @Autowired private LocDetlFieldService locDetlFieldService; @PreAuthorize("hasAuthority('asrs:locDetl:list')") @PostMapping("/locDetl/page") @CacheData(tableName = {"man_loc_detl"}) public R page(@RequestBody Map map) { BaseParam baseParam = buildParam(map, BaseParam.class); PageParam pageParam = new PageParam<>(baseParam, ViewLocDetl.class); PageParam data = locDetlService.getPage(pageParam, pageParam.buildWrapper(true)); return R.ok().add(data); } @PreAuthorize("hasAuthority('asrs:locDetl:list')") @PostMapping("/locDetl/outPage") @CacheData(tableName = {"man_loc_detl"}) public R outPage(@RequestBody Map map) { BaseParam baseParam = buildParam(map, BaseParam.class); PageParam pageParam = new PageParam<>(baseParam, ViewLocDetl.class); QueryWrapper queryWrapper = pageParam.buildWrapper(true); List locIds = locService.listBySts(LocStsType.F.val()); if (locIds.isEmpty()) { locIds.add(-1L); } queryWrapper.in("loc_id", locIds); PageParam data = locDetlService.getPage(pageParam, queryWrapper); return R.ok().add(data); } @PreAuthorize("hasAuthority('asrs:locDetl:list')") @PostMapping("/locDetl/list") @CacheData(tableName = {"man_loc_detl"}) public R list(@RequestBody Map map) { List list = locDetlService.getLocDetlList(map); return R.ok().add(list); } @PreAuthorize("hasAuthority('asrs:locDetl:list')") @PostMapping("/locDetl/listByIds") @CacheData(tableName = {"man_loc_detl"}) public R listByIds(@RequestBody List ids) { List list = locDetlService.listByIds(ids); List locDetls = locDetlService.parseLocDetl(list); return R.ok().add(locDetls); } @PreAuthorize("hasAuthority('asrs:locDetl:list')") @GetMapping("/locDetl/locId/{locId}") @CacheData(tableName = {"man_loc_detl"}) public R list(@PathVariable("locId") Long locId) { List list = locDetlService.list(new LambdaQueryWrapper().eq(LocDetl::getLocId, locId)); List locDetls = locDetlService.parseLocDetl(list); return R.ok().add(locDetls); } @PreAuthorize("hasAuthority('asrs:locDetl:list')") @GetMapping("/locDetl/locNo/{locNo}") @CacheData(tableName = {"man_loc_detl"}) public R list(@PathVariable("locNo") String locNo) { Loc loc = locService.getOne(new LambdaQueryWrapper().eq(Loc::getLocNo, locNo)); if (loc == null) { return R.error("库位不存在"); } List list = locDetlService.list(new LambdaQueryWrapper().eq(LocDetl::getLocId, loc.getId())); List locDetls = locDetlService.parseLocDetl(list); return R.ok().add(locDetls); } @PreAuthorize("hasAuthority('asrs:locDetl:list')") @GetMapping("/locDetl/{id}") @CacheData(tableName = {"man_loc_detl"}) public R get(@PathVariable("id") Long id) { return R.ok().add(locDetlService.getById(id)); } @PreAuthorize("hasAuthority('asrs:locDetl:save')") @OperationLog("批量插入库存明细") @PostMapping("/locDetl/batchAdd") public R save(@RequestBody List locDetls) { return R.ok().add(locDetls); } @PreAuthorize("hasAuthority('asrs:locDetl:save')") @OperationLog("添加库存明细") @PostMapping("/locDetl/save") public R save(@RequestBody LocDetl locDetl) { if (!locDetlService.save(locDetl)) { return R.error("添加失败"); } //插入库存明细字段 List matFields = matFieldService.list(new LambdaQueryWrapper().eq(MatField::getUnique, 1)); for (MatField matField : matFields) { LocDetlField locDetlField = new LocDetlField(); locDetlField.setDetlId(locDetl.getId()); locDetlField.setFieldId(matField.getId()); locDetlField.setName(matField.getName()); locDetlFieldService.save(locDetlField); } return R.ok("添加成功"); } @PreAuthorize("hasAuthority('asrs:locDetl:update')") @OperationLog("修改库存明细") @PostMapping("/locDetl/update") public R update(@RequestBody HashMap param) { LocDetl locDetl = JSON.parseObject(JSON.toJSONString(param), LocDetl.class, Feature.DisableCircularReferenceDetect); //设置扩展字段 setLocDetlField(param, locDetl); if (!locDetlService.updateById(locDetl)) { return R.error("修改失败"); } return R.ok("修改成功"); } @PreAuthorize("hasAuthority('asrs:locDetl:remove')") @OperationLog("删除库存明细") @PostMapping("/locDetl/remove/{ids}") public R remove(@PathVariable Long[] ids) { if (!locDetlService.removeByIds(Arrays.asList(ids))) { return R.error("删除失败"); } return R.ok("删除成功"); } @PreAuthorize("hasAuthority('asrs:locDetl:list')") @PostMapping("/locDetl/query") public R query(@RequestParam(required = false) String condition) { List vos = new ArrayList<>(); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); if (!Cools.isEmpty(condition)) { wrapper.like(LocDetl::getId, condition); } locDetlService.page(new Page<>(1, 30), wrapper).getRecords().forEach( item -> vos.add(new KeyValVo(item.getId(), item.getId())) ); return R.ok().add(vos); } @PreAuthorize("hasAuthority('asrs:locDetl:list')") @PostMapping("/locDetl/export") public void export(@RequestBody Map map, HttpServletResponse response) throws Exception { BaseParam baseParam = buildParam(map, BaseParam.class); PageParam pageParam = new PageParam<>(baseParam, LocDetl.class); List data = locDetlService.list(pageParam.buildWrapper(true)); List locDetls = locDetlService.parseLocDetl(data); List locFields = matFieldService.getLocFields(); ExcelUtil.build(ExcelUtil.create(locDetls, LocDetl.class, locFields), response); } private void setLocDetlField(HashMap param, LocDetl locDetl) { //获取扩展字段 List matFields = matFieldService.list(new LambdaQueryWrapper().eq(MatField::getFieldType, 1)); for (MatField matField : matFields) { if (param.containsKey(matField.getName())) { LocDetlField fieldValue = locDetlFieldService.getOne(new LambdaQueryWrapper() .eq(LocDetlField::getDetlId, locDetl.getId()) .eq(LocDetlField::getFieldId, matField.getId())); if (fieldValue == null) { fieldValue = new LocDetlField(); fieldValue.setDetlId(locDetl.getId()); fieldValue.setFieldId(matField.getId()); fieldValue.setName(matField.getName()); fieldValue.setValue(param.get(matField.getName()).toString()); locDetlFieldService.save(fieldValue); }else { fieldValue.setValue(param.get(matField.getName()).toString()); locDetlFieldService.updateById(fieldValue); } } } } @PreAuthorize("hasAuthority('asrs:locDetl:update')") @OperationLog("库存冻结") @PostMapping("/locDetl/freeze") public R freeze(@RequestBody LocDetlFreezeParam param) { locDetlService.locDetlFreeze(param); return R.ok(); } }