package com.gk.firework.Service.ServiceImpl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.OrderItem; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.gk.firework.Domain.*; import com.gk.firework.Domain.Exception.BusinessException; 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.Service.*; import com.spire.doc.interfaces.IField; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.*; /** * @author : jingjy * @date : 2021/3/30 17:34 */ @Service("SaleOrderDetailService") public class SaleOrderDetailServiceImpl extends ServiceImpl implements SaleOrderDetailService { @Autowired SaleOrderDetailInfoMapper saleOrderDetailInfoMapper; @Autowired SaleOrderService saleOrderService; @Autowired EnterpriseService enterpriseService; @Autowired ProductService productService; @Autowired private EntryDetailService entryDetailService; @Autowired private EntryService entryService; @Autowired private StockService stockService; @Autowired UserService userService; @Autowired DistrictService districtService; @Override public void selectByCustomId(PageInfo pageInfo) { Page page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize()); List 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); List list = saleOrderDetailInfoMapper.selectByCustomId(page,pageInfo.getCondition()); pageInfo.setResult(list); pageInfo.setTotalCount(page.getTotal()); } /** * @Description: 近n天销售数据统计 * @date 2021/4/16 16:21 */ @Override public List getSaleDataInDays(Integer days) { Date startTime = moveForwardDays(days); int[] index = new int[days]; for (int i = 0; i < days; i++) { index[i] = i + 1; } return saleOrderDetailInfoMapper.getSaleDataInDays(startTime,null,index); } /** * @Description: 销售数量按地区统计 n天 默认90 * @date 2021/4/16 16:21 */ @Override public List getSaleDataAreaInDays(Integer days) { Date startTime = moveForwardDays(days); Map params = new HashMap<>(); params.put("province", "新疆维吾尔自治区"); return saleOrderDetailInfoMapper.getSaleDataAreaInDays(startTime,null,params); } /** * @Description: 销售数量按品种统计 n天 默认90 * @date 2021/4/16 17:03 */ @Override public List getSaleDataProductTypeInDays(Integer days) { Date startTime = moveForwardDays(days); return saleOrderDetailInfoMapper.getSaleDataProductTypeInDays(startTime,null); } /** * @Description: 销售量同年对比 * @date 2021/4/22 15:13 */ @Override public Map getSaleDataCompareInYear(String province, String city) { //今年数据 Calendar cal = Calendar.getInstance(); int thisYear = cal.get(Calendar.YEAR); List thisYearData = this.getSaleDataInYear(province, city, thisYear); //去年数据 cal.add(Calendar.YEAR, -1); int lastYear = cal.get(Calendar.YEAR); List lastYearData = this.getSaleDataInYear(province, city, lastYear); //生成结果 Map result = new HashMap<>(); result.put(thisYear, thisYearData); result.put(lastYear, lastYearData); return result; } /** * @Description: 获取{xxxx}年的销售数据 * @date 2021/4/22 15:50 */ @Override public List getSaleDataInYear(String province, String city, Integer year) { Map params = new HashMap<>(); params.put("province", province); params.put("city", city); params.put("year", year); return saleOrderDetailInfoMapper.getSaleDataInYear(params); } /** * @Description: 进货量同年对比 * @date 2021/4/23 9:28 */ @Override public Map getInboundCompareInYear(String province, String city) { //今年数据 Calendar cal = Calendar.getInstance(); int thisYear = cal.get(Calendar.YEAR); List thisYearData = this.getInboundInYear(province, city, thisYear); //去年数据 cal.add(Calendar.YEAR, -1); int lastYear = cal.get(Calendar.YEAR); List lastYearData = this.getInboundInYear(province, city, lastYear); //生成结果 Map result = new HashMap<>(); result.put(thisYear, thisYearData); result.put(lastYear, lastYearData); return result; } /** * @Description: 获取{xxxx}年的进货量 * @date 2021/4/23 9:31 */ @Override public List getInboundInYear(String province, String city, Integer year) { Map params = new HashMap<>(); params.put("province", province); params.put("city", city); params.put("year", year); return saleOrderDetailInfoMapper.getInboundInYear(params); } @Override public List selectByOrderCode(String code) { LambdaQueryWrapperwrapper = new LambdaQueryWrapper<>(); wrapper.eq(SaleOrderDetailInfo::getOrdercode,code); return saleOrderDetailInfoMapper.selectList(wrapper); } /** * @Description: 标题数据 (零售店数量 今日销售数量 今年销售总量 今年购买人次) * @date 2021/4/25 9:44 */ @Override public Map getTitleData() { //1.零售店数量 int saleShopNum = enterpriseService.getSaleNum(); //2.今日销售数量 int thisDaySaleNum = saleOrderDetailInfoMapper.getSaleNumThisDay(); //3.今年销售数量 int thisYearSaleNum = saleOrderDetailInfoMapper.getSaleNumThisYear(); //今年购买人数 int thisYearPurchasersNum = saleOrderDetailInfoMapper.getPurchasersNum(); Map result = new HashMap<>(); result.put("saleShopNum", saleShopNum); result.put("thisDaySaleNum", thisDaySaleNum); result.put("thisYearSaleNum", thisYearSaleNum); result.put("thisYearPurchasersNum", thisYearPurchasersNum); return result; } @Override public IPage getCityInAndOut(Page page, Map filter) { Map params = new HashMap<>(); params.put("starttime", filter.get("starttime")); params.put("endtime", filter.get("endtime")); params.put("province", "新疆维吾尔自治区"); params.put("safetysupervision", filter.get("safetysupervision")); List list = saleOrderDetailInfoMapper.selectCityInAndOut(page, params); page.setRecords(list); return page; } @Override public IPage getGenderSale(Page page, Map filter, UserInfo userInfo) { Map params = new HashMap<>(); //可视权限 UserInfo user = userService.getById(userInfo.getId()); if (user.getCompanynumber() != null) { params.put("enterprisenumber", user.getCompanynumber()); }else { if (StringUtils.isNotBlank(user.getProvince())) { params.put("province", user.getProvince()); } if (StringUtils.isNotBlank(user.getCity())) { params.put("city", user.getCity()); } if (StringUtils.isNotBlank(user.getArea())) { params.put("district", user.getArea()); } if (StringUtils.isNotBlank(user.getTown())) { params.put("street", user.getTown()); } if (StringUtils.isNotBlank(user.getCommunity())) { params.put("committee", user.getCommunity()); } } params.put("enterprisename", filter.get("enterprisename")); params.put("producttype", filter.get("producttype")); params.put("secondarytype", filter.get("secondarytype")); params.put("productname", filter.get("productname")); params.put("provinceFilter", filter.get("province")); params.put("cityFilter", filter.get("city")); params.put("districtFilter", filter.get("district")); params.put("streetFilter", filter.get("street")); params.put("committeeFilter", filter.get("committee")); params.put("starttime", filter.get("starttime")); params.put("endtime", filter.get("endtime")); List records = saleOrderDetailInfoMapper.getGenderSale(page,params); return page.setRecords(records); } @Override public IPage getRaceSale(Page page, Map filter, UserInfo userInfo) { Map params = new HashMap<>(); UserInfo user = userService.getById(userInfo.getId()); { params.put("enterprisenumber", user.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("enterprisename", filter.get("enterprisename")); params.put("producttype", filter.get("producttype")); params.put("secondarytype", filter.get("secondarytype")); params.put("productname", filter.get("productname")); params.put("provinceFilter", filter.get("province")); params.put("cityFilter", filter.get("city")); params.put("districtFilter", filter.get("city")); params.put("streetFilter", filter.get("street")); params.put("committeeFilter", filter.get("committee")); params.put("starttime", filter.get("starttime")); params.put("endtime", filter.get("endtime")); List records = saleOrderDetailInfoMapper.getRaceSale(page,params); return page.setRecords(records); } @Override public List getGenerationSale(Map filter, UserInfo userInfo) { UserInfo user = userService.getById(userInfo.getId()); String[] generations = {"0-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70"}; List table = new ArrayList<>(); Map row = null; for (String generation : generations) { Integer head = null; Integer tail = null; String[] split = generation.split("-"); head = Integer.valueOf(split[0]); if (split.length > 1) { tail = Integer.valueOf(split[1]); } int num = this.getSaleInfoByGeneration(head,tail,filter,user); row = new HashMap<>(); row.put("generation", generation); row.put("num", num); table.add(row); } return table; } /** * @Description: 年龄段购买数量 * @date 2021/5/15 17:05 */ @Override public int getSaleInfoByGeneration(Integer head, Integer tail, Map filter,UserInfo user) { Map params = new HashMap<>(); { params.put("enterprisenumber", user.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("enterprisename", filter.get("enterprisename")); params.put("producttype", filter.get("producttype")); params.put("secondarytype", filter.get("secondarytype")); params.put("productname", filter.get("productname")); params.put("provinceFilter", filter.get("province")); params.put("cityFilter", filter.get("city")); params.put("districtFilter", filter.get("city")); params.put("streetFilter", filter.get("street")); params.put("committeeFilter", filter.get("committee")); params.put("starttime", filter.get("starttime")); params.put("endtime", filter.get("endtime")); //年龄段头尾 params.put("head", head); params.put("tail", tail); return saleOrderDetailInfoMapper.getSaleInfoByGeneration(params); } @Override public List getDetailList(String directionCode) { if (StringUtils.isBlank(directionCode)|| FireworkDeal.isNotDirectionCode(directionCode)) { throw new BusinessException("流向码不符合规则"); } List codes= new ArrayList<>(); //22位 if (FireworkDeal.is22Characters(directionCode)){ DirectionDetail directionDetail = FireworkDeal.dealDirectionCode(directionCode); List productVos = new ArrayList<>(); ProductVo productVo = productService.selectVoByDirection(directionCode); FireworkDeal.getProductVos(directionCode,directionDetail,directionDetail,productVos,productVo); if (productVos.size() > 0) { for (ProductVo product : productVos) { codes.add(product.getDirectionCode()); } } }else{ //19位 codes.add(directionCode); } if (codes.size() < 1) { throw new BusinessException("流向码有误"); } //循环查询 List details = new ArrayList<>(); for (String code : codes) { SaleDetailVo saleDetailVo = saleOrderDetailInfoMapper.selectOneByDirectionCode(code); if (saleDetailVo != null) { details.add(saleDetailVo); } } return details; } @Override @Transactional public void returnAndStorage(String directionCodes, String userId, String auth) { if (StringUtils.isBlank(userId)) { throw new BusinessException("用户信息不能为空"); } UserInfo userInfo = userService.getById(userId); if (userInfo == null) { throw new BusinessException("用户不存在"); } List directionCodeList = new ArrayList<>(); if (FireworkDeal.is22Characters(directionCodes)){ DirectionDetail directionDetail = FireworkDeal.dealDirectionCode(directionCodes); List productVos = new ArrayList<>(); ProductVo productVo = productService.selectVoByDirection(directionCodes); FireworkDeal.getProductVos(directionCodes,directionDetail,directionDetail,productVos,productVo); if (productVos.size() > 0) { for (ProductVo product : productVos) { directionCodeList.add(product.getDirectionCode()); } } }else{ //19位 directionCodeList.add(directionCodes); } if (directionCodeList.size() < 1) { throw new BusinessException("流向码有误"); } for (String directionCode : directionCodeList) { if (StringUtils.isBlank(directionCode) || FireworkDeal.isNotDirectionCode(directionCode)) { throw new BusinessException("流向码不符合规则,退货失败!"); } StockInfo stockInfo = stockService.selectStockByDirection(directionCode); // if (stockInfo == null || !stockInfo.getOwner().equals(customerInfo.getId().toString())) { // msg.setCode(ErrorCode.ERROR_CODE); // msg.setMessage("库存状态异常,退货失败!"); // return msg; // } 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) { throw new BusinessException("条码:" + directionCode + ",已退货入库或者记录不存在"); } Byte flag = 1; detailInfo.setReturnflag(flag); this.updateById(detailInfo); int i = stockService.doReturn(stockInfo,userInfo,null, new Date()); if (i != 1){ throw new BusinessException("更新失败"); }else { entryService.save(entryOrderInfo); entryDetailService.save(entryDetailInfo); } } } @Override public IPage selectSaleNumInfo(Page page, Map filter, UserInfo user) { List records = saleOrderDetailInfoMapper.selectSaleNumInfo(page, filter); page.setRecords(records); return page; } @Override public IPage selectSaleNumInfoDetail(Page page, Map filter, UserInfo user) { List records = saleOrderDetailInfoMapper.selectSaleNumInfoDetail(page, filter); page.setRecords(records); return page; } @Override public IPage getCityInAndOutDetail(Page page, Map filter) { Map params = new HashMap<>(); params.put("starttime", filter.get("starttime")); params.put("endtime", filter.get("endtime")); params.put("province", "新疆维吾尔自治区"); params.put("city", filter.get("city")); params.put("safetysupervision", filter.get("safetysupervision")); List list = saleOrderDetailInfoMapper.selectCityInAndOutDetail(page, params); return page.setRecords(list); } @Override public List getCityInAndOutExport(Map filter) { Map params = new HashMap<>(); params.put("starttime", filter.get("starttime")); params.put("endtime", filter.get("endtime")); params.put("province", "新疆维吾尔自治区"); params.put("safetysupervision", filter.get("safetysupervision")); return saleOrderDetailInfoMapper.selectCityInAndOut(params); } @Override public IPage selectCityTypeSale(Page page, Map filter) { Map params = new HashMap<>(); params.put("province", "新疆维吾尔自治区"); params.put("starttime", filter.get("starttime")); params.put("endtime", filter.get("endtime")); params.put("enterprisename", filter.get("enterprisename")); params.put("safetysupervision", filter.get("safetysupervision")); List list = productService.selectTypes(); List res = saleOrderDetailInfoMapper.selectCityTypeSale(page,params,list); Map totalRow = saleOrderDetailInfoMapper.selectAllType(list, params); ArrayList result = new ArrayList<>(res); result.add(totalRow); return page.setRecords(result); } @Override public List selectCityTypeSaleExport(Map filter) { Map params = new HashMap<>(); params.put("province", "新疆维吾尔自治区"); params.put("starttime", filter.get("starttime")); params.put("endtime", filter.get("endtime")); params.put("enterprisename", filter.get("enterprisename")); params.put("safetysupervision", filter.get("safetysupervision")); List list = productService.selectTypes(); List res = saleOrderDetailInfoMapper.selectCityTypeSale(params, list); Map totalRow = saleOrderDetailInfoMapper.selectAllType(list, params); ArrayList result = new ArrayList<>(res); result.add(totalRow); return result; } @Override public IPage selectEnterpriseTypeSale(Page page, Map filter, UserInfo user) { Map params = new HashMap<>(); params.put("starttime", filter.get("starttime")); params.put("endtime", filter.get("endtime")); params.put("enterprisename", filter.get("enterprisename")); params.put("safetysupervision", filter.get("safetysupervision")); params.put("province", filter.get("province")); params.put("city", filter.get("city")); params.put("district", filter.get("district")); List list = productService.selectTypes(); List res = saleOrderDetailInfoMapper.selectEnterpriseTypeSale(page,params,list); //合计行 Map totalRow = saleOrderDetailInfoMapper.selectAllType(list, params); ArrayList result = new ArrayList<>(res); result.add(totalRow); return page.setRecords(result); } @Override public List selectExportEnterpriseTypeSale(Map filter, UserInfo user) { Map params = new HashMap<>(); params.put("starttime", filter.get("starttime")); params.put("endtime", filter.get("endtime")); params.put("enterprisename", filter.get("enterprisename")); params.put("safetysupervision", filter.get("safetysupervision")); params.put("province", filter.get("province")); params.put("city", filter.get("city")); params.put("district", filter.get("district")); List list = productService.selectTypes(); List res = saleOrderDetailInfoMapper.selectEnterpriseTypeSale(params,list); //合计行 Map totalRow = saleOrderDetailInfoMapper.selectAllType(list, params); ArrayList result = new ArrayList<>(res); result.add(totalRow); return result; } private Date moveForwardDays(Integer days) { Calendar calendar = new GregorianCalendar(); calendar.setTime(new Date()); //当前日期往前推days天 calendar.add(Calendar.DATE, -days); return calendar.getTime(); } @Override public IPage selectDistrictTypeSale(Page page, Map filter) { Map params = new HashMap<>(); params.put("province", "新疆维吾尔自治区"); params.put("city", filter.get("city")); params.put("starttime", filter.get("starttime")); params.put("endtime", filter.get("endtime")); params.put("enterprisename", filter.get("enterprisename")); params.put("safetysupervision", filter.get("safetysupervision")); List list = productService.selectTypes(); List res = saleOrderDetailInfoMapper.selectDistrictTypeSale(page,params,list); Map totalRow = saleOrderDetailInfoMapper.selectAllDistrictType(list, params); ArrayList result = new ArrayList<>(res); result.add(totalRow); return page.setRecords(result); } @Override public List selectDistrictTypeSaleExport(Map filter) { Map params = new HashMap<>(); params.put("province", "新疆维吾尔自治区"); params.put("city", filter.get("city")); params.put("starttime", filter.get("starttime")); params.put("endtime", filter.get("endtime")); params.put("enterprisename", filter.get("enterprisename")); params.put("safetysupervision", filter.get("safetysupervision")); List list = productService.selectTypes(); List res = saleOrderDetailInfoMapper.selectDistrictTypeSale(params, list); Map totalRow = saleOrderDetailInfoMapper.selectAllDistrictType(list, params); ArrayList result = new ArrayList<>(res); result.add(totalRow); return result; } @Override public void saveBatchOrderDetailInfo(List detailInfoList) { if (detailInfoList == null || detailInfoList.size() == 0) { throw new BusinessException("系统参数为空"); } int i = saleOrderDetailInfoMapper.saveBatchOrderDetailInfo(detailInfoList); } }