package com.dderp.business.service.flycat; import com.dderp.common.api.flycat.OrderSearchService; import com.dderp.common.api.flycat.OrderStepService; import com.dderp.common.entity.order.BusinessOrder; import com.dySweetFishPlugin.elasticsearch.ESClient; import com.dderp.common.api.SupplierInitService; import com.dderp.common.base.BaseService; import com.dderp.common.datas.ESKeys; import com.dderp.common.entity.order.OrderStep; import com.dderp.common.entity.site.ERPTokenUser; import com.sweetfish.convert.json.JsonConvert; import com.sweetfish.service.Local; import com.sweetfish.service.RetResult; import com.sweetfish.util.AnyValue; import com.sweetfish.util.AutoLoad; import com.sweetfish.util.ResourceType; import org.apache.commons.lang3.StringUtils; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.sort.SortBuilders; import org.elasticsearch.search.sort.SortOrder; import org.rex.RMap; import javax.annotation.Resource; import java.time.Instant; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.stream.Collectors; /** * Created by jlutt on 2022-08-23 * 订单脚印服务 * * @author jlutt */ @AutoLoad(false) @Local @ResourceType(OrderStepService.class) public class OrderStepServiceImpl extends BaseService implements OrderStepService { @Resource private OrderSearchService orderSearchService; @Resource ESClient esClient; @Resource JsonConvert jsonConvert; @Resource SupplierInitService supplierService; @Override public void init(AnyValue config) { super.init(config); } /** * 订单结构转订单脚印结构 * * @param idOrder 订单 * @param workMemo 备注 * @param workExplain 描述 * @param currentUser 当前用户 * @return 脚印 */ @Override public OrderStep parseOrderStep(long idOrder, String workMemo, String workExplain, ERPTokenUser currentUser) { Date now = Date.from(Instant.now()); return OrderStep.newBuilder() .idOrder(idOrder) .idWorkMan(currentUser.getId()) .workMan(currentUser.getUserName()) .workMemo(workMemo) .workExplain(workExplain) .workTime(now) .workTimeLong(now.getTime()) .build(); } /** * 用于版工序反馈等需要批量写入订单脚印的场景 * * @param printOrders 订单信息列表 * @param workMemo 备注 * @param workExplain 描述 * @param currentUser 当前用户 * @return List */ @Override public List parseOrderSteps(List printOrders, String workMemo, String workExplain, ERPTokenUser currentUser) { Date now = Date.from(Instant.now()); return printOrders.stream().map((x) -> OrderStep.newBuilder() .idOrder(x.getId()) .idWorkMan(currentUser.getId()) .workMan(currentUser.getUserName()) .workMemo(workMemo) .workExplain(workExplain) .workTime(now) .workTimeLong(now.getTime()) .build()).collect(Collectors.toList()); } @Override public List parseOrderSteps(String idOrderStr, String workMemo, String workExplain, ERPTokenUser currentUser) { Date now = Date.from(Instant.now()); List orderSteps = new ArrayList<>(); if (StringUtils.isBlank(idOrderStr)) return orderSteps; return Arrays.stream(idOrderStr.split(",")).map((idOrder) -> OrderStep.newBuilder() .idOrder(Long.parseLong(idOrder)) .idWorkMan(currentUser.getId()) .workMan(currentUser.getUserName()) .workMemo(workMemo) .workExplain(workExplain) .workTime(now) .workTimeLong(now.getTime()) .build()).collect(Collectors.toList()); } /** * 获取订单脚印 * * @param idOrder 订单id * @param currentUser 当前用户 * @return 脚印list */ @Override @SuppressWarnings({"unchecked"}) public RetResult> getOrderStepList(long idOrder, ERPTokenUser currentUser, String dataSourceId, long supplierCode) { if (idOrder < 0) { return RetResult.>errorT().retcode(-1).retinfo("未传入订单id"); } RetResult orderResult = orderSearchService.getBusinessOrder(idOrder, currentUser, dataSourceId, supplierCode, null); if (!orderResult.isSuccess()) { return RetResult.error().retcode(-1).retinfo("未找到id为" + idOrder + "的订单"); } BusinessOrder esOrder = orderResult.getResult(); RMap collectionData = new RMap<>(); collectionData.put("orderCode", esOrder.getOrderCode()); collectionData.put("orderName", esOrder.getOrderName()); List stepList = searchESList(esClient, jsonConvert, OrderStep.class, null, ((sd) -> QueryBuilders.boolQuery().must(QueryBuilders.typeQuery(ESKeys.ES_DELIVER_ORDER_STEP_TYPE)) .must(QueryBuilders.termQuery("idOrder", idOrder))), null, supplierService.getDateYearESIndex(supplierCode, ESKeys.ES_DELIVER_ORDER_STEP_INDEX, 1), () -> SortBuilders.fieldSort("workTimeLong").order(SortOrder.ASC)); return RetResult.success().retcode(0).retinfo("success").result(stepList).attachRMap(collectionData); } }