郑永安
2023-06-19 2fcd97552d16718cc7997629fd637a73a5a4483f
src/main/java/com/gk/firework/Service/ServiceImpl/SaleOrderServiceImpl.java
对比新文件
@@ -0,0 +1,801 @@
package com.gk.firework.Service.ServiceImpl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gk.firework.Domain.*;
import com.gk.firework.Domain.BO.SaleOrderDetailInfoBO;
import com.gk.firework.Domain.Enum.ErrorCode;
import com.gk.firework.Domain.Exception.BusinessException;
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.Mapper.SaleOrderDetailInfoMapper;
import com.gk.firework.Mapper.SaleOrderInfoMapper;
import com.gk.firework.Mapper.UserInfoMapper;
import com.gk.firework.Service.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
import static com.gk.firework.Domain.Vo.EntryUtils.RK_ENTRY;
import static com.gk.firework.Domain.Vo.EntryUtils.TH_ENTRY;
/**
 * @author : jingjy
 * @date : 2021/3/30 17:30
 */
@Service("SaleOrderService")
public class SaleOrderServiceImpl extends ServiceImpl<SaleOrderInfoMapper, SaleOrderInfo> implements SaleOrderService {
    @Autowired
    private UserInfoMapper userInfoMapper;
    @Autowired
    private SaleOrderInfoMapper saleOrderInfoMapper;
    @Autowired
    private SaleOrderService saleOrderService;
    @Autowired
    private SaleOrderDetailService saleOrderDetailService;
    @Autowired
    private CustomerService customerService;
    @Autowired
    private StockService stockService;
    @Autowired
    private SaleOrderDetailInfoMapper saleOrderDetailInfoMapper;
    @Autowired
    private ProductService productService;
    @Autowired
    private UserService userService;
    @Autowired
    private EnterpriseService enterpriseService;
    @Autowired
    private EntryService entryService;
    @Autowired
    private DistrictService districtService;
    @Autowired
    private DeliveryDetailService deliveryDetailService;
    @Value("${hostId}")
    private String hostId;
    private static final String RETAIL_ORDER = "1";
    private static final String GROUP_ORDER = "2";
    private static final String NORMAL_DELIVERY = "1";
    public static final String OTHER_DELIVERY = "2";
    static final String MODULE_ENTRY = "入库";
    public static final String MODULE_DELIVERY = "出库";
    private static final String MODULE_SALE = "销售";
    @Override
    public SaleOrderInfo createOrder(UserInfo userInfo, List<SaleOrderDetailInfoBO> detailInfoList, String type, Integer num,
                                     Date salesTime, Long customerId, String pay, String total, String change, String auth) {
        //TODO:添加订单信息及订单详情信息
        SaleOrderInfo orderInfo = new SaleOrderInfo();
        orderInfo.setCode(generateOrderCode(MODULE_SALE,type,new Date(),userInfo.getId()));
        orderInfo.setType(Byte.parseByte(type));
        orderInfo.setCreatedat(salesTime);
        orderInfo.setCreatedby(userInfo.getUsername());
        orderInfo.setBoxnum(new BigDecimal(num));
        orderInfo.setPay(new BigDecimal(pay));
        orderInfo.setChange(new BigDecimal(change));
        orderInfo.setSalesperson(userInfo.getUsername());
        orderInfo.setTotalprice(new BigDecimal(total));
        orderInfo.setShop(userInfo.getCompany());
        orderInfo.setCompanynumber(userInfo.getCompanynumber());
        orderInfo.setCustomer(customerId);
        for (SaleOrderDetailInfo detailInfo : detailInfoList){
            detailInfo.setOrdercode(orderInfo.getCode());
            detailInfo.setCreatedat(salesTime);
            detailInfo.setCreatedby(userInfo.getUsername());
        }
        saleOrderService.save(orderInfo);
        saleOrderDetailService.saveBatchOrderDetailInfo(detailInfoList.stream().map(item -> (SaleOrderDetailInfo) item).collect(Collectors.toList()));
        return orderInfo;
    }
    @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED)
    @Override
    public Msg doSalesProcess(JSONObject customer, Integer num, String idCardNum, UserInfo userInfo,
                              List<SaleOrderDetailInfoBO> detailInfoList, String type, Date salesTime,
                              String pay, String total, String change, String auth)  {
        Msg msg = new Msg();
        msg.setCode("200");
        CustomerInfo customerInfo;
        // 身份证表 存入和更新
        try {
            customerInfo = customerService.createOrUpdate(customer, num, salesTime);
        } catch (ParseException e) {
            throw new BusinessException("时间解析错误");
        }
//        CustomerInfo customerInfo = customerService.getCustomerByIdCardNum(idCardNum);
        //扣库存
        Msg result = stockService.changeStockBySale(customerInfo,detailInfoList,userInfo,salesTime);
        if (!result.getCode().equals(ErrorCode.SUCCESS.getCode())){
            msg = result;
        }else {
            //订单及详情生成
            SaleOrderInfo saleOrderInfo = saleOrderService.createOrder(userInfo,detailInfoList,type,num,salesTime,customerInfo.getId(),pay,total,change, auth);
            msg.setResult(saleOrderInfo);
        }
        return msg;
    }
    @Override
    public List<SaleOrderDetailInfo> selectDetailByIdCardNum(String idCardNum, String directionCode) {
        return saleOrderDetailInfoMapper.selectDetailByIdCardNumAndDire(idCardNum,directionCode);
    }
    @Override
    public SaleOrderDetailInfo selectOrderByDirectionAndCustomer(String directionCode, CustomerInfo customerInfo) {
        return saleOrderDetailInfoMapper.selectOrderByDirectionAndCustomer(directionCode, customerInfo.getId());
    }
    @Override
    public void selectReturnDataGrid(PageInfo pageInfo) {
        Page<SaleOrderDetailInfo> page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize());
        List<OrderItem> orderItems = new ArrayList<>();
        OrderItem orderItem = new OrderItem();
        if (StringUtils.isNotBlank(pageInfo.getSort()) && StringUtils.isNotBlank(pageInfo.getOrder())) {
            orderItem.setAsc(pageInfo.getOrder().equalsIgnoreCase("ascending"));
            orderItem.setColumn(pageInfo.getSort());
        }else {
            orderItem.setAsc(false);
            orderItem.setColumn("createdat");
        }
        orderItems.add(orderItem);
        page.setOrders(orderItems);
        if (StringUtils.isBlank(pageInfo.getSort())){
            pageInfo.setSort("createdat");
        }
        if (StringUtils.isBlank(pageInfo.getOrder())){
            pageInfo.setOrder("desc");
        }
        List<SaleOrderDetailInfo> detailInfos = saleOrderDetailInfoMapper.selectDetailDataGridByIdCardNum(pageInfo.getCondition(),page);
        pageInfo.setResult(detailInfos);
        pageInfo.setTotalCount(page.getTotal());
    }
    /**
    * @Description: 按零售单位查询
    * @date 2021/4/12 16:35
    */
    @Override
    public IPage selectSaleRecord2(Page<Map> page, Map filter, UserInfo user) {
        Map<String, Object> params = new HashMap<>();
        UserInfo userInfo = userService.getById(user.getId());
        //过滤条件
        //权限
        {
            params.put("enterprisenumber", userInfo.getCompanynumber());
            params.put("province", user.getProvince());
            params.put("city", user.getCity());
            params.put("district", user.getArea());
            params.put("street", user.getTown());
            params.put("committee", user.getCommunity());
        }
        //基本
        params.put("filterProvince", filter.get("province"));
        params.put("filterCity", filter.get("city"));
        params.put("filterDistrict", filter.get("district"));
        params.put("filterStreet", filter.get("street"));
        params.put("filterCommittee", filter.get("committee"));
        params.put("starttime", filter.get("starttime"));
        params.put("endtime", filter.get("endtime"));
        params.put("safetysupervision", filter.get("safetysupervision"));
        params.put("enterprisename", filter.get("enterprisename"));
        params.put("parententerprisename", filter.get("parententerprisename"));
        List<Map> list = saleOrderInfoMapper.selectSaleRecord2(page, params);
        return page.setRecords(list);
    }
    /**
    * @Description: 按产品查询,没有权限,显示所有产品
    * @date 2021/4/13 8:54
    */
    @Override
    public PageInfoExtension<Map> selectSaleRecord3(Page<Map> page, Map filter, UserInfo user) {
        Map<String, Object> params = new HashMap<>();
        UserInfo userInfo = userService.getById(user.getId());
        //权限
        {
            params.put("enterprisenumber", userInfo.getCompanynumber());
            params.put("province", user.getProvince());
            params.put("city", user.getCity());
            params.put("district", user.getArea());
            params.put("street", user.getTown());
            params.put("committee", user.getCommunity());
        }
        //过滤条件
        //产品流向码,产品名称
        params.put("itemcode", filter.get("itemcode"));
        params.put("itemname", filter.get("itemname"));
        params.put("filterProvince", filter.get("province"));
        params.put("filterCity", filter.get("city"));
        params.put("filterDistrict", filter.get("district"));
        params.put("filterStreet", filter.get("street"));
        params.put("filterCommittee", filter.get("committee"));
        params.put("starttime", filter.get("starttime"));
        params.put("endtime", filter.get("endtime"));
        params.put("safetysupervision", filter.get("safetysupervision"));
        params.put("enterprisename", filter.get("enterprisename"));
        params.put("parententerprisename", filter.get("parententerprisename"));
        List<Map> list = saleOrderInfoMapper.selectSaleRecord3(page, params);
        //统计该查询条件下所有产品销售的总箱数
        Map sales = saleOrderInfoMapper.selectProductSales(params);
        PageInfoExtension<Map> extension = new PageInfoExtension<>();
        extension.setExtension(sales);
        extension.setPageSize((int) page.getSize());
        extension.setPageIndex((int) page.getCurrent());
        extension.setResult(list);
        extension.setTotalCount(page.getTotal());
        return extension;
    }
    /**
    * @Description: 按购买人查询
    * @date 2021/4/13 9:07
    */
    @Override
    public IPage selectSaleRecord4(Page<Map> page, Map filter, UserInfo user) {
        Map<String, Object> params = new HashMap<>();
        UserInfo userInfo = userService.getById(user.getId());
        //过滤条件
        //权限
        {
            params.put("enterprisenumber", userInfo.getCompanynumber());
            if (StringUtils.isNotBlank(userInfo.getCompanynumber())) {
                List<Enterprise> subs = enterpriseService.selectSubEnterprise(userInfo.getCompanyid());
                List<String> subList = subs.stream().map(Enterprise::getEnterprisenumber).collect(Collectors.toList());
                if (subList.size() > 0)
                    params.put("subList", subList);
            }
            params.put("province", user.getProvince());
            params.put("city", user.getCity());
            params.put("district", user.getArea());
            params.put("street", user.getTown());
            params.put("committee", user.getCommunity());
        }
        //基本
        params.put("directioncode", filter.get("directioncode"));
        params.put("identify", filter.get("identify"));
        params.put("starttime", filter.get("starttime"));
        params.put("endtime", filter.get("endtime"));
        params.put("enterprisename", filter.get("enterprisename"));
        params.put("parententerprisename", filter.get("parententerprisename"));
        params.put("isNeedUploadPhoto", filter.get("isNeedUploadPhoto"));
        params.put("nation", filter.get("nation"));
        //省市区
        params.put("filterProvince", filter.get("province"));
        params.put("filterCity", filter.get("city"));
        params.put("filterDistrict", filter.get("district"));
        params.put("filterStreet", filter.get("street"));
        params.put("filterCommittee", filter.get("committee"));
        List<Map> list = saleOrderInfoMapper.selectSaleRecord4(page, params);
        Map<String, Object> totalRow = new HashMap<>();
        //购买总人数
        totalRow.put("city", "合计");
        totalRow.put("enterprisename", "购买总人数");
        Integer i = saleOrderInfoMapper.selectSaleAllPerson(params);
        totalRow.put("name", i);
        //购买总数
        totalRow.put("identify", "购买总挂数");
        Integer j = saleOrderInfoMapper.selectAllSaleNum(params);
        totalRow.put("num", j);
        //退货数量
        Integer m = saleOrderInfoMapper.selectAllReturnNum(params);
        totalRow.put("returnnum", m);
        ArrayList<Map> res = new ArrayList<>(list);
        res.add(totalRow);
        return page.setRecords(res);
    }
    /**
    * @Description: 根据销售企业的单位编号和人员的身份证获取购买明细
    * @date 2021/4/14 12:43
    */
    @Override
    public IPage getPurchaseDetailInUnit(Page<SaleOrderDetailInfo> page, Map filter, UserInfo user) {
        String enterprisenumber = (String) filter.get("enterprisenumber");
        String identify = (String) filter.get("identify");
        if (StringUtils.isBlank(enterprisenumber) || StringUtils.isBlank(identify)) {
            throw new BusinessException("企业单位编号和身份证不能为空");
        }
        Map<String, Object> params = new HashMap<>();
        params.put("enterprisenumber", enterprisenumber);
        params.put("identify", identify);
        params.put("directioncode", filter.get("directioncode"));
        params.put("starttime", filter.get("starttime"));
        params.put("endtime", filter.get("endtime"));
        List<SaleOrderDetailInfo> list = saleOrderInfoMapper.getPurchaseDetailInUnit(page, params);
        return page.setRecords(list);
    }
    @Override
    public List<SaleOrderInfo> selectEarlyWarn(String starttime, String endttime, Integer min, Integer max) {
        return saleOrderInfoMapper.selectEarlyWarn(starttime, endttime, min, max);
    }
    @Override
    public List<SaleOrderInfo> selectAlarm(String starttime, String endttime, Integer max) {
        return saleOrderInfoMapper.selectAlarm(starttime, endttime, max);
    }
    @Override
    public Long selectByCustomer(Long customid) {
        return saleOrderInfoMapper.selectByCustomer(customid);
    }
    @Override
    public BigDecimal getSaleNumByCondition(Map<String, Object> condition) {
        return saleOrderDetailInfoMapper.getSaleNumByCondition(condition);
    }
    /**
    * @Description: 销售汇总导出
    * @date 2021/4/19 17:33
    */
    @Override
    public List<Map> selectExportSaleRecord3(Map filter, UserInfo user) {
        Map<String, Object> params = new HashMap<>();
        UserInfo userInfo = userService.getById(user);
        //权限
        {
            params.put("enterprisenumber", userInfo.getCompanynumber());
            params.put("province", user.getProvince());
            params.put("city", user.getCity());
            params.put("district", user.getArea());
            params.put("street", user.getTown());
            params.put("committee", user.getCommunity());
        }
        //过滤条件
        //产品流向码,产品名称
        params.put("itemcode", filter.get("itemcode"));
        params.put("itemname", filter.get("itemname"));
        params.put("filterProvince", filter.get("province"));
        params.put("filterCity", filter.get("city"));
        params.put("filterDistrict", filter.get("district"));
        params.put("filterStreet", filter.get("street"));
        params.put("filterCommittee", filter.get("committee"));
        params.put("starttime", filter.get("starttime"));
        params.put("endtime", filter.get("endtime"));
        params.put("safetysupervision", filter.get("safetysupervision"));
        params.put("enterprisename", filter.get("enterprisename"));
        params.put("parententerprisename", filter.get("parententerprisename"));
        return saleOrderInfoMapper.selectSaleRecord3(params);
    }
    /**
    * @Description: 实名销售导出
    * @date 2021/4/19 17:40
    */
    @Override
    public List<Map> selectExportSaleRecord4(Map filter, UserInfo user) {
        Map<String, Object> params = new HashMap<>();
        UserInfo userInfo = userService.getById(user.getId());
        //过滤条件
        //权限
        {
            params.put("enterprisenumber", userInfo.getCompanynumber());
            if (StringUtils.isNotBlank(userInfo.getCompanynumber())) {
                List<Enterprise> subs = enterpriseService.selectSubEnterprise(userInfo.getCompanyid());
                List<String> subList = subs.stream().map(Enterprise::getEnterprisenumber).collect(Collectors.toList());
                if (subList.size() > 0)
                    params.put("subList", subList);
            }
            params.put("province", user.getProvince());
            params.put("city", user.getCity());
            params.put("district", user.getArea());
            params.put("street", user.getTown());
            params.put("committee", user.getCommunity());
        }
        //基本
        params.put("directioncode", filter.get("directioncode"));
        params.put("identify", filter.get("identify"));
        params.put("starttime", filter.get("starttime"));
        params.put("endtime", filter.get("endtime"));
        params.put("enterprisename", filter.get("enterprisename"));
        params.put("parententerprisename", filter.get("parententerprisename"));
        params.put("nation", filter.get("nation"));
        //省市区
        params.put("filterProvince", filter.get("province"));
        params.put("filterCity", filter.get("city"));
        params.put("filterDistrict", filter.get("district"));
        params.put("filterStreet", filter.get("street"));
        params.put("filterCommittee", filter.get("committee"));
        List<Map> list = saleOrderInfoMapper.selectSaleRecord4(params);
        Map<String, Object> totalRow = new HashMap<>();
        //购买总人数
        totalRow.put("city", "合计");
        totalRow.put("enterprisename", "购买总人数");
        Integer i = saleOrderInfoMapper.selectSaleAllPerson(params);
        totalRow.put("name", i);
        //购买总数
        totalRow.put("identify", "购买总挂数");
        Integer j = saleOrderInfoMapper.selectAllSaleNum(params);
        totalRow.put("num", j);
        //退货数量
        Integer m = saleOrderInfoMapper.selectAllReturnNum(params);
        totalRow.put("returnnum", m);
        ArrayList<Map> res = new ArrayList<>(list);
        res.add(totalRow);
        return res;
    }
    @Override
    public PageInfoExtension<List> selectDailySaleReport(PageInfo pageInfo) {
        Page<DailySaleReport> page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize());
        List<OrderItem> orderItems = new ArrayList<>();
        OrderItem orderItem = new OrderItem();
        if (StringUtils.isNotBlank(pageInfo.getSort()) && StringUtils.isNotBlank(pageInfo.getOrder())) {
            orderItem.setAsc(pageInfo.getOrder().equalsIgnoreCase("ascending"));
            orderItem.setColumn(pageInfo.getSort());
        }else {
            orderItem.setAsc(false);
            orderItem.setColumn("createdat");
        }
        orderItems.add(orderItem);
        page.setOrders(orderItems);
        if (StringUtils.isBlank(pageInfo.getSort())){
            pageInfo.setSort("createdat");
        }
        if (StringUtils.isBlank(pageInfo.getOrder())){
            pageInfo.setOrder("desc");
        }
        List<DailySaleReport> reports = saleOrderInfoMapper.selectDailySaleReport(pageInfo.getCondition(),page);
        pageInfo.setResult(reports);
        pageInfo.setTotalCount(page.getTotal());
        List<Map> list = saleOrderInfoMapper.selectAllDailySaleReport(pageInfo.getCondition());
        PageInfoExtension<List> extension = new PageInfoExtension<>(pageInfo);
        extension.setExtension(list);
        return extension;
    }
    @Override
    public void selectOrderDataGrid(PageInfo pageInfo) {
        Page<SaleOrderInfo> page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize());
        List<OrderItem> orderItems = new ArrayList<>();
        OrderItem orderItem = new OrderItem();
        if (StringUtils.isNotBlank(pageInfo.getSort()) && StringUtils.isNotBlank(pageInfo.getOrder())) {
            orderItem.setAsc(pageInfo.getOrder().equalsIgnoreCase("ascending"));
            orderItem.setColumn(pageInfo.getSort());
        }else {
            orderItem.setAsc(false);
            orderItem.setColumn("createdat");
        }
        orderItems.add(orderItem);
        page.setOrders(orderItems);
        if (StringUtils.isBlank(pageInfo.getSort())){
            pageInfo.setSort("createdat");
        }
        if (StringUtils.isBlank(pageInfo.getOrder())){
            pageInfo.setOrder("desc");
        }
        List<SaleOrderInfo> orderInfos = saleOrderInfoMapper.selectDataGrid(pageInfo.getCondition(),page);
        if (orderInfos.size() > 0) {
            for (SaleOrderInfo info : orderInfos) {
                info.setDetails(saleOrderInfoMapper.selectDetails(info.getCode()));
            }
        }
        pageInfo.setResult(orderInfos);
        pageInfo.setTotalCount(page.getTotal());
    }
    @Override
    public int getDailySaleCount(UserInfo userInfo) {
        LambdaQueryWrapper<SaleOrderInfo>wrapper = new LambdaQueryWrapper<>();
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        Date start = calendar.getTime();
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        calendar.set(Calendar.MINUTE, 59);
        calendar.set(Calendar.SECOND, 59);
        Date end = calendar.getTime();
        wrapper.ge(SaleOrderInfo::getCreatedat,start);
        wrapper.le(SaleOrderInfo::getCreatedat,end);
        wrapper.eq(SaleOrderInfo::getCompanynumber,userInfo.getCompanynumber());
        return saleOrderInfoMapper.selectCount(wrapper);
    }
    @Override
    public void selectEnterpriseEnterSellStoreDataGrid(PageInfo pageInfo, Map<String, Object> filter, UserInfo userInfo) {
        Page<Enterprise> page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize());
        Map<String, Object> params = new HashMap<>();
        //过滤条件
        params.put("filterProvince", filter.get("province"));
        params.put("filterCity", filter.get("city"));
        params.put("filterDistrict", filter.get("district"));
        params.put("filterStreet", filter.get("street"));
        params.put("filterCommittee", filter.get("committee"));
        params.put("starttime", filter.get("starttime"));
        params.put("endtime", filter.get("endtime"));
        params.put("safetysupervision", filter.get("safetysupervision"));
        params.put("enterprisename", filter.get("enterprisename"));
        params.put("parententerprisename", filter.get("parententerprisename"));
        if (userInfo != null && userInfo.getCompanynumber() != null){
            params.put("enterprisenumber", userInfo.getCompanynumber());
            List<Enterprise> subs = enterpriseService.selectSubEnterprise(userInfo.getCompanyid());
            List<String> subList = subs.stream().map(Enterprise::getEnterprisenumber).collect(Collectors.toList());
            if (subList.size() > 0)
                params.put("subList", subList);
        }
        List<OrderItem> orderItems = new ArrayList<>();
        OrderItem orderItem = new OrderItem();
        if (StringUtils.isNotBlank(pageInfo.getSort()) && StringUtils.isNotBlank(pageInfo.getOrder())) {
            orderItem.setAsc(pageInfo.getOrder().equalsIgnoreCase("ascending"));
            orderItem.setColumn(pageInfo.getSort());
        }else {
            orderItem.setAsc(false);
            orderItem.setColumn("id");
        }
        orderItems.add(orderItem);
        page.setOrders(orderItems);
        if (StringUtils.isBlank(pageInfo.getSort())){
            pageInfo.setSort("id");
        }
        if (StringUtils.isBlank(pageInfo.getOrder())){
            pageInfo.setOrder("asc");
        }
        List<Enterprise> enterprises = enterpriseService.selectSaleEnterprise(params,page);
        List<EnterpriseDataVo> enterpriseDataVos = new ArrayList<>();
        for (Enterprise enterprise : enterprises){
            BigDecimal saleNumber = saleOrderInfoMapper.selectEnterpriseSaleNumber(enterprise.getEnterprisenumber(),filter.get("starttime"),filter.get("endtime"));
            BigDecimal entryNumber = entryService.selectEnterpriseEntryNumber(enterprise.getEnterprisenumber(),filter.get("starttime"),filter.get("endtime"));
            BigDecimal deliveryNumber = deliveryDetailService.selectEnterpriseDeliveryNumber(enterprise.getEnterprisenumber(), filter.get("starttime"), filter.get("endtime"));
            EnterpriseDataVo enterpriseDataVo = new EnterpriseDataVo(enterprise.getEnterprisename(),saleNumber,entryNumber);
            enterpriseDataVo.setDeliveryNumber(deliveryNumber);
            enterpriseDataVos.add(enterpriseDataVo);
        }
        pageInfo.setResult(enterpriseDataVos);
        pageInfo.setTotalCount(page.getTotal());
    }
    @Override
    public List<EnterpriseDataVo> selectEnterpriseEnterSellStoreData(Map<String, Object> filter,UserInfo userInfo) {
        Map<String, Object> params = new HashMap<>();
        //过滤条件
        params.put("filterProvince", filter.get("province"));
        params.put("filterCity", filter.get("city"));
        params.put("filterDistrict", filter.get("district"));
        params.put("filterStreet", filter.get("street"));
        params.put("filterCommittee", filter.get("committee"));
        params.put("starttime", filter.get("starttime"));
        params.put("endtime", filter.get("endtime"));
        params.put("safetysupervision", filter.get("safetysupervision"));
        params.put("enterprisename", filter.get("enterprisename"));
        params.put("parententerprisename", filter.get("parententerprisename"));
        if (userInfo != null && userInfo.getCompanynumber() != null){
            params.put("enterprisename", userInfo.getCompany());
        }
        List<Enterprise> enterprises = enterpriseService.selectSaleEnterprise(params);
        List<EnterpriseDataVo> enterpriseDataVos = new ArrayList<>();
        for (Enterprise enterprise : enterprises){
            BigDecimal saleNumber = saleOrderInfoMapper.selectEnterpriseSaleNumber(enterprise.getEnterprisenumber(),filter.get("starttime"),filter.get("endtime"));
            BigDecimal entryNumber = entryService.selectEnterpriseEntryNumber(enterprise.getEnterprisenumber(),filter.get("starttime"),filter.get("endtime"));
            BigDecimal deliveryNumber = deliveryDetailService.selectEnterpriseDeliveryNumber(enterprise.getEnterprisenumber(), filter.get("starttime"), filter.get("endtime"));
            EnterpriseDataVo enterpriseDataVo = new EnterpriseDataVo(enterprise.getEnterprisename(),saleNumber,entryNumber);
            enterpriseDataVo.setDeliveryNumber(deliveryNumber);
            enterpriseDataVos.add(enterpriseDataVo);
        }
        return enterpriseDataVos;
    }
    @Override
    public SaleOrderDetailInfo selectOrderByDirectionReturnflag(String directionCode, byte returnflag, String datetime) {
        return saleOrderDetailInfoMapper.selectOrderByDirectionReturnflag(directionCode,returnflag,datetime);
    }
    @Override
    public void selectCityEnterSellStoreDataGrid(PageInfo pageInfo, Map<String, Object> filter) {
        Page<Enterprise> page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize());
        Map<String, Object> params = new HashMap<>();
        //过滤条件
        params.put("filterProvince", filter.get("province"));
        params.put("filterCity", filter.get("city"));
        params.put("filterDistrict", filter.get("district"));
        params.put("filterStreet", filter.get("street"));
        params.put("filterCommittee", filter.get("committee"));
        params.put("starttime", filter.get("starttime"));
        params.put("endtime", filter.get("endtime"));
        params.put("safetysupervision", filter.get("safetysupervision"));
        params.put("enterprisename", filter.get("enterprisename"));
        params.put("parententerprisename", filter.get("parententerprisename"));
        List<OrderItem> orderItems = new ArrayList<>();
        OrderItem orderItem = new OrderItem();
        if (StringUtils.isNotBlank(pageInfo.getSort()) && StringUtils.isNotBlank(pageInfo.getOrder())) {
            orderItem.setAsc(pageInfo.getOrder().equalsIgnoreCase("ascending"));
            orderItem.setColumn(pageInfo.getSort());
        }else {
            orderItem.setAsc(false);
            orderItem.setColumn("id");
        }
        orderItems.add(orderItem);
        page.setOrders(orderItems);
        if (StringUtils.isBlank(pageInfo.getSort())){
            pageInfo.setSort("id");
        }
        if (StringUtils.isBlank(pageInfo.getOrder())){
            pageInfo.setOrder("asc");
        }
        List<DistrictInfo> districtInfos = districtService.selectInfoByParentCodeAndCity("65",filter.get("city"));
        List<CityDataVo> cityDataVos = new ArrayList<>();
        for (DistrictInfo districtInfo : districtInfos){
            BigDecimal saleNumber = saleOrderInfoMapper.selectCitySaleNumber(districtInfo.getName(),filter.get("starttime"),filter.get("endtime"));
            BigDecimal entryNumber = entryService.selectCityEntryNumber(districtInfo.getName(),filter.get("starttime"),filter.get("endtime"));
            //销售金额
            BigDecimal sales = saleOrderInfoMapper.selectCitySales(districtInfo.getName(),filter.get("starttime"),filter.get("endtime"));
            BigDecimal saleNumber2 = saleOrderInfoMapper.selectCitySaleNumber(districtInfo.getName(),filter.get("starttime2"),filter.get("endtime2"));
            BigDecimal entryNumber2 = entryService.selectCityEntryNumber(districtInfo.getName(),filter.get("starttime2"),filter.get("endtime2"));
            ////销售金额
            BigDecimal sales2 = saleOrderInfoMapper.selectCitySales(districtInfo.getName(),filter.get("starttime2"),filter.get("endtime2"));
            String dataRange = filter.get("starttime")+" - "+filter.get("endtime");
            String dataRange2 = filter.get("starttime2")+" - "+filter.get("endtime2");
            CityDataVo cityDataVo = new CityDataVo(districtInfo.getName(),dataRange,saleNumber,entryNumber,dataRange2,saleNumber2,entryNumber2);
            cityDataVo.setSales(sales);
            cityDataVo.setSales2(sales2);
            cityDataVos.add(cityDataVo);
        }
        pageInfo.setResult(cityDataVos);
        pageInfo.setTotalCount(page.getTotal());
    }
    /**
    * @Description: 按流向码查询
    * @date 2021/4/12 16:35
    */
    @Override
    public IPage selectSaleRecord1(Page<Map> page,Map filter, UserInfo user) {
        Map<String, Object> params = new HashMap<>();
        UserInfo userInfo = userService.getById(user.getId());
        //过滤条件
        //权限
        {
            params.put("enterprisenumber", userInfo.getCompanynumber());
            params.put("province", user.getProvince());
            params.put("city", user.getCity());
            params.put("district", user.getArea());
            params.put("street", user.getTown());
            params.put("committee", user.getCommunity());
        }
        //基本
        params.put("filterProvince", filter.get("province"));
        params.put("filterCity", filter.get("city"));
        params.put("filterDistrict", filter.get("district"));
        params.put("filterStreet", filter.get("street"));
        params.put("filterCommittee", filter.get("committee"));
        params.put("starttime", filter.get("starttime"));
        params.put("endtime", filter.get("endtime"));
        params.put("identify", filter.get("identify"));
        params.put("directioncode", filter.get("directioncode"));
        params.put("safetySupervision", filter.get("safetySupervision"));
        params.put("enterprisename", filter.get("enterprisename"));
        params.put("parententerprisename", filter.get("parententerprisename"));
        List<Map> list = saleOrderInfoMapper.selectSaleRecord1(page, params);
        return page.setRecords(list);
    }
    public SaleOrderInfo generateSaleOrderInfo(String type, UserInfo userInfo, Integer num, Date salesTime,
                                                      Long customerId, String pay, String total, String change, String userId){
        SaleOrderInfo orderInfo = new SaleOrderInfo();
        orderInfo.setCode(generateOrderCode(MODULE_SALE,type,new Date(),userInfo.getId()));
        orderInfo.setType(Byte.parseByte(type));
        orderInfo.setCreatedat(salesTime);
        orderInfo.setCreatedby(userInfo.getUsername());
        orderInfo.setBoxnum(new BigDecimal(num));
        orderInfo.setPay(new BigDecimal(pay));
        orderInfo.setChange(new BigDecimal(change));
        orderInfo.setSalesperson(userInfo.getUsername());
        orderInfo.setTotalprice(new BigDecimal(total));
        orderInfo.setShop(userInfo.getCompany());
        orderInfo.setCompanynumber(userInfo.getCompanynumber());
        orderInfo.setCustomer(customerId);
        return orderInfo;
    }
    @Override
    public String generateOrderCode(String module, String type, Date date, Long userId){
        //DateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSS");
        //创建Instant对象
        Instant instant = Instant.now();
        //获取毫秒数
        long currentMilli = instant.toEpochMilli();
        String orderCode = String.valueOf(currentMilli);
        String extend = String.format("%06d",userId);
        switch (module) {
            case MODULE_ENTRY:
                if (type.equals(RK_ENTRY)) {
                    orderCode = "RK-" + orderCode;
                } else if (type.equals(TH_ENTRY)) {
                    orderCode = "TH-" + orderCode;
                }
                break;
            case MODULE_DELIVERY:
                if (type.equals(NORMAL_DELIVERY)) {
                    orderCode = "ND-" + orderCode;
                } else {
                    orderCode = "OD-" + orderCode;
                }
                break;
            case MODULE_SALE:
                if (type.equals(RETAIL_ORDER)) {
                    orderCode = "RO-" + orderCode;
                } else if (type.equals(GROUP_ORDER)) {
                    orderCode = "GO-" + orderCode;
                }
                break;
            default:
        }
        return orderCode+extend+hostId+Thread.currentThread().getId();
    }
    @Override
    public SaleOrderInfo isExist(Long id, String companynumber, Date salesTime) {
        LambdaQueryWrapper<SaleOrderInfo>wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(SaleOrderInfo::getCreatedat,salesTime);
        wrapper.eq(SaleOrderInfo::getCustomer,id);
        wrapper.eq(SaleOrderInfo::getCompanynumber,companynumber);
        return baseMapper.selectOne(wrapper);
    }
    @Override
    public List<SaleOrderInfo> getWaitUploadOrderByEnterprise(Enterprise enterprise) {
        LambdaQueryWrapper<SaleOrderInfo> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(SaleOrderInfo::getIsupload,0);
        wrapper.ge(SaleOrderInfo::getCreatedat,"2022-01-21");
        wrapper.eq(SaleOrderInfo::getCompanynumber,enterprise.getEnterprisenumber());
        return baseMapper.selectList(wrapper);
    }
}