From 59e91a4e9ddaf23cebb12993c774aa899ab22d16 Mon Sep 17 00:00:00 2001
From: 郑永安 <zyazyz250@sina.com>
Date: 星期一, 19 六月 2023 14:22:45 +0800
Subject: [PATCH] 描述

---
 src/main/java/com/gk/firework/Controller/StockController.java |  904 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 904 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/gk/firework/Controller/StockController.java b/src/main/java/com/gk/firework/Controller/StockController.java
new file mode 100644
index 0000000..6ebfa4b
--- /dev/null
+++ b/src/main/java/com/gk/firework/Controller/StockController.java
@@ -0,0 +1,904 @@
+package com.gk.firework.Controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.gk.firework.Controller.Base.BaseController;
+import com.gk.firework.Domain.*;
+import com.gk.firework.Domain.Enum.ErrorCode;
+import com.gk.firework.Domain.Extension.StockTotal;
+import com.gk.firework.Domain.Log.JsonParams;
+import com.gk.firework.Domain.Utils.BeanUtils;
+import com.gk.firework.Domain.Utils.Msg;
+import com.gk.firework.Domain.Utils.PageInfo;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Domain.Vo.*;
+import com.gk.firework.Service.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.math.BigDecimal;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.gk.firework.Domain.Enum.ErrorCode.*;
+
+/**
+ * @author : jingjy
+ * @date : 2021/3/19 11:06
+ */
+
+@Api(tags = "库存接口")
+@RestController
+@RequestMapping("/stock")
+public class StockController extends BaseController {
+
+    @Autowired
+    private ProductService productService;
+    @Autowired
+    private UserService userService;
+    @Autowired
+    private EntryService entryService;
+    @Autowired
+    private EntryDetailService entryDetailService;
+    @Autowired
+    private StockService stockService;
+    @Autowired
+    private ProductLocusService productLocusService;
+    @Autowired
+    private EnterpriseService enterpriseService;
+    @Autowired
+    private StaticStockService staticStockService;
+
+
+    @PostMapping("/entrySingle")
+    @JsonParams
+    public Msg entrySingle(@RequestBody JSONObject jsonObject){
+        Msg msg = new Msg(true);
+        String userId = jsonObject.getString("id");
+        String type = jsonObject.getString("type");
+        String date = jsonObject.getString("time");
+        String rfids = jsonObject.getString("rfids");
+        String transport = jsonObject.getString("cert");
+        UserInfo userInfo = userService.getById(userId);
+        Date datetime;
+        DateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        try {
+            datetime = dateFormat1.parse(date);
+        } catch (ParseException e) {
+            msg.setCode(ERROR_10003.getCode());
+            msg.setMessage(ERROR_10003.getMsg()+":入库日期类型错误!");
+            return msg;
+        }
+        String auth = getAuth();
+        auth = StringUtils.isBlank(auth) ? "NOAUTH" : auth;
+        EntryOrderInfo orderInfo = entryService.generateEntryOrderInfo(type,userInfo,datetime,transport, auth);
+
+        if (StringUtils.isBlank(userId) || StringUtils.isBlank(rfids)){
+            msg.setCode(ERROR_10001.getCode());
+            msg.setMessage(ERROR_10001.getMsg()+":用户信息或者流向码为空,无法入库");
+            return msg;
+        }
+        if (EntryUtils.RK_ENTRY.equals(type)){
+            //一般入库
+            List<String>directionCodes = StringUtils.toList(rfids);
+            List<ProductVo> productVos = new ArrayList<>();
+            List<EntryDetailInfo>detailInfos = new ArrayList<>();
+            List<ProductLocusInfo>locusInfos = new ArrayList<>();
+            //入库数量
+            int entryNum = 0;
+            for (String dire:directionCodes) {
+                if (FireworkDeal.isNotDirectionCode(dire)){
+                    msg.setCode(ERROR_10004.getCode());
+                    msg.setMessage(ERROR_10004.getMsg()+":流向码:"+dire+" 不符合规则,无法识别!");
+                    return msg;
+                }
+                DirectionDetail detail = FireworkDeal.dealDirectionCode(dire);
+                if (productService.hasProductByDire(dire)){
+                    msg.setCode(ERROR_50001.getMsg());
+                    msg.setMessage(ERROR_50001.getMsg()+":流向码:"+dire+" 未找到相应产品信息!");
+                    return msg;
+                }
+
+                ProductVo productVo = productService.selectVoByDirection(dire);
+
+                EntryDetailInfo detailInfo = new EntryDetailInfo(orderInfo.getCode(),dire,productVo.getItemCode(),
+                        productVo.getName(),productVo.getManufacturer(),new Date(),userInfo.getCompanynumber());
+                if (detail.getLength() == FireworkDeal.DIRECTION_OUTSIDE){
+                    ProductLocusInfo productLocusInfo = new ProductLocusInfo(dire,new Date(),datetime, userInfo.getCompany(),
+                            null,ProductLocusInfo.ENTRY_STATUS,productVo.getBoxNumber().toString());
+                    locusInfos.add(productLocusInfo);
+                }
+
+                detailInfos.add(detailInfo);
+                if (detail.getBoxNo() == null){
+                    entryNum += 1;
+                }else {
+                    entryNum += Integer.parseInt(detail.getBoxNo());
+                }
+
+                if (detail.getLength() == FireworkDeal.DIRECTION_OUTSIDE){
+                    FireworkDeal.getProductVos(dire, detail, detail, productVos, productVo);
+                }else if (detail.getLength() == FireworkDeal.DIRECTION_INSIDE){
+                    ProductInfo productVo1 = productService.selectByDirection(dire);
+                    productVo1.setDirectionCode(dire);
+                    ProductVo productVo2 = BeanUtils.copy(productVo1,ProductVo.class);
+                    FireworkDeal.setProductVosAttribute(productVo2);
+                    productVos.add(productVo2);
+                }
+            }
+            boolean flag = stockService.putInStorage(userInfo,productVos,datetime, type);
+            if (flag){
+                orderInfo.setNum(entryNum);
+                entryService.save(orderInfo);
+                entryDetailService.saveBatch(detailInfos);
+                productLocusService.insertBatch(locusInfos);
+            }else {
+                msg.setCode(ERROR_40001.getCode());
+                msg.setMessage(ERROR_40001.getMsg()+"库存入库失败");
+                return msg;
+            }
+        }
+
+        return msg;
+    }
+
+    @PostMapping("/entryBatch")
+    @JsonParams
+    public List<Msg> entryBatch(@RequestBody JSONArray jsonArray){
+        List<Msg> msgList = new ArrayList<>();
+        if (jsonArray.size() < 1){
+            return null;
+        }
+
+        for (int i = 0; i < jsonArray.size(); i++) {
+            JSONObject jsonObject = jsonArray.getJSONObject(i);
+            msgList.add(entrySingle(jsonObject));
+        }
+
+        return msgList;
+    }
+
+    @ApiOperation(value = "通用入库",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "JSONArray",value = "json数组,json对象为:{id:'用户ID',rfids:'流向码',time:'入库时间',cert:'运输证',type:'入库类型'}"),
+    })
+    @PostMapping("/entry")
+    @JsonParams
+    public Msg entryStock(@RequestBody JSONArray jsonArray){
+        if (jsonArray.size() > 0)
+        {
+            for (int i = 0; i < jsonArray.size(); i++) {
+                // 遍历 jsonArray 数组,把每一个对象转成 json 对象
+                JSONObject jsonObject = jsonArray.getJSONObject(i);
+                String userId = jsonObject.getString("id");
+                String directionCodeStr = jsonObject.getString("rfids");
+                String datetime = jsonObject.getString("time");
+                String transport = jsonObject.getString("cert");
+                Date date;
+                DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                try {
+                    date = dateFormat.parse(datetime);
+                } catch (ParseException e) {
+                    return new Msg(ERROR_10003,"入库日期类型错误!");
+                }
+                //type 1.常规入库; 2.退货入库
+                String type = jsonObject.getString("type");
+                if (StringUtils.isBlank(type)){
+                    return new Msg(ERROR_10001,"入库类型不能为空");
+                }
+
+                if (StringUtils.isBlank(directionCodeStr)){
+                    return new Msg(ERROR_10001,"流向码不能为空");
+                }
+
+                boolean isUser = userService.checkUserById(userId);
+                if (!isUser){
+                    return new Msg(ERROR_50001,"未找到相关用户信息,不能入库!");
+                }
+                UserInfo userInfo = userService.getById(userId);
+
+                //判断是否存在同时间同操作人入库记录
+                boolean exist = entryService.isEntryExist(datetime,userInfo);
+                if (exist){ continue; }
+
+                String auth = getAuth();
+                auth = StringUtils.isBlank(auth) ? "NOAUTH" : auth;
+                List<String> directionCodes = StringUtils.toList(directionCodeStr);
+                EntryOrderInfo orderInfo = entryService.generateEntryOrderInfo(type,userInfo,date,transport, auth);
+                int boxNum = 0;
+                List<EntryDetailInfo>detailInfos = new ArrayList<>();
+                List<ProductLocusInfo>locusInfos = new ArrayList<>();
+
+                List<ProductVo> productVos = new ArrayList<>();
+                for (String dire:directionCodes) {
+                    if (FireworkDeal.isNotDirectionCode(dire)){
+                        return new Msg(ERROR_10004,"流向码:"+dire+" 不符合规则,无法识别!");
+                    }
+                    DirectionDetail detail = FireworkDeal.dealDirectionCode(dire);
+                    if (productService.hasProductByDire(dire)){
+                        return new Msg(ERROR_50001,":流向码:"+dire+" 未找到相应产品信息!");
+                    }
+                    ProductVo productVo = productService.selectVoByDirection(dire);
+                    EntryDetailInfo detailInfo = new EntryDetailInfo(orderInfo.getCode(),dire,productVo.getItemCode(),
+                            productVo.getName(),productVo.getManufacturer(),new Date(),userInfo.getCompanynumber());
+                    if (detail.getLength() == FireworkDeal.DIRECTION_OUTSIDE){
+                        ProductLocusInfo productLocusInfo = new ProductLocusInfo(dire,new Date(),date, userInfo.getCompany(),
+                                null,ProductLocusInfo.ENTRY_STATUS,productVo.getBoxNumber().toString());
+                        locusInfos.add(productLocusInfo);
+                    }
+                    if (detail.getLength() == FireworkDeal.DIRECTION_OUTSIDE){
+                        FireworkDeal.getProductVos(dire, detail, detail, productVos, productVo);
+                        detailInfo.setBoxcode(detail.getOriginalCode());
+                        detailInfo.setNum(Integer.parseInt(detail.getBoxNo()));
+                        boxNum += Integer.parseInt(detail.getBoxNo());
+                    }else if (detail.getLength() == FireworkDeal.DIRECTION_INSIDE){
+                        ProductInfo productVo1 = productService.selectByDirection(dire);
+                        ProductVo productVo2 = BeanUtils.copy(productVo1,ProductVo.class);
+                        productVo2.setItemCode(dire.substring(0,10));
+                        productVo2.setDirectionCode(dire);
+                        productVos.add(productVo2);
+                        detailInfo.setNum(1);
+                        boxNum +=1;
+                    }
+                    detailInfos.add(detailInfo);
+                }
+                orderInfo.setNum(boxNum);
+                entryService.save(orderInfo);
+                entryDetailService.saveBatch(detailInfos);
+                productLocusService.insertBatch(locusInfos);
+                boolean flag = stockService.putInStorage(userInfo,productVos,date,type);
+            }
+        }
+        return success();
+    }
+
+    /**
+     *
+     * @param jsonArray [{"id":"用户ID","type":"快速入库填1","time":"时间","cert":"运输证编号","rfidfirst":"第一箱的流向码","rfidlast":"最后一箱的流向码"}]
+     * @return msg
+     */
+    @ApiOperation(value = "快速入库",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "JSONArray",value = "json数组,json对象为:{\"id\":\"用户ID\",\"type\":\"快速入库填1\",\"time\":\"时间\",\"cert\":\"运输证编号\",\"rfidfirst\":\"第一箱的流向码\",\"rfidlast\":\"最后一箱的流向码\"}"),
+    })
+    @PostMapping("/entryQuick")
+    @JsonParams
+    public Msg entryQuick(@RequestBody JSONArray jsonArray){
+        Msg msg = new Msg(true);
+        if (jsonArray.size() > 0)
+        {
+            for (int i = 0; i < jsonArray.size(); i++) {
+                // 遍历 jsonArray 数组,把每一个对象转成 json 对象
+                JSONObject jsonObject = jsonArray.getJSONObject(i);
+                String userId = jsonObject.getString("id");
+                String directionCodeFirst = jsonObject.getString("rfidfirst");
+                String directionCodeLast = jsonObject.getString("rfidlast");
+                String datetime = jsonObject.getString("time");
+                String transport = jsonObject.getString("cert");
+                //type 1.常规入库; 2.退货入库
+                String type = "1";
+                Date date;
+                DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                try {
+                    date = dateFormat.parse(datetime);
+                } catch (ParseException e) {
+                    msg.setCode(ERROR_10003.getCode());
+                    msg.setMessage(ERROR_10003.getMsg()+":入库日期类型错误!");
+                    return msg;
+                }
+
+                if (!(FireworkDeal.is22Characters(directionCodeFirst) && FireworkDeal.is22Characters(directionCodeLast))){
+                    msg.setCode(ERROR_10004.getCode());
+                    msg.setMessage(ERROR_10004.getMsg()+":流向码首尾不符合规则,无法快速入库!");
+                    return msg;
+                }
+                boolean isUser = userService.checkUserById(userId);
+                if (!isUser){
+                    msg.setCode(ERROR_50001.getCode());
+                    msg.setMessage(ERROR_50001.getMsg()+":未找到相关用户信息,不能入库!");
+                    return msg;
+                }
+                UserInfo userInfo = userService.getById(userId);
+
+                //判断是否存在同时间同操作人入库记录
+                boolean exist = entryService.isEntryExist(datetime,userInfo);
+                if (exist){
+                    continue;
+                }
+
+                String auth = getAuth();
+                auth = StringUtils.isBlank(auth) ? "NOAUTH" : auth;
+                EntryOrderInfo orderInfo = entryService.generateEntryOrderInfo(type,userInfo,date,transport, auth);
+
+                List<EntryDetailInfo>detailInfos = new ArrayList<>();
+                List<ProductLocusInfo>locusInfos = new ArrayList<>();
+
+                List<ProductVo> productVos = new ArrayList<>();
+
+                DirectionDetail detailFirst = FireworkDeal.dealDirectionCode(directionCodeFirst);
+                DirectionDetail detailLast = FireworkDeal.dealDirectionCode(directionCodeLast);
+                if (!detailFirst.getItemCode().equals(detailLast.getItemCode())){
+                    msg.setCode(ERROR_10004.getCode());
+                    msg.setMessage(ERROR_10004.getMsg()+":首尾商品编码不一致,无法快速入库");
+                    return msg;
+                }
+
+                if (Integer.parseInt(detailFirst.getSerialNo()) > Integer.parseInt(detailLast.getSerialNo())){
+                    msg.setCode(ERROR_10004.getCode());
+                    msg.setMessage(ERROR_10004.getMsg()+":首位商品序号大于末位,无法快速入库");
+                    return msg;
+                }
+
+                ProductVo productVo = productService.selectVoByDirection(directionCodeFirst);
+
+                Integer firstNo = Integer.parseInt(detailFirst.getSerialNo());
+                Integer lastNo = Integer.parseInt(detailLast.getSerialNo());
+                int perBoxNum = Integer.parseInt(detailFirst.getBoxNo());
+
+                int boxNum = ((lastNo-firstNo)/perBoxNum)+1;
+                int totalNum = 0;
+
+                for (int j=1;j<= boxNum;j++){
+                    String dire = detailFirst.getItemCode()+detailFirst.getDateCode()+ String.format("%05d", firstNo)+String.format("%03d", perBoxNum);
+                    EntryDetailInfo detailInfo = new EntryDetailInfo(orderInfo.getCode(),dire,productVo.getItemCode(),
+                            productVo.getName(),productVo.getManufacturer(),new Date(),userInfo.getCompanynumber());
+                    detailInfo.setNum(perBoxNum);
+                    detailInfos.add(detailInfo);
+                    ProductLocusInfo productLocusInfo = new ProductLocusInfo(dire,new Date(),date, userInfo.getCompany(),
+                            null,ProductLocusInfo.ENTRY_STATUS,productVo.getBoxNumber().toString());
+                    locusInfos.add(productLocusInfo);
+                    firstNo+=perBoxNum;
+                    totalNum += perBoxNum;
+                }
+
+                FireworkDeal.getProductVos(directionCodeFirst,detailFirst,detailLast,productVos,productVo);
+
+                orderInfo.setNum(totalNum);
+                entryService.save(orderInfo);
+                entryDetailService.saveBatch(detailInfos);
+                productLocusService.insertBatch(locusInfos);
+                boolean flag = stockService.putInStorage(userInfo,productVos,date, type);
+            }
+        }
+        return msg;
+    }
+
+    @GetMapping("/info")
+    public Msg getList(@RequestParam(value = "name", required = false) String name,
+                       @RequestParam(value = "directionCode", required = false) String directionCode,
+                       @RequestParam(value = "manufacturer", required = false) String manufacturer,
+                       @RequestParam(value = "type", required = false) String type,
+                       @RequestParam(value = "secondaryType", required = false) String secondaryType,
+                       @RequestParam(value = "beginDate") String beginDate,
+                       @RequestParam(value = "endDate") String endDate,
+                       @RequestParam(value = "owner")String owner,
+                       @RequestParam(defaultValue = "0") Integer pageIndex,
+                       @RequestParam(defaultValue = "10") Integer pageSize,
+                       String sort, String order){
+        Msg msg = new Msg(true);
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize,sort,order);
+        Map<String, Object> condition = new HashMap<>(8);
+
+        if (StringUtils.isNotBlank(name)) {
+            condition.put("name", name);
+        }
+        if (StringUtils.isNotBlank(directionCode)) {
+            condition.put("directionCode", directionCode);
+        }
+        if (StringUtils.isNotBlank(manufacturer)) {
+            condition.put("manufacturer", manufacturer);
+        }
+        if (StringUtils.isNotBlank(type)) {
+            condition.put("type", type);
+        }
+        if (StringUtils.isNotBlank(secondaryType)) {
+            condition.put("secondaryType", secondaryType);
+        }
+//        if (getUser().getCompanyid() != null){
+//            owner = getUser().getCompanyid().toString();
+//        }
+        condition.put("owner",owner);
+        condition.put("beginDate",beginDate);
+        condition.put("endDate",endDate);
+        pageInfo.setCondition(condition);
+        stockService.selectDataGrid(pageInfo);
+        msg.setResult(pageInfo);
+        return msg;
+    }
+
+    @GetMapping("/info-app")
+    public Msg getList2() {
+        PageInfo pageInfo = new PageInfo();
+        Map<String, Object> condition = new HashMap<>();
+        UserInfo user = getUser();
+        UserInfo userInfo = userService.getById(user);
+        condition.put("owner",userInfo.getCompanyid());
+        pageInfo.setCondition(condition);
+        PageInfoExtension<StockTotal> extension = stockService.selectDataGridExtensions(pageInfo);
+
+        return success(extension);
+
+    }
+
+    @GetMapping("/enterpriseStock")
+    public Msg getEnterpriseStockList(@RequestParam(value = "name", required = false) String name,
+                                      @RequestParam(value = "province", required = false) String province,
+                                      @RequestParam(value = "city", required = false) String city,
+                                      @RequestParam(value = "area", required = false) String area,
+                                      @RequestParam(value = "town", required = false) String town,
+                                      @RequestParam(value = "community", required = false) String community,
+                                      @RequestParam(value = "enterpriseType", required = false) String type,
+                                      @RequestParam(defaultValue = "0") Integer pageIndex,
+                                      @RequestParam(defaultValue = "10") Integer pageSize,
+                                      String sort, String order){
+        Msg msg = new Msg(true);
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize,sort,order);
+        Map<String, Object> condition = new HashMap<>(16);
+        if (StringUtils.isNotBlank(name)) {
+            condition.put("name", name);
+        }
+        if (StringUtils.isNotBlank(type)) {
+            condition.put("type", type);
+        }
+
+        if (StringUtils.isNotBlank(province)) {
+            condition.put("province", province);
+        }
+        if (StringUtils.isNotBlank(city)) {
+            condition.put("city", city);
+        }
+        if (StringUtils.isNotBlank(area)) {
+            condition.put("district", area);
+        }
+        if (StringUtils.isNotBlank(town)) {
+            condition.put("town", town);
+        }
+        if (StringUtils.isNotBlank(community)) {
+            condition.put("community", community);
+        }
+
+        UserInfo userInfo = userService.getById(getUser().getId());
+
+        assert userInfo != null;
+        if (userInfo.getCompanynumber() != null){
+            condition.put("operator",userInfo.getCompanynumber());
+            List<Enterprise> subs = enterpriseService.selectSubEnterprise(userInfo.getCompanyid());
+            List<String> subList = subs.stream().map(Enterprise::getEnterprisenumber).collect(Collectors.toList());
+            if (subList.size() > 0)
+                condition.put("subList", subList);
+        }
+
+        //根据用户省市区权限添加/修改查询条件
+        if (userInfo.getCompanyid() == null && userInfo.getType() == 3){
+            boolean provinceNull = StringUtils.isBlank(userInfo.getProvince());
+            boolean cityNull = !provinceNull && StringUtils.isBlank(userInfo.getCity()) ;
+            boolean districtNull = !provinceNull && StringUtils.isNotBlank(userInfo.getCity())
+                    && StringUtils.isBlank(userInfo.getArea());
+            boolean streetNull = !provinceNull && StringUtils.isNotBlank(userInfo.getCity())
+                    && StringUtils.isNotBlank(userInfo.getArea()) && StringUtils.isBlank(userInfo.getTown());
+            boolean committeeNull = !provinceNull && StringUtils.isNotBlank(userInfo.getCity())
+                    && StringUtils.isNotBlank(userInfo.getArea()) && StringUtils.isNotBlank(userInfo.getTown())
+                    && StringUtils.isBlank(userInfo.getCommunity());
+            if (cityNull){
+                condition.put("province", userInfo.getProvince());
+            }else if (districtNull){
+                condition.put("province", userInfo.getProvince());
+                condition.put("city", userInfo.getCity());
+            }else if (streetNull){
+                condition.put("province", userInfo.getProvince());
+                condition.put("city", userInfo.getCity());
+                condition.put("district", userInfo.getArea());
+            }else if (committeeNull){
+                condition.put("province", userInfo.getProvince());
+                condition.put("city", userInfo.getCity());
+                condition.put("district", userInfo.getArea());
+                condition.put("street", userInfo.getTown());
+            }else {
+                condition.put("province", userInfo.getProvince());
+                condition.put("city", userInfo.getCity());
+                condition.put("district", userInfo.getArea());
+                condition.put("street", userInfo.getTown());
+                condition.put("committee", userInfo.getCommunity());
+            }
+        }
+
+        pageInfo.setCondition(condition);
+        condition.put("index",(pageIndex-1)*pageSize);
+        condition.put("size",pageSize);
+//        stockService.selectEnterpriseStockDataGrid(pageInfo);
+//        Integer count = enterpriseService.getEnterpriseByLimitCount(condition);
+//        limit #{condition.index},#{condition.size}
+
+        List<StockVo>stockVos = stockService.selectEnterpriseStocks(condition);
+        int index = (pageIndex-1)*pageSize;
+        int count = stockVos.size();
+        int size = index+pageSize;
+        if (size > count){
+            size = count;
+        }
+        //总计
+
+        BigDecimal stockNum = new BigDecimal("0");
+        BigDecimal firecracker = new BigDecimal("0");
+        BigDecimal spray = new BigDecimal("0");
+        BigDecimal rotation = new BigDecimal("0");
+        BigDecimal bead = new BigDecimal("0");
+        BigDecimal toy = new BigDecimal("0");
+        BigDecimal combined = new BigDecimal("0");
+        if (stockVos.size() > 0) {
+            for (StockVo stockVo : stockVos) {
+                stockNum = stockNum.add(stockVo.getStockNum());
+                firecracker = firecracker.add(stockVo.getFirecracker());
+                spray = spray.add(stockVo.getSpray());
+                rotation = rotation.add(stockVo.getRotation());
+                bead = bead.add(stockVo.getBead());
+                toy = toy.add(stockVo.getToy());
+                combined = combined.add(stockVo.getCombined());
+            }
+        }
+        Map<String, Object> totalRow = new HashMap<>();
+        totalRow.put("name", "总计");
+        totalRow.put("stockNum", stockNum);
+        totalRow.put("firecracker", firecracker);
+        totalRow.put("spray", spray);
+        totalRow.put("rotation", rotation);
+        totalRow.put("bead", bead);
+        totalRow.put("toy", toy);
+        totalRow.put("combined", combined);
+
+        pageInfo.setResult(stockVos.subList(index,size));
+        pageInfo.setTotalCount((long) count);
+
+        PageInfoExtension<Map> extension = new PageInfoExtension<>(pageInfo);
+        extension.setExtension(totalRow);
+        msg.setResult(extension);
+        return msg;
+    }
+
+    @GetMapping("/enterpriseStaticStock")
+    public Msg enterpriseStaticStock(@RequestParam(value = "name", required = false) String name,
+                                      @RequestParam(value = "province", required = false) String province,
+                                      @RequestParam(value = "city", required = false) String city,
+                                      @RequestParam(value = "area", required = false) String area,
+                                      @RequestParam(value = "town", required = false) String town,
+                                      @RequestParam(value = "community", required = false) String community,
+                                      @RequestParam(value = "enterpriseType", required = false) String type,
+                                      @RequestParam(defaultValue = "0") Integer pageIndex,
+                                      @RequestParam(defaultValue = "10") Integer pageSize,
+                                      String sort, String order){
+        Msg msg = new Msg(true);
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize,sort,order);
+        Map<String, Object> condition = new HashMap<>(16);
+        if (StringUtils.isNotBlank(name)) {
+            condition.put("name", name);
+        }
+        if (StringUtils.isNotBlank(type)) {
+            condition.put("type", type);
+        }
+
+        if (StringUtils.isNotBlank(province)) {
+            condition.put("province", province);
+        }
+        if (StringUtils.isNotBlank(city)) {
+            condition.put("city", city);
+        }
+        if (StringUtils.isNotBlank(area)) {
+            condition.put("district", area);
+        }
+        if (StringUtils.isNotBlank(town)) {
+            condition.put("town", town);
+        }
+        if (StringUtils.isNotBlank(community)) {
+            condition.put("community", community);
+        }
+
+        UserInfo userInfo = userService.getById(getUser().getId());
+
+        assert userInfo != null;
+        if (userInfo.getCompanynumber() != null){
+            condition.put("operator",userInfo.getCompanynumber());
+            List<Enterprise> subs = enterpriseService.selectSubEnterprise(userInfo.getCompanyid());
+            List<String> subList = subs.stream().map(Enterprise::getEnterprisenumber).collect(Collectors.toList());
+            if (subList.size() > 0)
+                condition.put("subList", subList);
+        }
+
+        //根据用户省市区权限添加/修改查询条件
+        if (userInfo.getCompanyid() == null && userInfo.getType() == 3){
+            boolean provinceNull = StringUtils.isBlank(userInfo.getProvince());
+            boolean cityNull = !provinceNull && StringUtils.isBlank(userInfo.getCity()) ;
+            boolean districtNull = !provinceNull && StringUtils.isNotBlank(userInfo.getCity())
+                    && StringUtils.isBlank(userInfo.getArea());
+            boolean streetNull = !provinceNull && StringUtils.isNotBlank(userInfo.getCity())
+                    && StringUtils.isNotBlank(userInfo.getArea()) && StringUtils.isBlank(userInfo.getTown());
+            boolean committeeNull = !provinceNull && StringUtils.isNotBlank(userInfo.getCity())
+                    && StringUtils.isNotBlank(userInfo.getArea()) && StringUtils.isNotBlank(userInfo.getTown())
+                    && StringUtils.isBlank(userInfo.getCommunity());
+            if (cityNull){
+                condition.put("province", userInfo.getProvince());
+            }else if (districtNull){
+                condition.put("province", userInfo.getProvince());
+                condition.put("city", userInfo.getCity());
+            }else if (streetNull){
+                condition.put("province", userInfo.getProvince());
+                condition.put("city", userInfo.getCity());
+                condition.put("district", userInfo.getArea());
+            }else if (committeeNull){
+                condition.put("province", userInfo.getProvince());
+                condition.put("city", userInfo.getCity());
+                condition.put("district", userInfo.getArea());
+                condition.put("street", userInfo.getTown());
+            }else {
+                condition.put("province", userInfo.getProvince());
+                condition.put("city", userInfo.getCity());
+                condition.put("district", userInfo.getArea());
+                condition.put("street", userInfo.getTown());
+                condition.put("committee", userInfo.getCommunity());
+            }
+        }
+
+        pageInfo.setCondition(condition);
+        condition.put("index",(pageIndex-1)*pageSize);
+        condition.put("size",pageSize);
+
+        List<StaticStock>stocks = staticStockService.selectStaticStocks(condition);
+        int index = (pageIndex-1)*pageSize;
+        int count = stocks.size();
+        int size = index+pageSize;
+        if (size > count){
+            size = count;
+        }
+        //总计
+        BigDecimal stockNum = new BigDecimal("0");
+        BigDecimal firecracker = new BigDecimal("0");
+        BigDecimal spray = new BigDecimal("0");
+        BigDecimal rotation = new BigDecimal("0");
+        BigDecimal bead = new BigDecimal("0");
+        BigDecimal toy = new BigDecimal("0");
+        BigDecimal combined = new BigDecimal("0");
+        if (stocks.size() > 0) {
+            for (StaticStock stock : stocks) {
+                stockNum = stockNum.add(stock.getStockNum());
+                firecracker = firecracker.add(stock.getFirecracker());
+                spray = spray.add(stock.getSpray());
+                rotation = rotation.add(stock.getRotation());
+                bead = bead.add(stock.getBead());
+                toy = toy.add(stock.getToy());
+                combined = combined.add(stock.getCombined());
+            }
+        }
+        Map<String, Object> totalRow = new HashMap<>();
+        totalRow.put("name", "总计");
+        totalRow.put("stockNum", stockNum);
+        totalRow.put("firecracker", firecracker);
+        totalRow.put("spray", spray);
+        totalRow.put("rotation", rotation);
+        totalRow.put("bead", bead);
+        totalRow.put("toy", toy);
+        totalRow.put("combined", combined);
+
+        pageInfo.setResult(stocks.subList(index,size));
+        pageInfo.setTotalCount((long) count);
+
+        PageInfoExtension<Map> extension = new PageInfoExtension<>(pageInfo);
+        extension.setExtension(totalRow);
+        msg.setResult(extension);
+        return msg;
+    }
+
+    @GetMapping("/detail")
+    public Msg getStockDetailByItemCode(
+                                      @RequestParam(value = "itemCode") String itemCode,
+                                      @RequestParam(value = "enterpriseNumber") String enterpriseNumber,
+                                      @RequestParam(value = "directionCode",required = false) String directionCode,
+                                      @RequestParam(defaultValue = "0") Integer pageIndex,
+                                      @RequestParam(defaultValue = "10") Integer pageSize,
+                                      String sort, String order){
+        Msg msg = new Msg(true);
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize,sort,order);
+        Map<String, Object> condition = new HashMap<>(16);
+        condition.put("itemCode", itemCode);
+        Enterprise enterprise = enterpriseService.selectEnterpriseByNumber(enterpriseNumber);
+        if (enterprise == null){
+            return new Msg(ERROR_50001);
+        }
+        condition.put("owner", enterprise.getId());
+        if (StringUtils.isNotBlank(directionCode)) {
+            condition.put("directionCode", directionCode);
+        }
+        pageInfo.setCondition(condition);
+        stockService.selectStockDetailByItemCode(pageInfo);
+        msg.setResult(pageInfo);
+        return msg;
+    }
+
+    @GetMapping("/enterpriseSale")
+    public Msg getEnterpriseSaleList(@RequestParam(value = "name", required = false) String name,
+                                      @RequestParam(value = "beginDate") String beginDate,
+                                      @RequestParam(value = "endDate") String endDate,
+                                      @RequestParam(value = "province", required = false) String province,
+                                      @RequestParam(value = "city", required = false) String city,
+                                      @RequestParam(value = "area", required = false) String area,
+                                      @RequestParam(value = "town", required = false) String town,
+                                      @RequestParam(value = "community", required = false) String community,
+                                      @RequestParam(value = "enterpriseType", required = false) String type,
+                                      @RequestParam(defaultValue = "0") Integer pageIndex,
+                                      @RequestParam(defaultValue = "10") Integer pageSize,
+                                      String sort, String order){
+        Msg msg = new Msg(true);
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize,sort,order);
+        Map<String, Object> condition = new HashMap<>(16);
+        if (StringUtils.isNotBlank(name)) {
+            condition.put("name", name);
+        }
+        if (StringUtils.isNotBlank(beginDate)) {
+            condition.put("beginDate", beginDate);
+        }
+        if (StringUtils.isNotBlank(endDate)) {
+            condition.put("endDate", endDate);
+        }
+        if (StringUtils.isNotBlank(type)) {
+            condition.put("type", type);
+        }
+
+        if (StringUtils.isNotBlank(province)) {
+            condition.put("province", province);
+        }
+        if (StringUtils.isNotBlank(city)) {
+            condition.put("city", city);
+        }
+        if (StringUtils.isNotBlank(area)) {
+            condition.put("district", area);
+        }
+        if (StringUtils.isNotBlank(town)) {
+            condition.put("town", town);
+        }
+        if (StringUtils.isNotBlank(community)) {
+            condition.put("community", community);
+        }
+
+        UserInfo userInfo = userService.getById(getUser().getId());
+
+        assert userInfo != null;
+        if (userInfo.getCompanynumber() != null){
+            condition.put("operator",userInfo.getCompanynumber());
+            List<Enterprise> subs = enterpriseService.selectSubEnterprise(userInfo.getCompanyid());
+            List<String> subList = subs.stream().map(Enterprise::getEnterprisenumber).collect(Collectors.toList());
+            if (subList.size() > 0)
+                condition.put("subList", subList);
+        }
+
+        //根据用户省市区权限添加/修改查询条件
+        if (userInfo.getCompanyid() == null && userInfo.getType() == 3){
+            boolean provinceNull = StringUtils.isBlank(userInfo.getProvince());
+            boolean cityNull = !provinceNull && StringUtils.isBlank(userInfo.getCity()) ;
+            boolean districtNull = !provinceNull && StringUtils.isNotBlank(userInfo.getCity())
+                    && StringUtils.isBlank(userInfo.getArea());
+            boolean streetNull = !provinceNull && StringUtils.isNotBlank(userInfo.getCity())
+                    && StringUtils.isNotBlank(userInfo.getArea()) && StringUtils.isBlank(userInfo.getTown());
+            boolean committeeNull = !provinceNull && StringUtils.isNotBlank(userInfo.getCity())
+                    && StringUtils.isNotBlank(userInfo.getArea()) && StringUtils.isNotBlank(userInfo.getTown())
+                    && StringUtils.isBlank(userInfo.getCommunity());
+            if (cityNull){
+                condition.put("province", userInfo.getProvince());
+            }else if (districtNull){
+                condition.put("province", userInfo.getProvince());
+                condition.put("city", userInfo.getCity());
+            }else if (streetNull){
+                condition.put("province", userInfo.getProvince());
+                condition.put("city", userInfo.getCity());
+                condition.put("district", userInfo.getArea());
+            }else if (committeeNull){
+                condition.put("province", userInfo.getProvince());
+                condition.put("city", userInfo.getCity());
+                condition.put("district", userInfo.getArea());
+                condition.put("street", userInfo.getTown());
+            }else {
+                condition.put("province", userInfo.getProvince());
+                condition.put("city", userInfo.getCity());
+                condition.put("district", userInfo.getArea());
+                condition.put("street", userInfo.getTown());
+                condition.put("committee", userInfo.getCommunity());
+            }
+        }
+
+        pageInfo.setCondition(condition);
+        PageInfoExtension<Map> extension = stockService.selectEnterpriseSaleDataGrid(pageInfo);
+        msg.setResult(extension);
+        return msg;
+    }
+
+    @GetMapping("/saleInfo")
+    public Msg getSaleInfo(@RequestParam(value = "name", required = false) String name,
+                           @RequestParam(value = "directionCode", required = false) String directionCode,
+                           @RequestParam(value = "manufacturer", required = false) String manufacturer,
+                           @RequestParam(value = "type", required = false) String type,
+                           @RequestParam(value = "enterpriseNumber", required = false) String companyNumber,
+                           @RequestParam(value = "beginDate") String beginDate,
+                           @RequestParam(value = "endDate") String endDate,
+                           @RequestParam(defaultValue = "0") Integer pageIndex,
+                           @RequestParam(defaultValue = "10") Integer pageSize,
+                           String sort, String order){
+        Msg msg = new Msg(true);
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize,sort,order);
+        Map<String, Object> condition = new HashMap<>(8);
+
+        if (StringUtils.isNotBlank(name)) {
+            condition.put("name", name);
+        }
+        if (StringUtils.isNotBlank(directionCode)) {
+            condition.put("directionCode", directionCode);
+        }
+        if (StringUtils.isNotBlank(manufacturer)) {
+            condition.put("manufacturer", manufacturer);
+        }
+        if (StringUtils.isNotBlank(type)) {
+            condition.put("type", type);
+        }
+        if (StringUtils.isNotBlank(companyNumber)) {
+            condition.put("companyNumber", companyNumber);
+        }
+        condition.put("beginDate",beginDate);
+        condition.put("endDate",endDate);
+        pageInfo.setCondition(condition);
+        stockService.selectSaleDetailDataGrid(pageInfo);
+        msg.setResult(pageInfo);
+        return msg;
+    }
+
+    @PostMapping("/refreshStock")
+    public Msg refreshStock(){
+        Msg msg = new Msg(true);
+        stockService.saveOrUpdateCurrentStock(getUser().getUsername());
+        return msg;
+    }
+
+    @PostMapping("/clearStock")
+    public Msg clearStock(@RequestBody JSONObject object){
+        String owners = object.getString("owners");
+        UserInfo userInfo = userService.getById(getUser().getId());
+        if (userInfo.getType() != 1){
+            return new Msg(ERROR_70001);
+        }
+        if (StringUtils.isBlank(owners)){
+            return new Msg(ERROR_10001);
+        }
+        List<String> list = StringUtils.toList(owners);
+        for (String owner : list){
+            Enterprise enterprise = enterpriseService.getById(owner);
+            if (enterprise == null){
+                return new Msg(ERROR_50001);
+            }
+            boolean flag = stockService.clearStock(enterprise);
+        }
+        return success();
+    }
+
+    @PostMapping("/clearStockByItem")
+    public Msg clearStockByItem(@RequestBody JSONObject object){
+        String owner = object.getString("owner");
+        String directionCodes = object.getString("directionCodes");
+        UserInfo userInfo = userService.getById(getUser().getId());
+        if (userInfo.getType() != 1){
+            return new Msg(ERROR_70001);
+        }
+        if (StringUtils.isBlank(owner) || StringUtils.isBlank(directionCodes)){
+            return new Msg(ERROR_10001);
+        }
+        List<String> list = StringUtils.toList(directionCodes);
+        Enterprise enterprise = enterpriseService.getById(owner);
+        if (enterprise == null){
+            return new Msg(ERROR_50001);
+        }
+        boolean flag = stockService.clearStockByItems(enterprise,list);
+        return success();
+    }
+
+}

--
Gitblit v1.9.2