From 2fcd97552d16718cc7997629fd637a73a5a4483f Mon Sep 17 00:00:00 2001
From: 郑永安 <zyazyz250@sina.com>
Date: 星期一, 19 六月 2023 14:44:19 +0800
Subject: [PATCH] 删除

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

diff --git a/src/main/java/com/gk/firework/Controller/SaleOrderController.java b/src/main/java/com/gk/firework/Controller/SaleOrderController.java
new file mode 100644
index 0000000..609a9a4
--- /dev/null
+++ b/src/main/java/com/gk/firework/Controller/SaleOrderController.java
@@ -0,0 +1,1016 @@
+package com.gk.firework.Controller;
+
+import com.alibaba.fastjson.JSON;
+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.BO.DirectionProductBO;
+import com.gk.firework.Domain.BO.SaleOrderDetailInfoBO;
+import com.gk.firework.Domain.DO.ProductDO;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.Log.JsonParams;
+import com.gk.firework.Domain.SaleOrderDetailInfo;
+import com.gk.firework.Domain.Utils.*;
+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.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.math.BigDecimal;
+import java.nio.charset.StandardCharsets;
+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/31 8:53
+ */
+@Api(tags = "订单信息")
+@RequestMapping("/order")
+@RestController
+public class SaleOrderController extends BaseController {
+    @Value("${productPath}")
+    private String productPath; //配置文件配置的物理保存地址
+    @Autowired
+    private CustomerService customerService;
+    @Autowired
+    private UserService userService;
+    @Autowired
+    private SaleOrderService saleOrderService;
+    @Autowired
+    private SaleOrderDetailService saleOrderDetailService;
+    @Autowired
+    private ProductService productService;
+    @Autowired
+    private ProductPriceService productPriceService;
+    @Autowired
+    private StockService stockService;
+    @Autowired
+    private EntryService entryService;
+    @Autowired
+    private EntryDetailService entryDetailService;
+    @Autowired
+    private SoldNoStockService soldNoStockService;
+    @Autowired
+    private ExcelExportService excelExportService;
+
+    @PostMapping("/create")
+    @JsonParams
+    public Msg createOrder(@RequestParam String encryptStr) {
+
+        String jsonStr = new String(Base64.getDecoder().decode(encryptStr.replaceAll(" +","+")),
+                StandardCharsets.UTF_8);
+
+        JSONObject jsonObject = JSON.parseObject(jsonStr);
+
+        Msg msg = new Msg(true);
+        JSONObject customer = jsonObject.getJSONObject("customer");
+        JSONObject order = jsonObject.getJSONObject("order");
+        JSONArray detailObject = jsonObject.getJSONArray("detailInfos");
+        String userId = jsonObject.getString("operator");
+        Integer num = order.getInteger("boxNum");
+        String total = order.getString("total");
+        String pay = order.getString("pay");
+        String change = order.getString("change");
+        String type = jsonObject.getString("type");
+        Date salesTime = new Date();
+        if (customer == null || detailObject == null || detailObject.isEmpty()) {
+            msg.setCode(ERROR_10001.getCode());
+            msg.setMessage(ERROR_10001.getMsg());
+            return msg;
+        }
+
+        if (userId == null) {
+            msg.setCode(ERROR_10004.getCode());
+            msg.setMessage(ERROR_10004.getMsg()+":用户信息错误");
+            return msg;
+        }
+        UserInfo userInfo = userService.getById(userId);
+        if (userInfo == null) {
+            msg.setCode(ERROR_10004.getCode());
+            msg.setMessage(ERROR_10004.getMsg()+":用户信息错误");
+            return msg;
+        }
+
+
+
+        // 优化1 单独校验数据
+//        List<String> directionCodes = new ArrayList<>(detailObject.size());
+        Set<String> direction10Codes = new HashSet<>();
+        for (int i = 0; i < detailObject.size(); i++) {
+            JSONObject object = detailObject.getJSONObject(i);
+            String directionCodeStr = object.getString("directionCode");
+            if (FireworkDeal.isNotDirectionCode(directionCodeStr)) {
+                msg.setCode(ERROR_10004.getCode());
+                msg.setMessage(ERROR_10004.getMsg()+":流向码:" + directionCodeStr + "错误");
+                return msg;
+            }
+//            directionCodes.add(directionCodeStr);
+            // 10位码
+            direction10Codes.add(directionCodeStr.substring(0, 10));
+        }
+        List<String> direction10CodesList = new ArrayList<>(direction10Codes);
+        // 获取所有流向码的
+        List<ProductDO> productDos = productService.selectDoByDirections(direction10CodesList);
+        // 10位 -> 产品 映射
+        Map<String, ProductDO> productDOMap = new HashMap<>(productDos.size());
+        for (ProductDO p : productDos) {
+            productDOMap.put(p.getDirectionCode(), p);
+        }
+        // 校验哪个产品不存在
+        for (String directionCode : direction10CodesList) {
+            if (!productDOMap.containsKey(directionCode)) {
+                msg.setCode(ERROR_10004.getCode());
+                msg.setMessage(ERROR_10004.getMsg()+":流向码:" + directionCode + "不存在");
+                return msg;
+            }
+        }
+        // 产品对应价格
+        List<ProductPriceInfo> productPriceInfos = productPriceService.selectByCodes(userInfo.getCompanynumber(), direction10CodesList);
+        // 10位 -> 产品价格 映射
+        Map<String, BigDecimal> productPriceMap = new HashMap<>(productPriceInfos.size());
+        for (ProductPriceInfo productPriceInfo : productPriceInfos) {
+            BigDecimal price = BigDecimal.ZERO;
+            if (productPriceInfo.getPrice() != null) {
+                price = productPriceInfo.getPrice();
+            }
+            productPriceMap.put(productPriceInfo.getItemcode(), price);
+        }
+
+//        for (String directionCode : direction10CodesList) {
+//            if (!productPriceMap.containsKey(directionCode)) {
+//                msg.setCode(ERROR_10004.getCode());
+//                msg.setMessage(ERROR_10004.getMsg()+":流向码:" + directionCode + "价格不存在");
+//                return msg;
+//            }
+//        }
+
+
+//        List<DirectionProductBO> directionProductBOS = new ArrayList<>(detailObject.size());
+//        DirectionProductBO directionProductBO;
+//        for (int i = 0; i < detailObject.size(); i++) {
+//            directionProductBO = new DirectionProductBO();
+//            JSONObject object = detailObject.getJSONObject(i);
+//            String directionCodeStr = object.getString("directionCode");
+//            directionProductBO.setDirectionCode(directionCodeStr);
+//            directionProductBO.setItemCode(directionCodeStr.substring(0,10));
+//            directionProductBO.setSlice(productDOMap.get(directionProductBO.getItemCode()).getSlice());
+//            directionProductBOS.add(directionProductBO);
+//        }
+
+//        List<StockInfo> stockInfos = stockService.selectStockByDirectionsAndSlices(directionProductBOS);
+
+
+//        Map<String, StockInfo> stockInfoMap = new HashMap<>();
+        List<SaleOrderDetailInfoBO> detailInfoList = new ArrayList<>();
+        for (int i = 0; i < detailObject.size(); i++) {
+            // 遍历 jsonArray 数组,把每一个对象转成 json 对象
+            JSONObject object = detailObject.getJSONObject(i);
+            String directionCodeStr = object.getString("directionCode");
+            ProductDO productDO = productDOMap.get(directionCodeStr.substring(0, 10));
+
+            if (productDO == null || productDO.getSlice() == null) {
+                msg.setCode(ERROR_10004.getCode());
+                msg.setMessage(ERROR_10004.getMsg()+":流向码:" + directionCodeStr + "错误");
+                return msg;
+            }
+            String slice = productDO.getSlice();
+            ProductInfo productInfo = BeanUtils.copy(productDO, ProductInfo.class);
+            // 需要分表查询暂不优化
+            StockInfo stockInfo = stockService.selectStockByDirectionAndSlice(directionCodeStr, slice);
+//            StockInfo stockInfo = stockService.selectStockByDirection(directionCodeStr);
+            if (stockInfo == null) {
+                msg.setCode(ERROR_50001.getCode());
+                msg.setMessage(ERROR_50001.getMsg()+":流向码为:" + directionCodeStr + " 未入库,销售失败");
+                return msg;
+            }
+
+            if (stockInfo.getStatus() != null && stockInfo.getStatus().equals(StockInfo.STOCK_SOLD)) {
+                msg.setCode(ERROR_50002.getCode());
+                msg.setMessage(ERROR_50002.getMsg()+":流向码为:" + directionCodeStr + " 已售出,销售失败");
+                return msg;
+            }
+
+            if (FireworkDeal.is22Characters(directionCodeStr)){
+                List<ProductVo>productVoList = new ArrayList<>();
+                DirectionDetail directionDetail = FireworkDeal.dealDirectionCode(directionCodeStr);
+                ProductVo productVo = BeanUtils.copy(productInfo, ProductVo.class);
+                productVo.setDirectionCode(directionCodeStr);
+                productVo.setItemCode(directionDetail.getItemCode());
+                productVo.setDateCode(directionDetail.getDateCode());
+                productVo.setSerialNo(directionDetail.getSerialNo());
+                FireworkDeal.getProductVos(directionCodeStr,directionDetail,directionDetail,productVoList,productVo);
+                for (ProductVo productVo1 : productVoList){
+                    SaleOrderDetailInfoBO detailInfo = new SaleOrderDetailInfoBO();
+                    detailInfo.setItemcode(productInfo.getDirectionCode());
+                    detailInfo.setDirectioncode(productVo1.getDirectionCode());
+                    detailInfo.setItemname(productVo1.getName());
+                    detailInfo.setPrice(productPriceMap.get(detailInfo.getDirectioncode()));
+                    if (detailInfo.getPrice() == null) {
+                        detailInfo.setPrice(BigDecimal.ZERO);
+                    }
+                    detailInfo.setSpecification(productVo1.getSpecification());
+                    detailInfo.setProductDO(productDOMap.get(detailInfo.getItemcode()));
+                    detailInfoList.add(detailInfo);
+                }
+                num = productVoList.size();
+            }else {
+                SaleOrderDetailInfoBO detailInfo = new SaleOrderDetailInfoBO();
+                detailInfo.setItemcode(productInfo.getDirectionCode());
+                detailInfo.setDirectioncode(directionCodeStr);
+                detailInfo.setItemname(productInfo.getName());
+                detailInfo.setPrice(productPriceMap.get(detailInfo.getDirectioncode()));
+                if (detailInfo.getPrice() == null) {
+                    detailInfo.setPrice(BigDecimal.ZERO);
+                }
+                detailInfo.setProductDO(productDOMap.get(detailInfo.getItemcode()));
+                detailInfo.setSpecification(productInfo.getSpecification());
+                detailInfoList.add(detailInfo);
+                num = 1;
+            }
+        }
+        String idCardNum = customer.getString("idCardNumber");
+        String workerName = customer.getString("workerName");
+        if (StringUtils.isBlank(idCardNum) || StringUtils.isBlank(workerName)) {
+            msg.setCode(ERROR_50001.getCode());
+            msg.setMessage(ERROR_50001.getMsg()+":身份信息有误");
+            return msg;
+        }
+
+        String auth = getAuth();
+        auth = StringUtils.isBlank(auth) ? "NOAUTH" : auth;
+
+        msg = saleOrderService.doSalesProcess(customer, num, idCardNum, userInfo, detailInfoList, type, salesTime, pay, total, change, auth);
+
+        return msg;
+    }
+
+    @GetMapping(value = {"/get/idCardNum/{idCardNum}/pageIndex/{pageIndex}/pageSize/{pageSize}/directionCode/{directionCode}",
+            "/get/idCardNum/{idCardNum}/pageIndex/{pageIndex}/pageSize/{pageSize}"})
+    public Msg getOrderListByIdCardNum(@PathVariable String idCardNum,
+                                       @PathVariable Integer pageIndex,
+                                       @PathVariable Integer pageSize,
+                                       String sort, String order,
+                                       @PathVariable(required = false) String directionCode) {
+        Msg msg = new Msg(true);
+        if (StringUtils.isBlank(idCardNum)) {
+            msg.setCode(ERROR_10001.getCode());
+            msg.setMessage(ERROR_10001.getMsg()+":身份证号为空,查询失败!");
+            return msg;
+        }
+        if (pageIndex == null){
+            pageIndex = 0;
+        }
+        if (pageSize == null || pageSize == 0){
+            pageSize = 10;
+        }
+
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize,sort,order);
+        Map<String, Object> condition = new HashMap<>(4);
+        condition.put("idCardNum",idCardNum);
+        if (StringUtils.isNotBlank(directionCode)) {
+            condition.put("directionCode", directionCode);
+        }
+        pageInfo.setCondition(condition);
+        saleOrderService.selectReturnDataGrid(pageInfo);
+
+        msg.setResult(pageInfo);
+        return msg;
+    }
+
+    @PostMapping("/saleDetailList")
+    public Msg getSaleOneDetail(@RequestBody JSONObject jsonObject) {
+        String directionCode = jsonObject.getString("directionCode");
+        String userId = jsonObject.getString("userId");
+
+        if (StringUtils.isBlank(userId)) {
+            throw new BusinessException("操作员信息为空");
+        }
+        List<SaleDetailVo> details = saleOrderDetailService.getDetailList(directionCode);
+        return success(details);
+    }
+
+    @PostMapping("/return2storage")
+    @JsonParams
+    public Msg returnProduct2(@RequestBody JSONObject jsonObject) {
+        String userId = jsonObject.getString("userId");
+        String directionCode = jsonObject.getString("directionCode");
+        String auth = getAuth();
+        auth = StringUtils.isBlank(auth) ? "NOAUTH" : auth;
+        saleOrderDetailService.returnAndStorage(directionCode,userId,auth);
+        return success();
+    }
+
+    @PostMapping("/return")
+    @JsonParams
+    public Msg returnProduct(@RequestBody JSONObject object) {
+        Msg msg = new Msg(true);
+        JSONArray directionCodes = object.getJSONArray("directionCodes");
+        StringBuilder message = new StringBuilder();
+        for (Object dire : directionCodes){
+            if (dire == null){
+                message.append("流向码:").append("为空退货失败!");
+                continue;
+            }
+            String directionCode = dire.toString();
+            if (StringUtils.isBlank(directionCode) || FireworkDeal.isNotDirectionCode(directionCode)) {
+                message.append("流向码:").append(directionCode).append("不符合规则,退货失败!");
+                continue;
+            }
+
+            UserInfo userInfo = userService.getById(getUser().getId());
+            String auth = getAuth();
+            auth = StringUtils.isBlank(auth) ? "NOAUTH" : auth;
+            StockInfo stockInfo = stockService.selectStockByDirection(directionCode);
+            if (stockInfo == null) {
+                message.append("流向码:+").append(directionCode).append("库存状态异常,退货失败!");
+                continue;
+            }
+            ProductInfo productInfo = productService.selectByDirection(directionCode.substring(0, 10));
+
+            // 创建入库单,type为2,创建入库明细,修改stock
+            EntryOrderInfo entryOrderInfo = entryService.generateEntryOrderInfo(EntryUtils.TH_ENTRY, userInfo, new Date(), "", auth);
+            EntryDetailInfo entryDetailInfo = new EntryDetailInfo(entryOrderInfo.getCode(), directionCode, productInfo.getDirectionCode(),
+                    productInfo.getName(), productInfo.getManufacturer(), new Date(),userInfo.getCompanynumber());
+            entryOrderInfo.setNum(1);
+            entryDetailInfo.setNum(1);
+
+            SaleOrderDetailInfo detailInfo = saleOrderService.selectOrderByDirectionReturnflag(directionCode,(byte) 0, null);
+            if (detailInfo == null){
+                msg = new Msg(ERROR_50001,"没有找到销售订单详情或该商品已退货");
+                break;
+            }
+            CustomerInfo customerInfo = customerService.getCustomerBySaleOrder(detailInfo.getOrdercode());
+            Byte flag = 1;
+            detailInfo.setReturnflag(flag);
+            saleOrderDetailService.updateById(detailInfo);
+
+            int i = stockService.doReturn(stockInfo,userInfo,customerInfo, new Date());
+
+            if (i != 1){
+                message.append("流向码:+").append(directionCode).append("库存更新失败!");
+            }else {
+                entryService.save(entryOrderInfo);
+                entryDetailService.save(entryDetailInfo);
+            }
+        }
+
+        if (StringUtils.isNotBlank(message)){
+            msg.setCode(ERROR_999.getCode());
+            msg.setMessage(message.toString());
+        }
+        return msg;
+    }
+
+    @PostMapping("/returnBatch")
+    @JsonParams
+    public List<Msg> returnBatch(@RequestBody JSONArray jsonArray){
+        if (jsonArray.size() < 1){
+            return null;
+        }
+        List<Msg>msgList = new ArrayList<>();
+        for (int i =0 ; i<jsonArray.size(); i++){
+            Msg msg = new Msg(true);
+            JSONObject object = jsonArray.getJSONObject(i);
+            String userId = object.getString("userId");
+            String datetime = object.getString("datetime");
+            String directionCode = object.getString("directionCode");
+            Date date;
+            DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            try {
+                date = dateFormat.parse(datetime);
+            } catch (ParseException e) {
+                msg = new Msg(ERROR_10003, "日期类型错误!");
+                msgList.add(msg);
+                continue;
+            }
+            UserInfo userInfo = userService.getById(userId);
+            String auth = getAuth();
+            auth = StringUtils.isBlank(auth) ? "NOAUTH" : auth;
+            EntryOrderInfo entryOrderInfo = entryService.generateEntryOrderInfo(EntryUtils.TH_ENTRY, userInfo, new Date(), "", auth);
+            List<ProductVo>productVos = new ArrayList<>();
+            if (StringUtils.isBlank(directionCode) || FireworkDeal.isNotDirectionCode(directionCode)) {
+                msg = new Msg(ERROR_10004,"流向码无效");
+                msgList.add(msg);
+                continue;
+            }
+            ProductVo productVo = productService.selectVoByDirection(directionCode);
+            if (FireworkDeal.is22Characters(directionCode)) {
+                DirectionDetail directionDetail = FireworkDeal.dealDirectionCode(directionCode);
+                FireworkDeal.getProductVos(directionCode,directionDetail,directionDetail,productVos,productVo);
+            }else {
+                productVos.add(productVo);
+            }
+
+            // 创建入库单,type为2,创建入库明细,修改stock
+            EntryDetailInfo entryDetailInfo = new EntryDetailInfo(entryOrderInfo.getCode(), directionCode, productVo.getDirectionCode(),
+                    productVo.getName(), productVo.getManufacturer(), new Date(),userInfo.getCompanynumber());
+            entryOrderInfo.setNum(1);
+            entryDetailInfo.setNum(1);
+
+            //先行校验是否存在不能退货的商品
+            boolean doReturnFlag = true;
+            for (ProductVo productVo1 : productVos){
+                StockInfo stockInfo = stockService.selectStockByDirection(productVo1.getDirectionCode());
+                SaleOrderDetailInfo detailInfo = saleOrderService.selectOrderByDirectionReturnflag(productVo1.getDirectionCode(),(byte) 0,datetime);
+                if (detailInfo == null || stockInfo == null){
+                    doReturnFlag = false;
+                    msg = new Msg(ERROR_50001,"没有找到销售订单详情或该商品已退货");
+                    break;
+                }
+            }
+
+            //如果不存在,进行退货操作
+            if (doReturnFlag){
+                for (ProductVo productVo1 : productVos){
+                    StockInfo stockInfo = stockService.selectStockByDirection(productVo1.getDirectionCode());
+                    SaleOrderDetailInfo detailInfo = saleOrderService.selectOrderByDirectionReturnflag(productVo1.getDirectionCode(),(byte) 0,datetime);
+                    CustomerInfo customerInfo = customerService.getCustomerBySaleOrder(detailInfo.getOrdercode());
+                    Byte flag = 1;
+                    detailInfo.setReturnflag(flag);
+                    saleOrderDetailService.updateById(detailInfo);
+
+                    int j = stockService.doReturn(stockInfo,userInfo,customerInfo, date);
+                    if (j == 0){
+                        msg = new Msg(ERROR_40001,"退货失败");
+                        break;
+                    }
+                }
+
+                entryService.save(entryOrderInfo);
+                entryDetailService.save(entryDetailInfo);
+            }
+
+            msgList.add(msg);
+        }
+        return msgList;
+    }
+
+    @PostMapping("/saleRecord1")
+    @ApiOperation(value = "实名购买查询(按流向码查询)", httpMethod = "POST")
+    @ApiImplicitParams({})
+    Object saleInquiry1(@RequestBody FilterObject jsonFilter) {
+        Integer pageIndex = jsonFilter.getPageIndex();
+        Integer pageSize = jsonFilter.getPageSize();
+        IPage page = saleOrderService.selectSaleRecord1(new Page<>(pageIndex, pageSize), jsonFilter.getFilter(),getUser());
+        return success(page);
+    }
+
+
+    @PostMapping("/saleRecord2")
+    @ApiOperation(value = "实名购买查询(按零售单位查询)", httpMethod = "POST")
+    @ApiImplicitParams({})
+    Object saleInquiry2(@RequestBody FilterObject jsonFilter) {
+        Integer pageIndex = jsonFilter.getPageIndex();
+        Integer pageSize = jsonFilter.getPageSize();
+        IPage page = saleOrderService.selectSaleRecord2(new Page<>(pageIndex, pageSize), jsonFilter.getFilter(),getUser());
+        return success(page);
+    }
+
+    @PostMapping("/saleRecord3")
+    @ApiOperation(value = "销售汇总统计", httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex",value = "当前页码",required = true),
+            @ApiImplicitParam(name = "pageSize",value = "页大小",required = true),
+            @ApiImplicitParam(name = "filter.itemcode",value = "流向码",required = true),
+            @ApiImplicitParam(name = "filter.itemname",value = "产品名称",required = true),
+            @ApiImplicitParam(name = "filter.province",value = "省",required = true),
+            @ApiImplicitParam(name = "filter.city",value = "市",required = true),
+            @ApiImplicitParam(name = "filter.district",value = "区",required = true),
+            @ApiImplicitParam(name = "filter.street",value = "街道",required = true),
+            @ApiImplicitParam(name = "filter.committee",value = "委员会",required = true),
+            @ApiImplicitParam(name = "filter.starttime",value = "开始时间",required = true),
+            @ApiImplicitParam(name = "filter.endtime",value = "结束时间",required = true),
+            @ApiImplicitParam(name = "filter.safetysupervision",value = "监管分类",required = true),
+            @ApiImplicitParam(name = "filter.enterprisename",value = "企业名称",required = true),
+            @ApiImplicitParam(name = "filter.parententerprisename",value = "上级企业名称",required = true),
+    })
+    Object saleInquiry3(@RequestBody FilterObject jsonFilter) {
+        Integer pageIndex = jsonFilter.getPageIndex();
+        Integer pageSize = jsonFilter.getPageSize();
+        PageInfoExtension<Map> page = saleOrderService.selectSaleRecord3(new Page<>(pageIndex, pageSize), jsonFilter.getFilter(),getUser());
+        return success(page);
+    }
+
+
+    @PostMapping("/export/saleRecord3")
+    @ApiOperation(value = "销售汇总统计导出", httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex",value = "当前页码",required = true),
+            @ApiImplicitParam(name = "pageSize",value = "页大小",required = true),
+            @ApiImplicitParam(name = "filter.itemcode",value = "流向码",required = true),
+            @ApiImplicitParam(name = "filter.itemname",value = "产品名称",required = true),
+            @ApiImplicitParam(name = "filter.province",value = "省",required = true),
+            @ApiImplicitParam(name = "filter.city",value = "市",required = true),
+            @ApiImplicitParam(name = "filter.district",value = "区",required = true),
+            @ApiImplicitParam(name = "filter.street",value = "街道",required = true),
+            @ApiImplicitParam(name = "filter.committee",value = "委员会",required = true),
+            @ApiImplicitParam(name = "filter.starttime",value = "开始时间",required = true),
+            @ApiImplicitParam(name = "filter.endtime",value = "结束时间",required = true),
+            @ApiImplicitParam(name = "filter.safetysupervision",value = "监管分类",required = true),
+            @ApiImplicitParam(name = "filter.enterprisename",value = "企业名称",required = true),
+            @ApiImplicitParam(name = "filter.parententerprisename",value = "上级企业名称",required = true),
+    })
+    Object exportSaleInquiry3(@RequestBody FilterObject jsonFilter) {
+        List<Map> list = saleOrderService.selectExportSaleRecord3( jsonFilter.getFilter(),getUser());
+        return success(list);
+    }
+
+    @PostMapping("/saleRecord4")
+    @ApiOperation(value = "实名销售分析导出", httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex",value = "当前页码",required = true),
+            @ApiImplicitParam(name = "pageSize",value = "页大小",required = true),
+            @ApiImplicitParam(name = "filter.starttime",value = "开始时间",required = true),
+            @ApiImplicitParam(name = "filter.endtime",value = "结束时间",required = true),
+            @ApiImplicitParam(name = "filter.enterprisename",value = "上级企业名称",required = true),
+            @ApiImplicitParam(name = "filter.parententerprisename",value = "上级企业名称",required = true),
+            @ApiImplicitParam(name = "filter.identify",value = "购买人身份证",required = true),
+            @ApiImplicitParam(name = "filter.itemcode",value = "产品流向码",required = true),
+    })
+    Object saleInquiry4(@RequestBody FilterObject jsonFilter) {
+        Integer pageIndex = jsonFilter.getPageIndex();
+        Integer pageSize = jsonFilter.getPageSize();
+        IPage page = saleOrderService.selectSaleRecord4(new Page<>(pageIndex, pageSize), jsonFilter.getFilter(),getUser());
+
+        Msg result = success(page);
+
+        String jsonStr = JSON.toJSONString(result);
+        String base64Str = Base64.getEncoder().encodeToString(jsonStr.getBytes(StandardCharsets.UTF_8));
+
+        return base64Str;
+    }
+
+    @PostMapping("/customer/upload/{idCard}")
+    @ApiOperation(value = "补全customer照片信息", httpMethod = "POST")
+    Msg customerUpload(@PathVariable String idCard, MultipartFile file) {
+        customerService.uploadPhoto(idCard, file);
+        return success();
+    }
+
+    @PostMapping("/export/saleRecord4")
+    @ApiOperation(value = "实名销售分析", httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "filter.starttime",value = "开始时间",required = true),
+            @ApiImplicitParam(name = "filter.endtime",value = "结束时间",required = true),
+            @ApiImplicitParam(name = "filter.enterprisename",value = "上级企业名称",required = true),
+            @ApiImplicitParam(name = "filter.parententerprisename",value = "上级企业名称",required = true),
+            @ApiImplicitParam(name = "filter.identify",value = "购买人身份证",required = true),
+            @ApiImplicitParam(name = "filter.itemcode",value = "产品流向码",required = true),
+    })
+    Object exportSaleInquiry4(@RequestBody FilterObject jsonFilter) {
+        List<Map> list = saleOrderService.selectExportSaleRecord4(jsonFilter.getFilter(), getUser());
+        return success(list);
+    }
+
+    /**
+    * @Description: 根据销售企业的单位编号和人员的身份证获取购买明细
+    * @date 2021/4/14 12:38
+    */
+    @PostMapping("/getPurchaseDetailInUnit")
+    @ApiOperation(value = "实名购买查询(按购买人查询)", httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex",value = "当前页码",required = true),
+            @ApiImplicitParam(name = "pageSize",value = "页大小",required = true),
+            @ApiImplicitParam(name = "filter.starttime",value = "开始时间",required = true),
+            @ApiImplicitParam(name = "filter.endtime",value = "结束时间",required = true),
+            @ApiImplicitParam(name = "filter.identify",value = "省份证",required = true),
+            @ApiImplicitParam(name = "filter.enterprisenumber",value = "企业单位编号",required = true),
+    })
+    Object getPurchaseDetailInUnit(@RequestBody FilterObject jsonFilter) {
+        Integer pageIndex = jsonFilter.getPageIndex();
+        Integer pageSize = jsonFilter.getPageSize();
+        IPage page = saleOrderService.getPurchaseDetailInUnit(new Page<>(pageIndex, pageSize), jsonFilter.getFilter(),getUser());
+        return success(page);
+    }
+
+
+
+    @GetMapping(value = {"/soldNoStock/directionCode/{directionCode}/pageIndex/{pageIndex}/pageSize/{pageSize}",
+            "/soldNoStock/pageIndex/{pageIndex}/pageSize/{pageSize}"})
+    public Msg getSoldNoStockInfo(@PathVariable Integer pageIndex,
+                                  @PathVariable Integer pageSize,
+                                  String sort, String order,
+                                  @PathVariable(required = false) String directionCode) {
+        Msg msg = new Msg(true);
+        pageIndex = pageIndex == null? 10:pageIndex;
+        pageSize = pageSize == null? 10:pageSize;
+
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize, sort, order);
+        Map<String, Object> condition = new HashMap<>(4);
+        if (StringUtils.isNotBlank(directionCode)) {
+            condition.put("directionCode", directionCode);
+        }
+        UserInfo userInfo = userService.getById(getUser().getId());
+        if (userInfo.getCompanynumber() != null){
+            condition.put("companyNumber",userInfo.getCompanynumber());
+        }
+        pageInfo.setCondition(condition);
+        soldNoStockService.selectSoldNoStockDataGrid(pageInfo);
+
+        msg.setResult(pageInfo);
+        return msg;
+    }
+
+    @GetMapping(value = "/dailySaleReport")
+    public Msg dailySaleReport(@RequestParam (value = "startDate")String startDate,
+                               @RequestParam (value = "endDate")String endDate,
+                               @RequestParam (value = "pageIndex")Integer pageIndex,
+                               @RequestParam (value = "pageSize")Integer pageSize,
+                               String sort, String order) {
+        Msg msg = new Msg(true);
+        if (StringUtils.isBlank(startDate) || StringUtils.isBlank(endDate)) {
+            msg.setCode(ERROR_10001.getCode());
+            msg.setMessage(ERROR_10001.getMsg()+":日期为空,查询失败!");
+            return msg;
+        }
+        pageIndex = pageIndex == null ? 0 : pageIndex ;
+        pageSize = pageSize == null ? 10 : pageSize ;
+
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize,sort,order);
+        Map<String, Object> condition = new HashMap<>(4);
+        UserInfo userInfo = userService.getById(getUser().getId());
+        if (StringUtils.isNotBlank(userInfo.getCompanynumber())){
+            condition.put("companynumber",userInfo.getCompanynumber());
+        }
+        condition.put("startDate",startDate);
+        condition.put("endDate",endDate);
+        pageInfo.setCondition(condition);
+        PageInfoExtension pageInfoExtension = saleOrderService.selectDailySaleReport(pageInfo);
+        msg.setResult(pageInfoExtension);
+        return msg;
+    }
+
+    @GetMapping(value = "/info")
+    public Msg getOrderInfo(@RequestParam (value = "startDate")String startDate,
+                               @RequestParam (value = "endDate")String endDate,
+                               @RequestParam (value = "code",required = false)String code,
+                               @RequestParam (value = "pageIndex")Integer pageIndex,
+                               @RequestParam (value = "pageSize")Integer pageSize,
+                               String sort, String order) {
+        Msg msg = new Msg(true);
+        if (StringUtils.isBlank(startDate) || StringUtils.isBlank(endDate)) {
+            msg.setCode(ERROR_10001.getCode());
+            msg.setMessage(ERROR_10001.getMsg()+":日期为空,查询失败!");
+            return msg;
+        }
+        pageIndex = pageIndex == null ? 0 : pageIndex ;
+        pageSize = pageSize == null ? 10 : pageSize ;
+
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize,sort,order);
+        Map<String, Object> condition = new HashMap<>(4);
+        UserInfo userInfo = userService.getById(getUser().getId());
+        if (StringUtils.isNotBlank(userInfo.getCompanynumber())){
+            condition.put("companynumber",userInfo.getCompanynumber());
+        }
+        if (StringUtils.isNotBlank(code)){
+            condition.put("code",code);
+        }
+        condition.put("startDate",startDate);
+        condition.put("endDate",endDate);
+        pageInfo.setCondition(condition);
+        saleOrderService.selectOrderDataGrid(pageInfo);
+
+        msg.setResult(pageInfo);
+        return msg;
+    }
+
+    @GetMapping("/detail")
+    public Msg getSaleDetailByCode(@RequestParam("code")String code){
+        Msg msg = new Msg(true);
+        List<SaleOrderDetailInfo>detailInfos = saleOrderDetailService.selectByOrderCode(code);
+        msg.setResult(detailInfos);
+        return msg;
+    }
+
+    @GetMapping("/serialNo")
+    public Msg getSerialNo(){
+        Msg msg = new Msg(true);
+        UserInfo userInfo = userService.getById(getUser().getId());
+        int countNum = saleOrderService.getDailySaleCount(userInfo);
+        msg.setResult(countNum);
+        return msg;
+    }
+
+
+    @ApiOperation(value = "销售汇总统计", httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex",value = "当前页码",required = true),
+            @ApiImplicitParam(name = "pageSize",value = "页大小",required = true),
+            @ApiImplicitParam(name = "filter.province",value = "省",required = true),
+            @ApiImplicitParam(name = "filter.city",value = "市",required = true),
+            @ApiImplicitParam(name = "filter.district",value = "区",required = true),
+            @ApiImplicitParam(name = "filter.street",value = "街道",required = true),
+            @ApiImplicitParam(name = "filter.committee",value = "委员会",required = true),
+            @ApiImplicitParam(name = "filter.starttime",value = "开始时间",required = true),
+            @ApiImplicitParam(name = "filter.endtime",value = "结束时间",required = true),
+            @ApiImplicitParam(name = "filter.safetysupervision",value = "监管分类",required = true),
+            @ApiImplicitParam(name = "filter.enterprisename",value = "企业名称",required = true),
+            @ApiImplicitParam(name = "filter.parententerprisename",value = "上级企业名称",required = true),
+    })
+    @PostMapping("/enterpriseESS")
+    public Msg enterpriseEnterSellStore(@RequestBody FilterObject jsonFilter){
+        Integer pageIndex = jsonFilter.getPageIndex();
+        Integer pageSize = jsonFilter.getPageSize();
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize);
+        UserInfo userInfo = userService.getById(getUser().getId());
+        saleOrderService.selectEnterpriseEnterSellStoreDataGrid(pageInfo,jsonFilter.getFilter(),userInfo);
+        return success(pageInfo);
+    }
+
+    @PostMapping("/enterpriseESSExport")
+        public Msg enterpriseEnterSellStoreExport(@RequestBody FilterObject jsonFilter){
+        UserInfo userInfo = userService.getById(getUser().getId());
+        List<EnterpriseDataVo> enterpriseDataVos =saleOrderService.selectEnterpriseEnterSellStoreData(jsonFilter.getFilter(),userInfo);
+        return success(enterpriseDataVos);
+    }
+
+    @PostMapping("/cityESS")
+    public Msg cityEnterSellStore(@RequestBody FilterObject jsonFilter){
+        Integer pageIndex = jsonFilter.getPageIndex();
+        Integer pageSize = jsonFilter.getPageSize();
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize);
+        saleOrderService.selectCityEnterSellStoreDataGrid(pageInfo,jsonFilter.getFilter());
+        return success(pageInfo);
+    }
+
+    @PostMapping("/createBatch")
+    @JsonParams
+    public List<Msg> createOrderBatch(@RequestParam String encryptStr){
+        String jsonStr = new String(Base64.getDecoder().decode(encryptStr), StandardCharsets.UTF_8);
+        JSONArray jsonArray = JSON.parseArray(jsonStr);
+
+        if (jsonArray.size() < 1){
+            return null;
+        }
+        List<Msg>msgList = new ArrayList<>();
+        for (int i = 0; i < jsonArray.size(); i++) {
+            JSONObject jsonObject = jsonArray.getJSONObject(i);
+//            Msg msg = dealOrderCreated(jsonObject);
+            Msg msg = createOrder(Base64.getEncoder().encodeToString(jsonObject.toJSONString().getBytes(StandardCharsets.UTF_8)));
+            msgList.add(msg);
+        }
+
+        return msgList;
+    }
+
+    private Msg dealOrderCreated(JSONObject jsonObject) {
+        JSONObject customer = jsonObject.getJSONObject("customer");
+        JSONObject order = jsonObject.getJSONObject("order");
+        JSONArray detailObject = jsonObject.getJSONArray("detailInfos");
+        String userId = jsonObject.getString("operator");
+        Integer num = order.getInteger("boxNum");
+        String total = order.getString("total");
+        String pay = order.getString("pay");
+        String change = order.getString("change");
+        String type = jsonObject.getString("type");
+        String time = jsonObject.getString("datetime");
+        Date salesTime;
+        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        try {
+            salesTime = dateFormat.parse(time);
+        } catch (ParseException e) {
+            return new Msg(ERROR_10003,"出库日期类型错误");
+        }
+
+        if (customer == null || detailObject == null || detailObject.isEmpty()) {
+            return new Msg(ERROR_10001);
+        }
+
+        boolean isUser = userService.checkUserById(userId);
+        if (!isUser) {
+            return new Msg(ERROR_20001);
+        }
+        UserInfo userInfo = userService.getById(userId);
+
+        List<SaleOrderDetailInfo> detailInfoList = new ArrayList<>();
+        for (int j = 0; j < detailObject.size(); j++) {
+            // 遍历 jsonArray 数组,把每一个对象转成 json 对象
+            JSONObject object = detailObject.getJSONObject(j);
+            String directionCodeStr = object.getString("directionCode");
+            if (FireworkDeal.isNotDirectionCode(directionCodeStr)) {
+                return new Msg(ERROR_10004,"流向码:"+directionCodeStr+"错误");
+            }
+
+            if (!productService.hasProductByDire(directionCodeStr.substring(0, 10))) {
+                return new Msg(ERROR_10004,"流向码:"+directionCodeStr+"错误");
+            }
+            ProductInfo productInfo = productService.selectByDirection(directionCodeStr.substring(0, 10));
+            if (FireworkDeal.is22Characters(directionCodeStr)){
+                List<ProductVo>productVoList = new ArrayList<>();
+                DirectionDetail directionDetail = FireworkDeal.dealDirectionCode(directionCodeStr);
+                ProductVo productVo = productService.selectVoByDirection(directionCodeStr);
+                FireworkDeal.getProductVos(directionCodeStr,directionDetail,directionDetail,productVoList,productVo);
+                for (ProductVo productVo1 : productVoList){
+                    SaleOrderDetailInfo detailInfo = new SaleOrderDetailInfo(productInfo.getDirectionCode(), productVo1.getDirectionCode());
+                    ProductPriceInfo productPriceInfo = productPriceService.selectByCode(userInfo.getCompanynumber(), productVo1.getName());
+                    BigDecimal price = productPriceInfo == null ? new BigDecimal("0") : productPriceInfo.getPrice() == null ? BigDecimal.valueOf(0) : productPriceInfo.getPrice();
+                    detailInfo.setPrice(price);
+                    detailInfo.setItemname(productVo1.getName());
+                    detailInfo.setSpecification(productVo1.getSpecification());
+                    detailInfoList.add(detailInfo);
+                }
+                num = productVoList.size();
+            }else {
+                SaleOrderDetailInfo detailInfo = new SaleOrderDetailInfo(productInfo.getDirectionCode(), directionCodeStr);
+                ProductPriceInfo productPriceInfo = productPriceService.selectByCode(userInfo.getCompanynumber(), productInfo.getName());
+                BigDecimal price = productPriceInfo == null ? new BigDecimal("0") : productPriceInfo.getPrice() == null ? BigDecimal.valueOf(0) : productPriceInfo.getPrice();
+                detailInfo.setPrice(price);
+                detailInfo.setItemname(productInfo.getName());
+                detailInfo.setSpecification(productInfo.getSpecification());
+                detailInfoList.add(detailInfo);
+                num = 1;
+            }
+        }
+
+        String idCardNum = customer.getString("idCardNumber");
+        String workerName = customer.getString("workerName");
+        if (StringUtils.isBlank(idCardNum) || StringUtils.isBlank(workerName)) {
+            return new Msg(ERROR_50001,"身份信息有误");
+        }
+
+        String auth = getAuth();
+        auth = StringUtils.isBlank(auth) ? "NOAUTH" : auth;
+        idCardNum = idCardNum.replaceAll("[\r\n]","").trim();
+
+        //校验数据是否已上传
+        CustomerInfo customerExist = customerService.getCustomerByIdCardNum(idCardNum);
+        if (customerExist != null){
+            SaleOrderInfo orderInfo = saleOrderService.isExist(customerExist.getId(),userInfo.getCompanynumber(),salesTime);
+            if (orderInfo != null){
+                return new Msg(SUCCESS,"数据已上传");
+            }
+        }
+//        return saleOrderService.doSalesProcess(customer, num, idCardNum, userInfo, detailInfoList, type, salesTime, pay, total, change, auth);
+        return null;
+    }
+
+
+    /**
+     * @Description: 销售查询
+     * @date 2021/11/10 9:32
+     */
+    @PostMapping("/salenum-query")
+    @ApiOperation(value = "销售查询")
+    Object getSaleNumInfo(@RequestBody FilterObject filter) {
+        Integer pageIndex = filter.getPageIndex();
+        Integer pageSize = filter.getPageSize();
+        IPage page = saleOrderDetailService.selectSaleNumInfo(new Page<>(pageIndex, pageSize), filter.getFilter(), getUser());
+        return success(page);
+    }
+
+
+    @PostMapping("/salenum-detail")
+    @ApiOperation(value = "销售详情")
+    Object getSaleNumInfoDetail(@RequestBody FilterObject filter) {
+        Integer pageIndex = filter.getPageIndex();
+        Integer pageSize = filter.getPageSize();
+        IPage page = saleOrderDetailService.selectSaleNumInfoDetail(new Page<>(pageIndex, pageSize), filter.getFilter(), getUser());
+        return success(page);
+    }
+
+
+    @GetMapping("/idcard-check")
+    @ApiOperation(value = "身份证校验")
+    Msg idcardCheck(@RequestParam String idcard) {
+        boolean flag = IdCardUtil.strongVerifyIdNumber(idcard);
+        return success(flag);
+    }
+
+    @PostMapping("/importSaleProduct")
+    @ApiOperation(value = "导入销售流向码",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "file",value = "文件",required = true),
+    })
+    public Msg importSaleProduct(MultipartFile file){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+
+        String filesave ="";
+        try {
+            SimpleDateFormat sdf = new SimpleDateFormat( "yyyyMMddHHmmssSSS" );
+            if (file == null)
+            {
+                msg.setCode("404");
+                msg.setMessage("未找到上传文件");
+                return msg;
+            }
+
+            long size = file.getSize();
+            if(0 == size)
+            {
+                msg.setCode("404");
+                msg.setMessage("上传文件大小为空");
+                return msg;
+            }
+
+            if(!FileOptUtils.isDirExists(productPath)){
+                msg.setCode("500");
+                msg.setMessage("发生错误或不为目录");
+                return msg;
+            }
+
+            filesave = productPath + getUser().getUsername() + "_" + sdf.format(new Date()) +".xlsx";
+
+            file.transferTo(new File(filesave));
+            InputStream in = new FileInputStream(filesave);
+            String name = file.getOriginalFilename();
+            Boolean isExcel2007 = name.substring(name.lastIndexOf(".") + 1).endsWith("xlsx")? true:false;
+            BooleanReason blret = excelExportService.imporSaleProductExcel(in,getUser().getUsername(),isExcel2007);
+            if(blret.getValue().equals(false))
+            {
+                msg.setCode("500");
+                msg.setMessage(blret.getResultmsg());
+                return msg;
+            }else {
+                msg.setMessage(blret.getResultmsg());
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            msg.setCode("500");
+            msg.setMessage("导入发生错误");
+            return msg;
+        }
+
+        return msg;
+    }
+
+
+    @PostMapping("/importSaleOrder")
+    @ApiOperation(value = "导入实名销售",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "file",value = "文件",required = true),
+    })
+    public Msg importSaleOrder(MultipartFile file){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+
+        String filesave ="";
+        try {
+            SimpleDateFormat sdf = new SimpleDateFormat( "yyyyMMddHHmmssSSS" );
+            if (file == null)
+            {
+                msg.setCode("404");
+                msg.setMessage("未找到上传文件");
+                return msg;
+            }
+
+            long size = file.getSize();
+            if(0 == size)
+            {
+                msg.setCode("404");
+                msg.setMessage("上传文件大小为空");
+                return msg;
+            }
+
+            if(!FileOptUtils.isDirExists(productPath)){
+                msg.setCode("500");
+                msg.setMessage("发生错误或不为目录");
+                return msg;
+            }
+
+            filesave = productPath + getUser().getUsername() + "_" + sdf.format(new Date()) +".xlsx";
+
+            file.transferTo(new File(filesave));
+            InputStream in = new FileInputStream(filesave);
+            String name = file.getOriginalFilename();
+            Boolean isExcel2007 = name.substring(name.lastIndexOf(".") + 1).endsWith("xlsx")? true:false;
+            BooleanReason blret = excelExportService.imporSaleOrderExcel(in,getUser().getUsername(),isExcel2007);
+            if(blret.getValue().equals(false))
+            {
+                msg.setCode("500");
+                msg.setMessage(blret.getResultmsg());
+                return msg;
+            }else {
+                msg.setMessage(blret.getResultmsg());
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            msg.setCode("500");
+            msg.setMessage("导入发生错误");
+            return msg;
+        }
+
+        return msg;
+    }
+}

--
Gitblit v1.9.2