package com.qtzl.alterSales.manager.service; import cn.com.taiji.common.manager.net.http.ServiceHandleException; import cn.com.taiji.common.model.dao.Pagination; import cn.com.taiji.common.pub.BeanTools; import cn.hutool.core.bean.BeanUtil; import com.google.common.collect.Lists; import com.qtzl.alterSales.dao.repo.jpa.primary.FssPaccountFinalbillRepo; import com.qtzl.alterSales.dao.repo.jpa.second.AflPaccountReceivableBillRepo; import com.qtzl.alterSales.manager.model.protocol.UcServiceError; import com.qtzl.alterSales.manager.model.protocol.sales.FssPaccountFinalbillFindCountRequest; import com.qtzl.alterSales.manager.model.protocol.sales.FssPaccountFinalbillFindCountResponse; import com.qtzl.alterSales.manager.model.protocol.sales.FssPaccountFinalbillFindPageRequest; import com.qtzl.alterSales.manager.vo.AflPaccountReceivableBillVo; import com.qtzl.alterSales.manager.vo.FssPaccountFinalbillVo; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import javax.annotation.Resource; import javax.persistence.criteria.Predicate; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.stream.Collectors; /** * @author zhangxin */ @Service public class FssPaccountFinalbillServiceImpl implements FssPaccountFinalbillService{ private static final Logger log = LoggerFactory.getLogger(FssPaccountFinalbillServiceImpl.class); @Resource FssPaccountFinalbillRepo fssPaccountFinalbillRepo; @Resource AflPaccountReceivableBillRepo aflPaccountReceivableBillRepo; @Override public FssPaccountFinalbillFindCountResponse findByNaturalDateCount(FssPaccountFinalbillFindCountRequest request) throws ServiceHandleException { Pagination pagination = select(request); return toResponse(pagination); } private FssPaccountFinalbillFindCountResponse toResponse(Pagination pagination) { final FssPaccountFinalbillFindCountResponse response = new FssPaccountFinalbillFindCountResponse(); BeanTools.copyProperties(pagination, response); if (pagination.getResult()==null||pagination.getResult().size()<1) { return response; } List collect = pagination.getResult(AflPaccountReceivableBillVo.class).stream().map(this::toVo).collect(Collectors.toList()); response.setData(collect); return response; } private Pagination select(FssPaccountFinalbillFindCountRequest request) throws ServiceHandleException { if (request.getPageSize() > 100) { throw UcServiceError.BUSINESS_VALIDATE_ERR.toHandleException("请求每页数量过大 " + request.getPageSize()); } if (!StringUtils.isEmpty(request.getNaturalDate())){ long count = count(request); if (count<1){ Pagination pagination = new Pagination(); pagination.setPageSize(request.getPageSize()); pagination.setResult(new ArrayList()); return pagination; } } FssPaccountFinalbillFindPageRequest queryRequest = new FssPaccountFinalbillFindPageRequest(); BeanUtil.copyProperties(request, queryRequest); if (!StringUtils.isEmpty(request.getNaturalDate())){ Integer accountDate = getAccountDate(request.getNaturalDate()); queryRequest.setAccountDate(accountDate); } return aflPaccountReceivableBillRepo.page(queryRequest); } private long count(FssPaccountFinalbillFindCountRequest request) throws ServiceHandleException { Integer accountDate = getAccountDate(request.getNaturalDate()); return aflPaccountReceivableBillRepo.count(((root, query, cb) -> { List list = Lists.newArrayList(); if (accountDate!=null) { list.add(cb.equal(root.get("accountDate"), accountDate)); } Predicate[] p = new Predicate[list.size()]; return cb.and(list.toArray(p)); })); } private FssPaccountFinalbillVo toVo(AflPaccountReceivableBillVo aflPaccountReceivableBillVo) { FssPaccountFinalbillVo fssPaccountFinalbillVo = new FssPaccountFinalbillVo(); BeanUtil.copyProperties(aflPaccountReceivableBillVo,fssPaccountFinalbillVo); String payDate = getPayDate(aflPaccountReceivableBillVo.getAccountDate().toString()); log.info("时间类型转换中:"+payDate); fssPaccountFinalbillVo.setNaturalDate(payDate); return fssPaccountFinalbillVo; } private String getPayDate(String payDate){ log.info("时间类型转换中:"+payDate); SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd"); formatter.setLenient(false); Date newDate=null; try { newDate= formatter.parse(payDate); } catch (ParseException e) { log.error("时间类型转换失败:"+payDate); return payDate; } formatter = new SimpleDateFormat("yyyy-MM-dd"); String format = formatter.format(newDate); log.info("时间类型转换成功:"+format); return format; } private Integer getAccountDate(String accountDate){ Integer newAccountDate = null; try { String accountDateInt = accountDate.replaceAll("-", ""); newAccountDate = Integer.parseInt(accountDateInt); } catch (Exception e) { log.error("数据类型转换失败"); } return newAccountDate; } }