package com.xzx.gc.order.service;
|
|
import cn.hutool.core.codec.Base64;
|
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.convert.Convert;
|
import cn.hutool.core.util.NumberUtil;
|
import cn.hutool.core.util.StrUtil;
|
import com.github.pagehelper.PageHelper;
|
import com.github.pagehelper.PageInfo;
|
import com.xzx.gc.common.constant.Constants;
|
import com.xzx.gc.common.constant.OrderEnum;
|
import com.xzx.gc.common.constant.SysConfigConstant;
|
import com.xzx.gc.common.utils.BusinessSimpleUtil;
|
import com.xzx.gc.common.utils.BusinessUtil;
|
import com.xzx.gc.common.utils.StringUtils;
|
import com.xzx.gc.entity.ConfigInfo;
|
import com.xzx.gc.entity.OrderAppraiseInfo;
|
import com.xzx.gc.entity.OrderInfo;
|
import com.xzx.gc.entity.ResourceInfo;
|
import com.xzx.gc.model.admin.AppraiseInfoTotalModel;
|
import com.xzx.gc.model.admin.XzxOrderAppraiseInfoModel;
|
import com.xzx.gc.model.order.QueryReceiverTotalListDTO;
|
import com.xzx.gc.model.order.QueryReceiverTotalListResDTO;
|
import com.xzx.gc.order.mapper.ConfigMapper;
|
import com.xzx.gc.order.mapper.OrderAppraiseInfoMapper;
|
import com.xzx.gc.order.mapper.OrderMapper;
|
import com.xzx.gc.order.mapper.ResourceInfoMapper;
|
import com.xzx.gc.util.DateUtil;
|
import com.xzx.gc.util.DoubleUtil;
|
import com.xzx.gc.util.enums.EvaluationLabelType;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.web.bind.annotation.RequestBody;
|
import tk.mybatis.mapper.entity.Example;
|
import tk.mybatis.mapper.util.StringUtil;
|
|
import javax.servlet.http.HttpServletRequest;
|
import java.math.RoundingMode;
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.stream.Collectors;
|
|
@Service
|
@Transactional
|
public class OrderAppraiseInfoService {
|
|
@Autowired
|
private OrderAppraiseInfoMapper orderAppraiseInfoMapper;
|
|
@Autowired
|
private OrderMapper orderMapper;
|
|
@Autowired
|
private ResourceInfoMapper resourceInfoMapper;
|
|
@Autowired
|
private ConfigMapper configMapper;
|
|
@Autowired
|
private CityPartnerService cityPartnerService;
|
|
@Autowired
|
private HttpServletRequest request;
|
|
@Autowired
|
private BusinessUtil businessUtil;
|
|
@Autowired
|
private ConfigService configService;
|
|
|
/**
|
* 根据订单查询评价 目前仅支持1次评价
|
* @param orderId
|
* @return
|
*/
|
public OrderAppraiseInfo findByOrderId(String orderId){
|
OrderAppraiseInfo orderAppraiseInfo = new OrderAppraiseInfo();
|
orderAppraiseInfo.setOrderId(orderId);
|
orderAppraiseInfo.setDelFlag(Convert.toShort(Constants.DEL_NOT_FLAG));
|
List<OrderAppraiseInfo> orderAppraiseInfo1 = orderAppraiseInfoMapper.select(orderAppraiseInfo);
|
if(CollUtil.isNotEmpty(orderAppraiseInfo1)){
|
return orderAppraiseInfo1.get(0);
|
}
|
return null;
|
}
|
|
public OrderAppraiseInfo findById(Long id){
|
OrderAppraiseInfo orderAppraiseInfo = orderAppraiseInfoMapper.selectByPrimaryKey(id);
|
if(orderAppraiseInfo!=null){
|
orderAppraiseInfo.setContent(encodeOrDecode(orderAppraiseInfo.getContent(), 1));
|
}
|
return orderAppraiseInfo;
|
}
|
|
/**
|
* 查询回收员的评价
|
* @param receiver
|
* @return
|
*/
|
public List<OrderAppraiseInfo> findByReceiver(String receiver){
|
Example example=new Example(OrderAppraiseInfo.class);
|
Example.Criteria criteria = example.createCriteria();
|
criteria.andEqualTo("delFlag",Convert.toShort(Constants.DEL_NOT_FLAG));
|
criteria.andEqualTo("receiverId",receiver);
|
example.setOrderByClause("create_time desc");
|
return orderAppraiseInfoMapper.selectByExample(example);
|
}
|
|
/**
|
* 查询综合评分、完成订单数 总共被评价数
|
* @param receiver 回收员ID
|
* @return
|
*/
|
public OrderAppraiseInfo findStarInfo(String receiver,String createUserId){
|
OrderAppraiseInfo orderAppraiseInfo = new OrderAppraiseInfo();
|
orderAppraiseInfo.setDelFlag(Convert.toShort(Constants.DEL_NOT_FLAG));
|
orderAppraiseInfo.setReceiverId(receiver);
|
List<OrderAppraiseInfo> select = findByReceiver(receiver);
|
if (CollUtil.isNotEmpty(select)) {
|
Double sum = select.stream().mapToDouble(x -> Convert.toDouble(x.getStar())).sum();
|
double div = NumberUtil.div(sum, Convert.toDouble(select.size()));
|
orderAppraiseInfo.setNum(select.size());
|
String s = NumberUtil.roundStr(div, 1, RoundingMode.DOWN);
|
orderAppraiseInfo.setStar(s);
|
} else {
|
orderAppraiseInfo.setStar("0.0");
|
orderAppraiseInfo.setNum(0);
|
}
|
|
Example example = new Example(OrderInfo.class);
|
Example.Criteria criteria = example.createCriteria();
|
criteria.andEqualTo("receiver", receiver);
|
List<String> list = new ArrayList<>();
|
list.add(OrderEnum.待入库.getValue());
|
list.add(OrderEnum.入库中.getValue());
|
list.add(OrderEnum.完成.getValue());
|
criteria.andIn("orderStatus", list);
|
int i = orderMapper.selectCountByExample(example);
|
orderAppraiseInfo.setCompleteOrderNum(i);
|
//预计时间 服务中多一个用户多1小时
|
int fwzNum;
|
List<OrderInfo> listReceive = orderMapper.findListOrderReceiveTime(receiver);
|
if(CollUtil.isEmpty(listReceive)){
|
fwzNum= 0;
|
}else {
|
List<String> collect = listReceive.stream().map(x -> x.getCreateUserId()).collect(Collectors.toList());
|
if(StrUtil.isNotBlank(createUserId)) {
|
fwzNum= collect.indexOf(createUserId);
|
fwzNum=fwzNum==-1?collect.size():fwzNum;
|
}else {
|
fwzNum= collect.size();
|
}
|
}
|
orderAppraiseInfo.setQueueNum(fwzNum);
|
return orderAppraiseInfo;
|
}
|
|
|
/**
|
* 处理资源和标签信息
|
* @param orderAppraiseInfo1
|
* @return
|
*/
|
public void changeResouceAndTag(OrderAppraiseInfo orderAppraiseInfo1){
|
String resourceIds = orderAppraiseInfo1.getResourceIds();
|
|
List<ResourceInfo> resourceList=new ArrayList<>();
|
|
List<String> tagValues=new ArrayList<>();
|
|
|
if(StrUtil.isNotBlank(resourceIds)){
|
for (String id:resourceIds.split(",")) {
|
ResourceInfo resourceInfo = resourceInfoMapper.selectByPrimaryKey(id);
|
resourceList.add(resourceInfo);
|
}
|
orderAppraiseInfo1.setResourceList(resourceList);
|
}
|
String tagCodes = orderAppraiseInfo1.getTagCodes();
|
|
if(StrUtil.isNotBlank(tagCodes)){
|
for (String id:tagCodes.split(",")) {
|
ConfigInfo configInfo=new ConfigInfo();
|
configInfo.setConfigTypeCode(id);
|
ConfigInfo configInfo1 = configMapper.selectOne(configInfo);
|
if(configInfo1!=null){
|
tagValues.add(configInfo1.getConfigValue());
|
String configTypeName = configInfo1.getConfigTypeName();
|
orderAppraiseInfo1.setTagSummary(configTypeName);
|
|
}
|
}
|
orderAppraiseInfo1.setTagValues(tagValues);
|
}
|
}
|
|
|
|
|
public Map<String,Object> queryAppraiseInfolist(@RequestBody XzxOrderAppraiseInfoModel model){
|
List<String> partnerIds = cityPartnerService.queryPartnerByCurrent();
|
model.setPartnerIds(partnerIds);
|
Map<String,Object> map = new HashMap<>();
|
PageHelper.startPage(model.getPage(),model.getLimit());
|
List<XzxOrderAppraiseInfoModel> list = orderAppraiseInfoMapper.queryAppraiseInfoList(model);
|
for(XzxOrderAppraiseInfoModel infoModel:list) {
|
String nickName = infoModel.getUserName();
|
if(nickName!=null&&!"".equals(nickName)){
|
nickName =Base64.decodeStr(nickName);
|
|
}
|
|
|
infoModel.setUserName(nickName);
|
infoModel.setRelaName(infoModel.getUserName());
|
infoModel.setMobilePhone(infoModel.getUserPhone());
|
infoModel.setName(infoModel.getReceiverName());
|
|
String value ="tagAppraise"+infoModel.getStar();
|
infoModel.setStarDesc(orderAppraiseInfoMapper.queryConfigByAppraseInfo(value));
|
String tag = infoModel.getTagCodes();
|
if(null!=tag&&!"".equals(tag)){
|
String[] strs = tag.split(",");
|
List<String> codes = new ArrayList<>();
|
for (String str:strs) {
|
codes.add(str);
|
}
|
List<String> tagValues = orderAppraiseInfoMapper.queryConfigByTagCode(codes);
|
//拼接服务打标
|
StringBuffer buf = new StringBuffer();
|
for (int i=0;i<tagValues.size();i++) {
|
if(i==0){
|
buf.append(tagValues.get(i)) ;
|
}else{
|
buf.append("、").append(tagValues.get(i));
|
}
|
}
|
infoModel.setTagDesc(buf.toString());
|
}else{
|
infoModel.setTagCodes("-");
|
infoModel.setTagDesc("-");
|
}
|
//拼接图片
|
List<String> urls = new ArrayList<>();
|
String resourceIds = infoModel.getResourceIds();
|
if(null!=resourceIds&&!"".equals(resourceIds)){
|
String[] resIds = resourceIds.split(",");
|
List<String> resArr = new ArrayList<>();
|
for (String res:resIds) {
|
resArr.add(res);
|
}
|
if(resArr.size()>0){
|
urls = orderAppraiseInfoMapper.queryResourceUrls(resArr);
|
infoModel.setImgUrls(urls);
|
}
|
|
}
|
if(null!=infoModel.getContent()&&!"".equals(infoModel.getContent())){
|
if(StringUtils.isBase64(infoModel.getContent())){
|
infoModel.setContent(Base64.decodeStr(infoModel.getContent()));
|
}
|
|
}else{
|
infoModel.setContent("-");
|
|
}
|
|
}
|
|
PageInfo<XzxOrderAppraiseInfoModel> pageInfo=new PageInfo<>(list);
|
map.put("data",list);
|
map.put("code",0);
|
map.put("count",pageInfo.getTotal());
|
return map;
|
}
|
|
public Map<String,Object> queryReceiverTotalList(XzxOrderAppraiseInfoModel model){
|
String partnerId = model.getPartnerId();
|
String name = model.getName();
|
String receiverId = model.getReceiverId();
|
|
List<String> partnerIds = new ArrayList<>();
|
|
if(businessUtil.isWeb(request.getHeader("clientType"))){
|
if(null!=partnerId&&!"".equals(partnerId)){
|
partnerIds.add(partnerId);
|
}else{
|
partnerIds = cityPartnerService.queryPartnerByCurrent();
|
}
|
}
|
|
PageHelper.startPage(model.getPage(),model.getLimit());
|
List<Map<String,Object>> list = orderAppraiseInfoMapper.queryReceiverTotalList(name,partnerIds,receiverId);
|
PageInfo<Map<String,Object>> pageInfo=new PageInfo<>(list);
|
|
for (Map<String,Object> map:list) {
|
String star = DoubleUtil.roundOne(map.get("star").toString());
|
map.put("star",star);
|
}
|
Map<String,Object> map = new HashMap<>();
|
map.put("code",0);
|
map.put("data",list);
|
map.put("count",pageInfo.getTotal());
|
return map;
|
}
|
|
public AppraiseInfoTotalModel queryAppraiseInfoTotalList(AppraiseInfoTotalModel paramModel){
|
List<String> partnerIds=new ArrayList<>();
|
if(businessUtil.isWeb(request.getHeader("clientType"))) {
|
partnerIds = cityPartnerService.queryPartnerByCurrent();
|
}
|
AppraiseInfoTotalModel model = new AppraiseInfoTotalModel();
|
model.setBehaveBadlyNumDesc(orderAppraiseInfoMapper.queryConfigByTagCodeOne(EvaluationLabelType.ONE_TYPE));
|
model.setSeriousTardinessNumDesc(orderAppraiseInfoMapper.queryConfigByTagCodeOne(EvaluationLabelType.TWO_TYPE));
|
model.setLowProcessingEfficiencyNumDesc(orderAppraiseInfoMapper.queryConfigByTagCodeOne(EvaluationLabelType.THREE_TYPE));
|
model.setPoorServiceAwarenessNumDesc(orderAppraiseInfoMapper.queryConfigByTagCodeOne(EvaluationLabelType.FOUR_TYPE));
|
model.setBadAttitudeNumDesc(orderAppraiseInfoMapper.queryConfigByTagCodeOne(EvaluationLabelType.FIVE_TYPE));
|
model.setLateArrivalNumDesc(orderAppraiseInfoMapper.queryConfigByTagCodeOne(EvaluationLabelType.SIX_TYPE));
|
model.setLowProcessingNumDesc(orderAppraiseInfoMapper.queryConfigByTagCodeOne(EvaluationLabelType.SENVEN_TYPE));
|
model.setLowServiceNumDesc(orderAppraiseInfoMapper.queryConfigByTagCodeOne(EvaluationLabelType.EIGHT_TYPE));
|
model.setSoAttitudeNumDesc(orderAppraiseInfoMapper.queryConfigByTagCodeOne(EvaluationLabelType.NINE_TYPE));
|
model.setNoLateNumDesc(orderAppraiseInfoMapper.queryConfigByTagCodeOne(EvaluationLabelType.TEN_TYPE));
|
model.setProcessingNumDesc(orderAppraiseInfoMapper.queryConfigByTagCodeOne(EvaluationLabelType.ELE_TYPE));
|
model.setServiceAwarenessNumDesc(orderAppraiseInfoMapper.queryConfigByTagCodeOne(EvaluationLabelType.TELF_TYPE));
|
model.setGoodAttitudeNumDesc(orderAppraiseInfoMapper.queryConfigByTagCodeOne(EvaluationLabelType.THR_TYPE));
|
model.setOnTimeNumDesc(orderAppraiseInfoMapper.queryConfigByTagCodeOne(EvaluationLabelType.FOR_TYPE));
|
model.setGoodProcessingNumDesc(orderAppraiseInfoMapper.queryConfigByTagCodeOne(EvaluationLabelType.FIV_TYPE));
|
model.setGoodServiceAwarenessNumDesc(orderAppraiseInfoMapper.queryConfigByTagCodeOne(EvaluationLabelType.SI_TYPE));
|
model.setGoodPaySatisfiedNumDesc(orderAppraiseInfoMapper.queryConfigByTagCodeOne(EvaluationLabelType.SEV_TYPE));
|
model.setGoodServiceSatisfiedNumDesc(orderAppraiseInfoMapper.queryConfigByTagCodeOne(EvaluationLabelType.EIG_TYPE));
|
model.setGreatRecyclerNumDesc(orderAppraiseInfoMapper.queryConfigByTagCodeOne(EvaluationLabelType.NIG_TYPE));
|
//保存星级个数汇总
|
List<Map<String,Object>> starList = orderAppraiseInfoMapper.queryStarTotalNum(partnerIds,paramModel.getReceiverId());
|
for (Map<String,Object> obj:starList) {
|
String star = obj.get("star").toString();
|
String starNum = obj.get("num").toString();
|
if(star.equals("1")){
|
model.setOneStarNum(starNum);
|
}else if(star.equals("2")){
|
model.setTwoStarNum(starNum);
|
}else if(star.equals("3")){
|
model.setThreeStarNum(starNum);
|
}else if(star.equals("4")){
|
model.setFourStarNum(starNum);
|
}else if(star.equals("5")){
|
model.setFiveStarNum(starNum);
|
}
|
List<String> codesList = getModelCodeList(star);
|
if(codesList.size()>0){
|
for (String codesl:codesList) {
|
String[] codesStrs = codesl.split(",");
|
for (String codes:codesStrs) {
|
getConfigNum(model,codes);
|
|
}
|
}
|
|
}
|
|
}
|
return model;
|
}
|
|
private List<String> getModelCodeList(String star){
|
return orderAppraiseInfoMapper.getModelCodeList(star);
|
}
|
|
private AppraiseInfoTotalModel getConfigNum(AppraiseInfoTotalModel model, String configTypeCode){
|
|
//无法直接使用switch case,因为是String类型
|
switch (DateUtil.getCaseByType(configTypeCode)) {
|
case 1:model.setBehaveBadlyNum((Integer.parseInt(model.getBehaveBadlyNum())+1)+""); break;
|
case 2:model.setSeriousTardinessNum((Integer.parseInt(model.getSeriousTardinessNum())+1)+""); break;
|
case 3:model.setLowProcessingEfficiencyNum((Integer.parseInt(model.getLowProcessingEfficiencyNum())+1)+""); break;
|
case 4:model.setPoorServiceAwarenessNum((Integer.parseInt(model.getPoorServiceAwarenessNum())+1)+""); break;
|
case 5:model.setBadAttitudeNum((Integer.parseInt(model.getBadAttitudeNum())+1)+""); break;
|
case 6:model.setLateArrivalNum((Integer.parseInt(model.getLateArrivalNum())+1)+""); break;
|
case 7:model.setLowProcessingNum((Integer.parseInt(model.getLowProcessingNum())+1)+""); break;
|
case 8:model.setLowServiceNum((Integer.parseInt(model.getLowServiceNum())+1)+""); break;
|
case 9:model.setSoAttitudeNum((Integer.parseInt(model.getSoAttitudeNum())+1)+""); break;
|
case 10:model.setNoLateNum((Integer.parseInt(model.getNoLateNum())+1)+""); break;
|
case 11:model.setProcessingNum((Integer.parseInt(model.getProcessingNum())+1)+""); break;
|
case 12:model.setServiceAwarenessNum((Integer.parseInt(model.getServiceAwarenessNum())+1)+""); break;
|
case 13:model.setGoodAttitudeNum((Integer.parseInt(model.getGoodAttitudeNum())+1)+""); break;
|
case 14:model.setOnTimeNum((Integer.parseInt(model.getOnTimeNum())+1)+""); break;
|
case 15:model.setGoodProcessingNum((Integer.parseInt(model.getGoodProcessingNum())+1)+""); break;
|
case 16:model.setGoodServiceAwarenessNum((Integer.parseInt(model.getGoodServiceAwarenessNum())+1)+""); break;
|
case 17:model.setGoodPaySatisfiedNum((Integer.parseInt(model.getGoodPaySatisfiedNum())+1)+""); break;
|
case 18:model.setGoodServiceSatisfiedNum((Integer.parseInt(model.getGoodServiceSatisfiedNum())+1)+""); break;
|
case 19:model.setGreatRecyclerNum((Integer.parseInt(model.getGreatRecyclerNum())+1)+""); break;
|
default:
|
break;
|
}
|
return model;
|
}
|
|
/**
|
* 添加评价
|
* @param orderAppraiseInfo
|
*/
|
public void add(OrderAppraiseInfo orderAppraiseInfo){
|
orderAppraiseInfo.setCreateTime(cn.hutool.core.date.DateUtil.now());
|
orderAppraiseInfo.setDelFlag(Convert.toShort(Constants.DEL_NOT_FLAG));
|
orderAppraiseInfo.setContent(encodeOrDecode(orderAppraiseInfo.getContent(), 0));
|
orderAppraiseInfoMapper.insertSelective(orderAppraiseInfo);
|
}
|
|
|
/**
|
* 进行编码或解码
|
* @param type 0 :编码 1解码
|
*/
|
public String encodeOrDecode(String content,int type){
|
|
if(type==0){
|
//编码
|
if(StrUtil.isNotBlank(content)){
|
return Base64.encode(content);
|
}
|
}else if(type==1){
|
//解码
|
if(StrUtil.isNotBlank(content)&&StringUtils.isBase64(content)){
|
return Base64.decodeStr(content);
|
}
|
}
|
return content;
|
}
|
|
public List<QueryReceiverTotalListResDTO> findTagByReceive(QueryReceiverTotalListDTO queryReceiverTotalListDTO) {
|
String receiverId = queryReceiverTotalListDTO.getReceiverId();
|
List<QueryReceiverTotalListResDTO> resList=new ArrayList<>();
|
List<QueryReceiverTotalListResDTO> list=new ArrayList<>();
|
List<OrderAppraiseInfo> byReceiver = findByReceiver(receiverId);
|
|
List<ConfigInfo> tag1 = configService.findByGroup(SysConfigConstant.TAGAPPRAISE1);
|
List<ConfigInfo> tag2 =configService.findByGroup(SysConfigConstant.TAGAPPRAISE2);
|
List<ConfigInfo> tag3 =configService.findByGroup(SysConfigConstant.TAGAPPRAISE3);
|
List<ConfigInfo> tag4 =configService.findByGroup(SysConfigConstant.TAGAPPRAISE4);
|
List<ConfigInfo> tag5 = configService.findByGroup(SysConfigConstant.TAGAPPRAISE5);
|
|
aggreation(list,tag5,false);
|
aggreation(list,tag4,false);
|
aggreation(list,tag3,false);
|
aggreation(list,tag2,true);
|
aggreation(list,tag1,true);
|
|
if(CollUtil.isEmpty(byReceiver)){
|
return CollUtil.sub(list,0,8);
|
}else {
|
for (OrderAppraiseInfo orderAppraiseInfo : byReceiver) {
|
String tagCodes = orderAppraiseInfo.getTagCodes();
|
if (StrUtil.isNotBlank(tagCodes)) {
|
String[] split = tagCodes.split(",");
|
for (String s : split) {
|
//出现当前标签的次数
|
List<QueryReceiverTotalListResDTO> forList = resList.stream().filter(x -> x.getConfigTypeCode().equals(s)).collect(Collectors.toList());
|
QueryReceiverTotalListResDTO config = list.stream().filter(x -> x.getConfigTypeCode().equals(s)).collect(Collectors.toList()).get(0);
|
if (CollUtil.isEmpty(forList)) {
|
config.setTagNum(1);
|
resList.add(config);
|
} else {
|
int num = forList.get(0).getTagNum();
|
forList.get(0).setTagNum(++num);
|
}
|
}
|
}
|
}
|
return resList;
|
}
|
|
|
}
|
|
private void aggreation(List<QueryReceiverTotalListResDTO> list,List<ConfigInfo> tag,boolean negativeCommentFlag){
|
for (ConfigInfo configInfo : tag) {
|
QueryReceiverTotalListResDTO dto=new QueryReceiverTotalListResDTO();
|
dto.setConfigTypeCode(configInfo.getConfigTypeCode());
|
dto.setTagName(configInfo.getConfigValue());
|
dto.setNegativeCommentFlag(negativeCommentFlag);
|
list.add(dto);
|
}
|
}
|
}
|