Java8 Lambda 流式編程範例

package com.sitech.crmpd.service;

import com.google.common.collect.Lists;
import com.sitech.crmpd.annotation.SystemHttpLog;
import com.sitech.crmpd.domain.CustViewDataDTO;
import com.sitech.crmpd.exception.HoException;
import com.sitech.crmpd.exception.HoStatus;
import com.sitech.crmpd.mapper.ContactTaskInfoMapper;
import com.sitech.crmpd.mapper.HuaxiaoOrderMapper;
import com.sitech.crmtpd.mapper.ContactOrderMapper;
import com.sitech.crmtpd.market.domain.ContactOrder;
import com.sitech.crmtpd.market.domain.ContactOrderExample;
import lombok.extern.slf4j.Slf4j;

import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Stream;

/**
 * @oauth: qiangSW
 * @date: 2019/11/20 13:48
 * @description: com.sitech.crmpd.service
 * @doc:
 */
@Slf4j
@Service
public class ViewTaskService {

    @Autowired
    private HuaxiaoOrderMapper huaxiaoOrderMapper;
    @Autowired
    private ContactOrderMapper orderMapper;
    @Autowired
    private ContactTaskInfoMapper contactTaskInfoMapper;

    /**
     * 
     *
     * @param custId
     * @param viewItemCat
     * @return
     */
    public CustViewDataDTO custViewData(String custId, String viewItemCat) {
        List<Map> user = huaxiaoOrderMapper.selectHoldByCustId(custId);
        CustViewDataDTO custViewDataDTO = new CustViewDataDTO();
        List<CustViewDataDTO.ContactTaskList> contactTaskLists = Lists.newArrayList();
        custViewDataDTO.setViewItemCat(viewItemCat);
        custViewDataDTO.setProCode("8140000");
        return Optional.ofNullable(user)
                .filter(a -> CollectionUtils.isNotEmpty(a) && !a.get(0).isEmpty())
                .map(b -> {
                    String idNo = b.get(0).get("ID_NO").toString();
                    ContactOrderExample orderExample = new ContactOrderExample();
                    orderExample.createCriteria().andTargetObjNbrEqualTo(idNo);
                    List<ContactOrder> contactOrderList = orderMapper.selectByExample(orderExample);
                    return Optional.ofNullable(contactOrderList)
                            .filter(list -> CollectionUtils.isNotEmpty(list))
                            .map(c -> {
                                return cust(c.get(0), val -> {
                                    List<Map<String, Object>> list = Lists.newArrayList();
                                    list.addAll(contactTaskInfoMapper.taskDetail(val.getTargetObjNbr()));
                                    list.stream()
                                            .filter(map -> null != map && !map.isEmpty())
                                            .forEach(taskList -> {
                                                CustViewDataDTO.ContactTaskList createTask = custViewDataDTO.new ContactTaskList();
                                                createTask.setPushType(String.valueOf(taskList.get("PUSHTYPE")));
                                                createTask.setContactDate(String.valueOf(taskList.get("CONTACTDATE")));
                                                createTask.setContactTaskTitle(String.valueOf(taskList.get("CONTACTTASKTITLE")));
                                                createTask.setContactScript(String.valueOf(taskList.get("CONTACTSCRIPT")));
                                                createTask.setContactChlId(String.valueOf(taskList.get("CONTACTCHLID")));
                                                createTask.setCustId(custId);
                                                createTask.setCustName(String.valueOf(user.get(0).get("USER_NAME")));
                                                contactTaskLists.add(createTask);
                                            });
                                    custViewDataDTO.setContactTaskList(contactTaskLists);
                                    return custViewDataDTO;
                                });
                            }).orElseGet(() -> {
                                CustViewDataDTO.ContactTaskList createTask = custViewDataDTO.new ContactTaskList();
                                contactTaskLists.add(createTask);
                                custViewDataDTO.setContactTaskList(contactTaskLists);
                                return custViewDataDTO;
                            });
                }).orElseGet(() -> {
                    CustViewDataDTO.ContactTaskList createTask = custViewDataDTO.new ContactTaskList();
                    contactTaskLists.add(createTask);
                    custViewDataDTO.setContactTaskList(contactTaskLists);
                    return custViewDataDTO;
                });


    }

    public CustViewDataDTO cust(ContactOrder order, Function<ContactOrder, CustViewDataDTO> function) {

        CustViewDataDTO apply = function.apply(order);
        return apply;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章