|  |  |  | 
|---|
|  |  |  | package com.zy.asrs.controller; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.alibaba.fastjson.JSONObject; | 
|---|
|  |  |  | import com.baomidou.mybatisplus.mapper.EntityWrapper; | 
|---|
|  |  |  | import com.baomidou.mybatisplus.plugins.Page; | 
|---|
|  |  |  | import com.core.annotations.ManagerAuth; | 
|---|
|  |  |  | 
|---|
|  |  |  | import com.core.common.DateUtils; | 
|---|
|  |  |  | import com.core.common.R; | 
|---|
|  |  |  | import com.zy.asrs.entity.AgvLocDetl; | 
|---|
|  |  |  | import com.zy.asrs.entity.Mat; | 
|---|
|  |  |  | import com.zy.asrs.entity.OrderDetl; | 
|---|
|  |  |  | import com.zy.asrs.service.AgvLocDetlService; | 
|---|
|  |  |  | import com.zy.asrs.service.MatService; | 
|---|
|  |  |  | import com.zy.asrs.service.OrderDetlService; | 
|---|
|  |  |  | import com.zy.common.web.BaseController; | 
|---|
|  |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
|---|
|  |  |  | import org.springframework.web.bind.annotation.RequestBody; | 
|---|
|  |  |  | import org.springframework.web.bind.annotation.RequestMapping; | 
|---|
|  |  |  | import org.springframework.web.bind.annotation.RequestParam; | 
|---|
|  |  |  | import org.springframework.web.bind.annotation.RestController; | 
|---|
|  |  |  | import org.springframework.web.multipart.MultipartFile; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import java.io.IOException; | 
|---|
|  |  |  | import java.util.List; | 
|---|
|  |  |  | import java.util.Map; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @RestController | 
|---|
|  |  |  | @RequestMapping("/agv") | 
|---|
|  |  |  | public class AgvLocDetlController extends BaseController { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private AgvLocDetlService agvLocDetlService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private MatService matService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private OrderDetlService orderDetlService; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @RequestMapping(value = "/agvLocDetl/list/auth") | 
|---|
|  |  |  | @RequestMapping(value = "/locDetl/list/auth") | 
|---|
|  |  |  | @ManagerAuth | 
|---|
|  |  |  | public R list(@RequestParam(defaultValue = "1")Integer curr, | 
|---|
|  |  |  | @RequestParam(defaultValue = "10")Integer limit, | 
|---|
|  |  |  | 
|---|
|  |  |  | return R.ok(agvLocDetlService.selectPage(new Page<>(curr, limit), wrapper)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @RequestMapping(value = "/locDetl/list/auth/v2") | 
|---|
|  |  |  | @ManagerAuth | 
|---|
|  |  |  | public R listV2(@RequestParam(defaultValue = "1")Integer curr, | 
|---|
|  |  |  | @RequestParam(defaultValue = "10")Integer limit, | 
|---|
|  |  |  | @RequestParam(required = false)String orderByField, | 
|---|
|  |  |  | @RequestParam(required = false)String orderByType, | 
|---|
|  |  |  | @RequestParam(required = false)String condition, | 
|---|
|  |  |  | @RequestParam Map<String, Object> param, | 
|---|
|  |  |  | @RequestParam(required = false)Boolean unreason){ | 
|---|
|  |  |  | if (!Cools.isEmpty(unreason) && unreason) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return R.ok(agvLocDetlService.selectPage(new Page<>(curr, limit), new EntityWrapper<AgvLocDetl>() | 
|---|
|  |  |  | .where(" DATALENGTH( batch ) != 11 or\n" + | 
|---|
|  |  |  | "            batch LIKE '%[a-z]%'"))); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | param.remove("unreason"); | 
|---|
|  |  |  | String row = ""; | 
|---|
|  |  |  | EntityWrapper<AgvLocDetl> wrapper = new EntityWrapper<>(); | 
|---|
|  |  |  | if (param.get("row") != null) { | 
|---|
|  |  |  | String chooseRow = (String) param.get("row"); | 
|---|
|  |  |  | if (chooseRow.length() == 1) { | 
|---|
|  |  |  | row = "0" + chooseRow; | 
|---|
|  |  |  | param.remove("row"); | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | row = chooseRow; | 
|---|
|  |  |  | param.remove("row"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | excludeTrash(param); | 
|---|
|  |  |  | convert(param, wrapper); | 
|---|
|  |  |  | allLike(AgvLocDetl.class, param.keySet(), wrapper, condition); | 
|---|
|  |  |  | if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} | 
|---|
|  |  |  | if (!row.equals("")){ | 
|---|
|  |  |  | wrapper.and() | 
|---|
|  |  |  | .where("loc_no like '" +row +"%'"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Page<AgvLocDetl> agvLocDetlPage = agvLocDetlService.selectPage(new Page<>(curr, limit), wrapper); | 
|---|
|  |  |  | for (AgvLocDetl record : agvLocDetlPage.getRecords()) { | 
|---|
|  |  |  | OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("three_code", record.getThreeCode()).eq("matnr", record.getMatnr()).ne("order_no", record.getOrderNo())); | 
|---|
|  |  |  | if (orderDetl.getAnfme() - orderDetl.getQty() > 0) { | 
|---|
|  |  |  | record.setStock(orderDetl.getAnfme() - orderDetl.getQty()); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | record.setStock(-1D); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | record.setOrderNo(orderDetl.getOrderNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return R.ok(agvLocDetlPage); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @RequestMapping(value = "/locDetl/statis/auth") | 
|---|
|  |  |  | @ManagerAuth(memo = "AGV库存明细统计") | 
|---|
|  |  |  | public R statis(@RequestParam(defaultValue = "1")Integer curr, | 
|---|
|  |  |  | @RequestParam(defaultValue = "10")Integer limit, | 
|---|
|  |  |  | @RequestParam Map<String, Object> param) { | 
|---|
|  |  |  | Page<AgvLocDetl> stockStatis = agvLocDetlService.getStockStatis(toPage(curr, limit, param, AgvLocDetl.class)); | 
|---|
|  |  |  | for (AgvLocDetl locDetl : stockStatis.getRecords()) { | 
|---|
|  |  |  | Mat mat = matService.selectByMatnr(locDetl.getMatnr()); | 
|---|
|  |  |  | if (mat != null) { | 
|---|
|  |  |  | locDetl.sync(mat); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return R.ok().add(stockStatis); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /* | 
|---|
|  |  |  | 获取库存总数 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @RequestMapping("/locDetl/count") | 
|---|
|  |  |  | public R getAllCount(){ | 
|---|
|  |  |  | Integer sum = agvLocDetlService.sum(); | 
|---|
|  |  |  | return R.ok(sum); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //    @RequestMapping(value = "/locDetl/statis/export") | 
|---|
|  |  |  | //    public void statisExport(HttpServletResponse response) throws IOException { | 
|---|
|  |  |  | //        List<AgvLocDetl> excel = agvLocDetlService.getStockStatisExcel(); | 
|---|
|  |  |  | //        for (AgvLocDetl locDetl : excel) { | 
|---|
|  |  |  | //            Mat mat = matService.selectByMatnr(locDetl.getMatnr()); | 
|---|
|  |  |  | //            if (mat != null) { | 
|---|
|  |  |  | //                locDetl.sync(mat); | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  | //        response.setContentType("application/vnd.ms-excel"); | 
|---|
|  |  |  | //        response.setCharacterEncoding("utf-8"); | 
|---|
|  |  |  | //        String fileName = URLEncoder.encode("库存明细统计报表", "UTF-8"); | 
|---|
|  |  |  | //        response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx"); | 
|---|
|  |  |  | //        EasyExcel.write(response.getOutputStream(), AgvLocDetl.class) | 
|---|
|  |  |  | //                .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) | 
|---|
|  |  |  | //                .sheet("表1") | 
|---|
|  |  |  | //                .doWrite(excel); | 
|---|
|  |  |  | //    } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @RequestMapping(value = "/locDetl/statis/export") | 
|---|
|  |  |  | @ManagerAuth(memo = "库位明细导出") | 
|---|
|  |  |  | public synchronized R statisExport(@RequestBody JSONObject param){ | 
|---|
|  |  |  | List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class); | 
|---|
|  |  |  | List<AgvLocDetl> stockStatisExcel = agvLocDetlService.getStockStatisExcel(); | 
|---|
|  |  |  | return R.ok(exportSupport(stockStatisExcel, fields)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @RequestMapping(value = "/locDetl/export/auth") | 
|---|
|  |  |  | @ManagerAuth(memo = "库位明细导出") | 
|---|
|  |  |  | public synchronized R export(@RequestBody JSONObject param){ | 
|---|
|  |  |  | List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class); | 
|---|
|  |  |  | EntityWrapper<AgvLocDetl> wrapper = new EntityWrapper<>(); | 
|---|
|  |  |  | Map<String, Object> map = excludeTrash(param.getJSONObject("locDetl")); | 
|---|
|  |  |  | String row = ""; | 
|---|
|  |  |  | if (map.get("row") != null) { | 
|---|
|  |  |  | String chooseRow = (String) map.get("row"); | 
|---|
|  |  |  | if (chooseRow.length() == 1) { | 
|---|
|  |  |  | row = "0" + chooseRow; | 
|---|
|  |  |  | map.remove("row"); | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | row = chooseRow; | 
|---|
|  |  |  | map.remove("row"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | convert(map, wrapper); | 
|---|
|  |  |  | if (!row.equals("")){ | 
|---|
|  |  |  | wrapper.and() | 
|---|
|  |  |  | .where("loc_no like '" +row +"%'"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<AgvLocDetl> list = agvLocDetlService.selectList(wrapper); | 
|---|
|  |  |  | return R.ok(exportSupport(list, fields)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @RequestMapping(value = "/locDetl/compare/auth") | 
|---|
|  |  |  | @ManagerAuth(memo = "库存明细比对") | 
|---|
|  |  |  | public R compareLocDetl(MultipartFile file) throws IOException { | 
|---|
|  |  |  | agvLocDetlService.compareToEss(file); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return R.ok(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){ | 
|---|
|  |  |  | for (Map.Entry<String, Object> entry : map.entrySet()){ | 
|---|
|  |  |  | String val = String.valueOf(entry.getValue()); | 
|---|