commit
1dcce55d72
|
@ -0,0 +1,64 @@
|
|||
package com.api.bokang.xiao.xhny_report;
|
||||
|
||||
import aiyh.utils.Util;
|
||||
import org.apache.log4j.Logger;
|
||||
import weaver.general.StaticObj;
|
||||
import weaver.interfaces.datasource.DataSource;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.ws.rs.GET;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.core.Context;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import java.sql.CallableStatement;
|
||||
import java.sql.Connection;
|
||||
import java.sql.ResultSet;
|
||||
|
||||
|
||||
/**
|
||||
* @ClassName ReportController
|
||||
* @Author 肖博亢
|
||||
* @Date 2023/3/20 15:49
|
||||
* @Description <h1></h1>
|
||||
**/
|
||||
@Path("/xbk/xhny_report")
|
||||
public class ReportController {
|
||||
|
||||
private final Logger log = Util.getLogger();
|
||||
|
||||
/**
|
||||
* <h2>获取搜索组件信息</h2>
|
||||
* @param request 请求体
|
||||
* @param response 响应体
|
||||
* @return 请求结果
|
||||
*/
|
||||
@Path("/testDataSource")
|
||||
@GET
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public String testDataSource(@Context HttpServletRequest request, @Context HttpServletResponse response){
|
||||
DataSource ds = (DataSource) StaticObj.getServiceByFullname(("datasource.NCC"),DataSource.class);
|
||||
Connection conn = null ;
|
||||
// CallableStatement对象
|
||||
CallableStatement callableStatement = null;
|
||||
// 结果集对象
|
||||
ResultSet resultSet = null;
|
||||
try{
|
||||
conn = ds.getConnection();
|
||||
callableStatement = conn.prepareCall("{CALL kd_po_nastnumAndnassistnum(?,?,?)}");
|
||||
|
||||
callableStatement.setString(1,"GC736");
|
||||
callableStatement.setString(2,"2023-01-01");
|
||||
callableStatement.setString(3,"2023-04-01");
|
||||
|
||||
resultSet = callableStatement.executeQuery();
|
||||
if(resultSet.next()){
|
||||
log.info("数据源请求结果 ==>"+resultSet.getString("nrate"));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("远程调用存储过程失败 ==>"+Util.getErrString(e));
|
||||
}
|
||||
return "查看日志信息";
|
||||
}
|
||||
}
|
|
@ -1,6 +1,10 @@
|
|||
package weaver.bokang.xiao.xhny_report.entity;
|
||||
|
||||
import aiyh.utils.annotation.recordset.SqlDbFieldAnn;
|
||||
import lombok.Data;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.MaterialEntity;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.QuotaData;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.VendorEntity;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
@ -14,5 +18,28 @@ import java.util.List;
|
|||
@Data
|
||||
public class SourceTrackingData {
|
||||
|
||||
private List<String> vendorList;
|
||||
private Integer id;
|
||||
|
||||
/** 寻源单号 */
|
||||
@SqlDbFieldAnn("xydh")
|
||||
private String sourceTrackingCode;
|
||||
|
||||
/** 报价开始时间 */
|
||||
@SqlDbFieldAnn("bjkssj")
|
||||
private String quotaBeginDate;
|
||||
|
||||
/** 报价截止时间 */
|
||||
@SqlDbFieldAnn("bjjzsj")
|
||||
private String quotaEndDate;
|
||||
|
||||
/** 供应商列表 */
|
||||
private List<VendorEntity> sourceVendorList;
|
||||
|
||||
/** 物料列表 */
|
||||
private List<MaterialEntity> sourceMaterialList;
|
||||
|
||||
/** 最终报价数据 */
|
||||
private List<QuotaData> quotaDataList;
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
package weaver.bokang.xiao.xhny_report.entity;
|
||||
package weaver.bokang.xiao.xhny_report.entity.pojo;
|
||||
|
||||
import aiyh.utils.annotation.recordset.SqlDbFieldAnn;
|
||||
import lombok.Data;
|
|
@ -1,4 +1,4 @@
|
|||
package weaver.bokang.xiao.xhny_report.entity;
|
||||
package weaver.bokang.xiao.xhny_report.entity.pojo;
|
||||
|
||||
import aiyh.utils.annotation.recordset.SqlDbFieldAnn;
|
||||
import lombok.Data;
|
||||
|
@ -17,7 +17,7 @@ public class ConfigEntity {
|
|||
private Integer id;
|
||||
|
||||
/** 分数 */
|
||||
@SqlDbFieldAnn("fs")
|
||||
@SqlDbFieldAnn("fsz")
|
||||
private Double score;
|
||||
|
||||
/** 子项目 */
|
||||
|
@ -30,10 +30,10 @@ public class ConfigEntity {
|
|||
|
||||
/** 权重 */
|
||||
@SqlDbFieldAnn("qz")
|
||||
private String weight;
|
||||
private Double weight;
|
||||
|
||||
/** 明细项 */
|
||||
@SqlDbFieldAnn("fs")
|
||||
@SqlDbFieldAnn("mxx")
|
||||
private Integer detailItem;
|
||||
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
package weaver.bokang.xiao.xhny_report.entity.pojo;
|
||||
|
||||
import aiyh.utils.annotation.recordset.SqlDbFieldAnn;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @ClassName MaterialEntity
|
||||
* @Author 肖博亢
|
||||
* @Date 2023/3/20 11:48
|
||||
* @Description <h1></h1>
|
||||
**/
|
||||
@Data
|
||||
public class MaterialEntity {
|
||||
|
||||
/** 物料id */
|
||||
@SqlDbFieldAnn("wlid")
|
||||
private Integer materialId;
|
||||
|
||||
/** 物料编码 */
|
||||
@SqlDbFieldAnn("wlbm")
|
||||
private String materialCode;
|
||||
|
||||
/** 物料名称(产品名称) */
|
||||
@SqlDbFieldAnn("wlmc")
|
||||
private String materialName;
|
||||
|
||||
}
|
|
@ -0,0 +1,53 @@
|
|||
package weaver.bokang.xiao.xhny_report.entity.pojo;
|
||||
|
||||
import aiyh.utils.annotation.recordset.SqlDbFieldAnn;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* @ClassName QuotaData
|
||||
* @Author 肖博亢
|
||||
* @Date 2023/3/20 12:00
|
||||
* @Description <h1>最终报价数据</h1>
|
||||
**/
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
public class QuotaData {
|
||||
|
||||
/** 供应商编码 */
|
||||
@SqlDbFieldAnn("gysgsid")
|
||||
private Integer vendorId;
|
||||
|
||||
/** 物料编码 */
|
||||
@SqlDbFieldAnn("wlbm")
|
||||
private Integer materialId;
|
||||
|
||||
/** 含税报价 */
|
||||
@SqlDbFieldAnn("djbhs")
|
||||
private Double quotaValue;
|
||||
|
||||
/** 寻源单号 */
|
||||
@SqlDbFieldAnn("xjdh")
|
||||
private String sourceTrackingCode;
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
if (o == null || getClass() != o.getClass()) {
|
||||
return false;
|
||||
}
|
||||
QuotaData quotaData = (QuotaData) o;
|
||||
return materialId.equals(quotaData.materialId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(vendorId, materialId);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
package weaver.bokang.xiao.xhny_report.entity.pojo;
|
||||
|
||||
import aiyh.utils.annotation.recordset.SqlDbFieldAnn;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @ClassName VendorEntity
|
||||
* @Author 肖博亢
|
||||
* @Date 2023/3/20 11:47
|
||||
* @Description <h1></h1>
|
||||
**/
|
||||
@Data
|
||||
public class VendorEntity {
|
||||
|
||||
/** 供应商id */
|
||||
@SqlDbFieldAnn("gysid")
|
||||
private Integer vendorId;
|
||||
|
||||
/** 供应商id */
|
||||
@SqlDbFieldAnn("gsbm")
|
||||
private String vendorCode;
|
||||
|
||||
/** 供应商名称 */
|
||||
@SqlDbFieldAnn("gysmc")
|
||||
private String vendorName;
|
||||
}
|
|
@ -1,7 +1,10 @@
|
|||
package weaver.bokang.xiao.xhny_report.entity;
|
||||
package weaver.bokang.xiao.xhny_report.entity.pojo;
|
||||
|
||||
import aiyh.utils.annotation.recordset.SqlDbFieldAnn;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
@ -13,6 +16,9 @@ import java.util.List;
|
|||
**/
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class VendorMarkReport {
|
||||
|
||||
/** 数据id */
|
||||
|
@ -30,6 +36,9 @@ public class VendorMarkReport {
|
|||
@SqlDbFieldAnn("gys")
|
||||
private Integer supplier;
|
||||
|
||||
/** 供应商编码 */
|
||||
private String supplierCode;
|
||||
|
||||
/** 品类 */
|
||||
@SqlDbFieldAnn("pl")
|
||||
private String category;
|
||||
|
@ -38,6 +47,10 @@ public class VendorMarkReport {
|
|||
@SqlDbFieldAnn("bqzf")
|
||||
private double totalScore;
|
||||
|
||||
/** 寻源单号 */
|
||||
@SqlDbFieldAnn("xydh")
|
||||
private String sourceTrackingCode;
|
||||
|
||||
/** 分数明细信息 */
|
||||
private List<VendorMarkReportDt> vendorMarkReportDtList;
|
||||
|
|
@ -1,8 +1,10 @@
|
|||
package weaver.bokang.xiao.xhny_report.entity;
|
||||
package weaver.bokang.xiao.xhny_report.entity.pojo;
|
||||
|
||||
import aiyh.utils.annotation.recordset.SqlDbFieldAnn;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @ClassName VendorMarkReportDt
|
||||
|
@ -13,6 +15,8 @@ import lombok.Data;
|
|||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class VendorMarkReportDt {
|
||||
|
||||
/** 数据id */
|
||||
|
@ -31,8 +35,7 @@ public class VendorMarkReportDt {
|
|||
|
||||
/** 权重 */
|
||||
@SqlDbFieldAnn("qz")
|
||||
private String weight;
|
||||
|
||||
private Double weight;
|
||||
|
||||
/** 预估得分 */
|
||||
@SqlDbFieldAnn("ygdf")
|
|
@ -0,0 +1,78 @@
|
|||
package weaver.bokang.xiao.xhny_report.mapper;
|
||||
|
||||
import aiyh.utils.annotation.recordset.*;
|
||||
import weaver.bokang.xiao.xhny_report.entity.SourceTrackingData;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.MaterialEntity;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.QuotaData;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.VendorEntity;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @ClassName SourceTrackingMapper
|
||||
* @Author 肖博亢
|
||||
* @Date 2023/3/20 13:31
|
||||
* @Description <h1></h1>
|
||||
**/
|
||||
@SqlMapper
|
||||
public interface SourceTrackingMapper {
|
||||
|
||||
/**
|
||||
* <h2>查询询价数据列表</h2>
|
||||
* @param param 条件参数
|
||||
* @return 询价信息列表
|
||||
*/
|
||||
@Select("select id,xydh,bjkssj,bjjzsj from uf_src_rfq where bjjzsj < #{endDate} and (sfypf = 1 or sfypf is null)")
|
||||
@CollectionMappings({
|
||||
@CollectionMapping(property = "sourceVendorList", column = "id", id = @Id(value = Integer.class, methodId = 1)),
|
||||
@CollectionMapping(property = "sourceMaterialList", column = "id", id = @Id(value = Integer.class, methodId = 2)),
|
||||
@CollectionMapping(property = "quotaDataList", column = "xydh", id = @Id(value = String.class, methodId = 3)),
|
||||
})
|
||||
List<SourceTrackingData> querySourceTrackingList(@ParamMapper("param")Map<String,Object> param);
|
||||
|
||||
/**
|
||||
* <h2>查询询价单供应商数据</h2>
|
||||
* @param mainId 主数据id
|
||||
* @return 供应商列表
|
||||
*/
|
||||
@Select("select dt.gysbm gysid,dt.gysmc,company.gsbm " +
|
||||
" from uf_src_rfq_dt2 dt " +
|
||||
" inner join uf_company_info company on dt.gysbm = company.id " +
|
||||
" where dt.mainid = #{mainId}")
|
||||
@CollectionMethod(1)
|
||||
List<VendorEntity> queryVendorList(@ParamMapper("mainId")int mainId);
|
||||
|
||||
/**
|
||||
* <h2>查询询价单物料数据</h2>
|
||||
* @param mainId 主数据id
|
||||
* @return 物料列表
|
||||
*/
|
||||
@Select("select dt.wlbm wlid,dt.wlmc,mdm.wlbm " +
|
||||
" from uf_src_rfq_dt1 dt " +
|
||||
" inner join uf_mdm_item mdm on dt.wlbm = mdm.id " +
|
||||
" where dt.mainid = #{mainId}")
|
||||
@CollectionMethod(2)
|
||||
List<MaterialEntity> queryMaterialList(@ParamMapper("mainId")int mainId);
|
||||
|
||||
/**
|
||||
* <h2>查询最终报价数据数据</h2>
|
||||
* @param sourceTackingCode 寻源单号
|
||||
* @return 最终报价列表
|
||||
*/
|
||||
@Select("select main.gys,dt.wlbm,dt.djbhs,main.gysgsid,main.xjdh " +
|
||||
" from uf_src_rfq_supplier main " +
|
||||
" inner join uf_src_rfq_supplier_dt1 dt on main.id = dt.mainid " +
|
||||
"where main.xjdh = #{sourceTackingCode} and dt.djbhs is not null ")
|
||||
@CollectionMethod(3)
|
||||
List<QuotaData> queryQuotaList(@ParamMapper("sourceTackingCode")String sourceTackingCode);
|
||||
|
||||
/**
|
||||
* <h2>更新询价表是否已评分字段</h2>
|
||||
* @param sourceTrackingCode 寻原单号
|
||||
* @return 更新结果
|
||||
*/
|
||||
@Update("update uf_src_rfq set sfypf = 0 where xydh = #{sourceTrackingCode}")
|
||||
boolean updateSourceTrackingStatus(String sourceTrackingCode);
|
||||
|
||||
}
|
|
@ -2,10 +2,11 @@ package weaver.bokang.xiao.xhny_report.mapper;
|
|||
|
||||
import aiyh.utils.annotation.recordset.Select;
|
||||
import aiyh.utils.annotation.recordset.SqlMapper;
|
||||
import weaver.bokang.xiao.xhny_report.entity.CompanyEntity;
|
||||
import weaver.bokang.xiao.xhny_report.entity.ConfigEntity;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.CompanyEntity;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.ConfigEntity;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @ClassName VendorMapper
|
||||
|
@ -30,4 +31,15 @@ public interface VendorMapper {
|
|||
*/
|
||||
@Select("select * from uf_company_info")
|
||||
List<CompanyEntity> queryCompanyList();
|
||||
|
||||
/**
|
||||
* <h2>查询供应商被投诉的次数</h2>
|
||||
* @param param 条件参数
|
||||
* @return 被投诉的次数
|
||||
*/
|
||||
@Select("select count(1) from uf_kscltz main " +
|
||||
" inner join uf_kscltz_dt1 dt on main.id = dt.mainid " +
|
||||
" where ',' + CAST (dt.gys AS VARCHAR ) + ',' like #{vendorStr} and (main.tsrq between #{beginDate} and #{endDate})")
|
||||
int getBadCount(Map<String,Object> param);
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,58 @@
|
|||
package weaver.bokang.xiao.xhny_report.mapper;
|
||||
|
||||
import aiyh.utils.annotation.recordset.*;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.VendorMarkReport;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.VendorMarkReportDt;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName VendorReportMapper
|
||||
* @Author 肖博亢
|
||||
* @Date 2023/3/20 14:20
|
||||
* @Description <h1>报表数据</h1>
|
||||
**/
|
||||
@SqlMapper
|
||||
public interface VendorReportMapper {
|
||||
|
||||
/**
|
||||
* <h2>更新报表数据</h2>
|
||||
* @param vendorMarkReport 供应商评分报表
|
||||
* @return 更新结果
|
||||
*/
|
||||
@Update("update uf_vendorMarkReport set " +
|
||||
"pgksrq = #{evaluationStartDate}," +
|
||||
"pgjsrq = #{evaluationEndDate}," +
|
||||
"gys = #{supplier}," +
|
||||
"pl = #{category}," +
|
||||
"bqzf = #{totalScore}," +
|
||||
"xydh = #{sourceTrackingCode} " +
|
||||
"where id = #{id}")
|
||||
boolean updateReport(VendorMarkReport vendorMarkReport);
|
||||
|
||||
/**
|
||||
* <h2>批量插入报表明细数据</h2>
|
||||
* @param vendorMarkReportDtList 报表明细数据
|
||||
* @return 插入结果
|
||||
*/
|
||||
@BatchInsert("insert into uf_vendorMarkReport_dt1 (xm,ms,qz,sjdf,mainid) " +
|
||||
"values(#{item.project},#{item.desc},#{item.weight},#{item.score},#{mainId})")
|
||||
boolean insertReportDt(@BatchSqlArgs List<VendorMarkReportDt> vendorMarkReportDtList,@ParamMapper("mainId") int mainId);
|
||||
|
||||
/**
|
||||
* <h2>删除报表数据</h2>
|
||||
* @param ids 主键id数组
|
||||
* @return 操作结果
|
||||
*/
|
||||
@Delete("delete from uf_vendorMarkReport where id in ($t{ids})")
|
||||
boolean deleteReport(@ParamMapper("ids")String ids);
|
||||
|
||||
/**
|
||||
* <h2>删除报表明细数据</h2>
|
||||
* @param mainIds 主键数据id数组
|
||||
* @return 操作结果
|
||||
*/
|
||||
@Delete("delete from uf_vendorMarkReport_dt1 where mainid in ($t{mainIds})")
|
||||
boolean deleteReportDt(@ParamMapper("mainIds")String mainIds);
|
||||
|
||||
}
|
|
@ -5,15 +5,20 @@ import aiyh.utils.action.CusBaseCronJob;
|
|||
import aiyh.utils.annotation.ActionDesc;
|
||||
import aiyh.utils.annotation.PrintParamMark;
|
||||
import aiyh.utils.annotation.RequiredMark;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import lombok.Data;
|
||||
import weaver.bokang.xiao.xhny_report.entity.SourceTrackingData;
|
||||
import weaver.bokang.xiao.xhny_report.entity.VendorMarkReport;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.VendorEntity;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.VendorMarkReport;
|
||||
import weaver.bokang.xiao.xhny_report.mapper.SourceTrackingMapper;
|
||||
import weaver.bokang.xiao.xhny_report.mapper.VendorReportMapper;
|
||||
import weaver.bokang.xiao.xhny_report.service.ScoreChainPattern;
|
||||
import weaver.bokang.xiao.xhny_report.service.chain.AbstractScoreChain;
|
||||
import weaver.bokang.xiao.xhny_report.service.store.VendorStore;
|
||||
import weaver.general.TimeUtil;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @ClassName GenerateReportSchedule
|
||||
|
@ -30,25 +35,62 @@ public class GenerateReportSchedule extends CusBaseCronJob {
|
|||
@PrintParamMark
|
||||
private String reportModelId;
|
||||
|
||||
@RequiredMark("数据源名称")
|
||||
@PrintParamMark
|
||||
private String dataSource;
|
||||
|
||||
private SourceTrackingMapper sourceTrackingMapper = Util.getMapper(SourceTrackingMapper.class);
|
||||
|
||||
private VendorReportMapper vendorReportMapper = Util.getTransMapper(VendorReportMapper.class);
|
||||
|
||||
@Override
|
||||
public void runCode() {
|
||||
try {
|
||||
// 必填参数校验
|
||||
Util.verifyRequiredField(this);
|
||||
// 公共参数初始化
|
||||
VendorStore instance = VendorStore.getInstance();
|
||||
instance.init();
|
||||
// 获取评分处理链
|
||||
AbstractScoreChain scoreChain = ScoreChainPattern.getScoreChain();
|
||||
// 处理数据初始化
|
||||
List<VendorMarkReport> vendorMarkReportList = new ArrayList<>();
|
||||
SourceTrackingData sourceTrackingData = new SourceTrackingData();
|
||||
// 进行供应商评分
|
||||
//公共参数初始化
|
||||
VendorStore instance = VendorStore.getInstance();
|
||||
instance.init(dataSource);
|
||||
// 获取评分处理链
|
||||
AbstractScoreChain scoreChain = ScoreChainPattern.getScoreChain();
|
||||
log.info(scoreChain);
|
||||
//处理数据初始化
|
||||
Map<String,Object> queryParam = new HashMap<>(8);
|
||||
queryParam.put("endDate", TimeUtil.getCurrentTimeString());
|
||||
List<SourceTrackingData> sourceTrackingDataList = sourceTrackingMapper.querySourceTrackingList(queryParam);
|
||||
if(Objects.isNull(sourceTrackingDataList) || sourceTrackingDataList.isEmpty()){
|
||||
log.info("当天没有需要统计的供应商评分数据");
|
||||
return;
|
||||
}
|
||||
log.info("询价单信息 sourceTrackingDataList ==>"+ JSON.toJSONString(sourceTrackingDataList));
|
||||
for (SourceTrackingData sourceTrackingData : sourceTrackingDataList) {
|
||||
List<VendorEntity> sourceVendorList = sourceTrackingData.getSourceVendorList();
|
||||
List<VendorMarkReport> vendorMarkReportList = sourceVendorList.stream().map(item -> VendorMarkReport.builder()
|
||||
.supplier(item.getVendorId())
|
||||
.evaluationStartDate(sourceTrackingData.getQuotaBeginDate())
|
||||
.evaluationEndDate(sourceTrackingData.getQuotaEndDate())
|
||||
.sourceTrackingCode(sourceTrackingData.getSourceTrackingCode())
|
||||
.build()).collect(Collectors.toList());
|
||||
//进行供应商评分
|
||||
scoreChain.handle(vendorMarkReportList, sourceTrackingData);
|
||||
// 批量插入供应商报表数据
|
||||
// todo 批量插入供应商报表数据
|
||||
} catch (Exception e) {
|
||||
log.error("定时任务执行异常 ==>" + Util.getErrString(e));
|
||||
//批量插入供应商报表数据
|
||||
List<Integer> reportIdList = new ArrayList<>();
|
||||
try {
|
||||
log.info(String.format("单次寻源[%s] 供应商评分信息 ==>[%s]",sourceTrackingData.getSourceTrackingCode(),JSON.toJSONString(vendorMarkReportList)));
|
||||
for (VendorMarkReport vendorMarkReport : vendorMarkReportList) {
|
||||
int dataId = Util.getModeDataId("uf_vendorMarkReport", Util.getIntValue(reportModelId), 1);
|
||||
vendorMarkReport.setId(dataId);
|
||||
reportIdList.add(dataId);
|
||||
vendorReportMapper.updateReport(vendorMarkReport);
|
||||
vendorReportMapper.insertReportDt(vendorMarkReport.getVendorMarkReportDtList(),dataId);
|
||||
}
|
||||
sourceTrackingMapper.updateSourceTrackingStatus(sourceTrackingData.getSourceTrackingCode());
|
||||
Util.rebuildModeDataShareByAsyncList(1,Util.getIntValue(reportModelId),reportIdList);
|
||||
Util.commitTransMapper(VendorReportMapper.class);
|
||||
}catch (Exception e){
|
||||
Util.rollbackTransMapper(VendorReportMapper.class);
|
||||
if(!reportIdList.isEmpty()) {
|
||||
String ids = reportIdList.stream().map(Util::null2String).collect(Collectors.joining(","));
|
||||
vendorReportMapper.deleteReport(ids);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@ import aiyh.utils.Util;
|
|||
import aiyh.utils.excention.CustomerException;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import org.apache.log4j.Logger;
|
||||
import weaver.bokang.xiao.xhny_report.entity.ConfigEntity;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.ConfigEntity;
|
||||
import weaver.bokang.xiao.xhny_report.mapper.VendorMapper;
|
||||
import weaver.bokang.xiao.xhny_report.service.chain.*;
|
||||
|
||||
|
@ -51,6 +51,7 @@ public class ScoreChainPattern {
|
|||
logger.info(String.format("评分配置信息: < %s >", JSON.toJSONString(configEntities)));
|
||||
Map<Integer, List<ConfigEntity>> configMap = configEntities.stream().collect(Collectors.groupingBy(ConfigEntity::getChildItem));
|
||||
AbstractScoreChain abstractScoreChain = null;
|
||||
AbstractScoreChain pointerChain = null;
|
||||
for (Map.Entry<Integer, List<ConfigEntity>> entry : configMap.entrySet()) {
|
||||
AbstractScoreChain tempChain = SCORE_CHAIN_MAP.get(entry.getKey());
|
||||
if(Objects.isNull(tempChain)){
|
||||
|
@ -60,10 +61,12 @@ public class ScoreChainPattern {
|
|||
if(Objects.isNull(abstractScoreChain)){
|
||||
abstractScoreChain = SCORE_CHAIN_MAP.get(entry.getKey());
|
||||
abstractScoreChain.setScoreConfigList(entry.getValue());
|
||||
pointerChain = abstractScoreChain;
|
||||
}else {
|
||||
AbstractScoreChain nexChain = SCORE_CHAIN_MAP.get(entry.getKey());
|
||||
nexChain.setScoreConfigList(entry.getValue());
|
||||
abstractScoreChain.nextScoreChain(nexChain);
|
||||
pointerChain.nextScoreChain(nexChain);
|
||||
pointerChain = nexChain;
|
||||
}
|
||||
}
|
||||
if(Objects.isNull(abstractScoreChain)){
|
||||
|
|
|
@ -2,13 +2,14 @@ package weaver.bokang.xiao.xhny_report.service.chain;
|
|||
|
||||
import aiyh.utils.Util;
|
||||
import org.apache.log4j.Logger;
|
||||
import weaver.bokang.xiao.xhny_report.entity.ConfigEntity;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.ConfigEntity;
|
||||
import weaver.bokang.xiao.xhny_report.entity.SourceTrackingData;
|
||||
import weaver.bokang.xiao.xhny_report.entity.VendorMarkReport;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.VendorMarkReport;
|
||||
import weaver.bokang.xiao.xhny_report.service.store.VendorStore;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
package weaver.bokang.xiao.xhny_report.service.chain;
|
||||
|
||||
import weaver.bokang.xiao.xhny_report.entity.*;
|
||||
import weaver.bokang.xiao.xhny_report.entity.SourceTrackingData;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.*;
|
||||
import weaver.bokang.xiao.xhny_report.service.util.VendorUtil;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
|
@ -31,20 +33,14 @@ public class AccountPeriodChain extends AbstractScoreChain{
|
|||
Integer supplier = vendorMarkReport.getSupplier();
|
||||
CompanyEntity companyEntity = companyMap.get(supplier);
|
||||
ConfigEntity configEntity = this.configEntityMap.get(mappingConfig.get(companyEntity.getAccountPeriod()));
|
||||
double score = 0.00;
|
||||
double score = 0.0;
|
||||
if(Objects.nonNull(configEntity)){
|
||||
score = configEntity.getScore();
|
||||
score = VendorUtil.getScoreByConfig(configEntity);
|
||||
}else {
|
||||
configEntity = this.configEntityMap.get(mappingConfig.get(0));
|
||||
}
|
||||
List<VendorMarkReportDt> vendorMarkReportDtList = vendorMarkReport.getVendorMarkReportDtList();
|
||||
vendorMarkReportDtList = Objects.isNull(vendorMarkReportDtList) ? new ArrayList<>() : vendorMarkReportDtList;
|
||||
vendorMarkReportDtList.add(
|
||||
VendorMarkReportDt.builder()
|
||||
.score(score)
|
||||
.project(configEntity.getChildItem())
|
||||
.weight(configEntity.getWeight())
|
||||
.desc("账期评分").build());
|
||||
double totalScore = vendorMarkReport.getTotalScore();
|
||||
vendorMarkReport.setTotalScore(totalScore + score);
|
||||
logger.info(String.format("账期评分: 供应商==>[%s],评分==>[%s]",vendorMarkReport.getSupplierCode(),score));
|
||||
VendorUtil.makeReportData(vendorMarkReport,configEntity,score,"账期评分");
|
||||
}
|
||||
//让下一个链对象评分
|
||||
if(Objects.nonNull(this.nextAbstractScoreChain)) {
|
||||
|
|
|
@ -1,9 +1,21 @@
|
|||
package weaver.bokang.xiao.xhny_report.service.chain;
|
||||
|
||||
import aiyh.utils.Util;
|
||||
import weaver.bokang.xiao.xhny_report.entity.SourceTrackingData;
|
||||
import weaver.bokang.xiao.xhny_report.entity.VendorMarkReport;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.*;
|
||||
import weaver.bokang.xiao.xhny_report.service.util.VendorUtil;
|
||||
import weaver.general.StaticObj;
|
||||
import weaver.interfaces.datasource.DataSource;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.ws.rs.core.Context;
|
||||
import java.sql.CallableStatement;
|
||||
import java.sql.Connection;
|
||||
import java.sql.ResultSet;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
|
@ -16,11 +28,61 @@ public class ArrivalRateChain extends AbstractScoreChain{
|
|||
|
||||
@Override
|
||||
public void handle(List<VendorMarkReport> vendorMarkReportList, SourceTrackingData sourceTrackingData) {
|
||||
//TODO 具体评分逻辑
|
||||
|
||||
//具体评分逻辑
|
||||
Map<Integer, ConfigEntity> configEntityMap = this.configEntityMap;
|
||||
for (VendorMarkReport vendorMarkReport : vendorMarkReportList) {
|
||||
double arrivalRate = this.getArrivalRateByCall(vendorMarkReport.getSupplierCode(), sourceTrackingData.getQuotaBeginDate(), sourceTrackingData.getQuotaEndDate());
|
||||
int scoreId = 0;
|
||||
if(arrivalRate >= 1){
|
||||
//到货率100%
|
||||
scoreId = 30;
|
||||
} else if(arrivalRate >= 0.8){
|
||||
//到货率 80% - 100%
|
||||
scoreId = 31;
|
||||
} else {
|
||||
//到货率 80% 以下
|
||||
scoreId = 32;
|
||||
}
|
||||
ConfigEntity configEntity = configEntityMap.get(scoreId);
|
||||
double score = VendorUtil.getScoreByConfig(configEntity);
|
||||
logger.info(String.format("到货率评分: 供应商==>[%s],评分==>[%s]",vendorMarkReport.getSupplierCode(),score));
|
||||
VendorUtil.makeReportData(vendorMarkReport,configEntity,score,"到货率评分");
|
||||
}
|
||||
//让下一个链对象评分
|
||||
if(Objects.nonNull(this.nextAbstractScoreChain)) {
|
||||
this.nextAbstractScoreChain.handle(vendorMarkReportList, sourceTrackingData);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* <h2>通过存储过程获取到货率</h2>
|
||||
* @param vendorCode 供应商编码
|
||||
* @return 到货率
|
||||
*/
|
||||
private double getArrivalRateByCall(String vendorCode,String beginDate,String endDate){
|
||||
double arrivalRate = 0.00;
|
||||
DataSource ds = (DataSource) StaticObj.getServiceByFullname(("datasource."+this.vendorStore.getDataSource()),DataSource.class);
|
||||
Connection conn = null ;
|
||||
// CallableStatement对象
|
||||
CallableStatement callableStatement = null;
|
||||
// 结果集对象
|
||||
ResultSet resultSet = null;
|
||||
try{
|
||||
conn = ds.getConnection();
|
||||
callableStatement = conn.prepareCall("{CALL kd_po_nastnumAndnassistnum(?,?,?)}");
|
||||
|
||||
callableStatement.setString(1,vendorCode);
|
||||
callableStatement.setString(2,beginDate);
|
||||
callableStatement.setString(3,endDate);
|
||||
|
||||
resultSet = callableStatement.executeQuery();
|
||||
if(resultSet.next()){
|
||||
logger.info("数据源请求结果 ==>"+resultSet.getString("nrate"));
|
||||
arrivalRate = Util.getDoubleValue(resultSet.getString("nrate"));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
logger.error("远程调用存储过程失败 ==>"+ Util.getErrString(e));
|
||||
}
|
||||
return arrivalRate;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,10 +1,14 @@
|
|||
package weaver.bokang.xiao.xhny_report.service.chain;
|
||||
|
||||
import aiyh.utils.Util;
|
||||
import weaver.bokang.xiao.xhny_report.entity.SourceTrackingData;
|
||||
import weaver.bokang.xiao.xhny_report.entity.VendorMarkReport;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.ConfigEntity;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.VendorMarkReport;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.VendorMarkReportDt;
|
||||
import weaver.bokang.xiao.xhny_report.mapper.VendorMapper;
|
||||
import weaver.bokang.xiao.xhny_report.service.util.VendorUtil;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* @ClassName BadCountChain
|
||||
|
@ -13,10 +17,40 @@ import java.util.Objects;
|
|||
* @Description <h1>不良品数评分</h1>
|
||||
**/
|
||||
public class BadCountChain extends AbstractScoreChain{
|
||||
|
||||
private final VendorMapper vendorMapper = Util.getMapper(VendorMapper.class);
|
||||
|
||||
@Override
|
||||
public void handle(List<VendorMarkReport> vendorMarkReportList, SourceTrackingData sourceTrackingData) {
|
||||
//TODO 具体评分逻辑
|
||||
|
||||
//具体评分逻辑
|
||||
for (VendorMarkReport vendorMarkReport : vendorMarkReportList) {
|
||||
Map<String,Object> queryParam = new HashMap<>();
|
||||
queryParam.put("beginDate",sourceTrackingData.getQuotaBeginDate());
|
||||
queryParam.put("endDate",sourceTrackingData.getQuotaEndDate());
|
||||
queryParam.put("vendorStr",',' + vendorMarkReport.getSupplier() + ',');
|
||||
int badCount = vendorMapper.getBadCount(queryParam);
|
||||
int scoreId = 0;
|
||||
if(badCount > 10){
|
||||
//11次以上客诉
|
||||
scoreId = 37;
|
||||
} else if(badCount >= 6){
|
||||
//6-10客诉
|
||||
scoreId = 36;
|
||||
} else if(badCount >= 3){
|
||||
//3-5次客诉
|
||||
scoreId = 35;
|
||||
}else if(badCount >= 1){
|
||||
//1-2次客诉
|
||||
scoreId = 34;
|
||||
}else {
|
||||
//无客诉
|
||||
scoreId = 33;
|
||||
}
|
||||
ConfigEntity configEntity = configEntityMap.get(scoreId);
|
||||
double score = VendorUtil.getScoreByConfig(configEntity);
|
||||
logger.info(String.format("不良品数评分: 供应商==>[%s],评分==>[%s]",vendorMarkReport.getSupplierCode(),score));
|
||||
VendorUtil.makeReportData(vendorMarkReport,configEntity,score,"不良品数评分");
|
||||
}
|
||||
//让下一个链对象评分
|
||||
if(Objects.nonNull(this.nextAbstractScoreChain)) {
|
||||
this.nextAbstractScoreChain.handle(vendorMarkReportList, sourceTrackingData);
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
package weaver.bokang.xiao.xhny_report.service.chain;
|
||||
|
||||
import weaver.bokang.xiao.xhny_report.entity.*;
|
||||
import weaver.bokang.xiao.xhny_report.entity.SourceTrackingData;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.*;
|
||||
import weaver.bokang.xiao.xhny_report.service.util.VendorUtil;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
|
@ -36,20 +38,14 @@ public class DeliveryCycleChain extends AbstractScoreChain{
|
|||
Integer supplier = vendorMarkReport.getSupplier();
|
||||
CompanyEntity companyEntity = companyMap.get(supplier);
|
||||
ConfigEntity configEntity = this.configEntityMap.get(mappingConfig.get(companyEntity.getDeliveryCycle()));
|
||||
double score = 0.00;
|
||||
double score = 0.0;
|
||||
if(Objects.nonNull(configEntity)){
|
||||
score = configEntity.getScore();
|
||||
score = VendorUtil.getScoreByConfig(configEntity);
|
||||
}else {
|
||||
configEntity = this.configEntityMap.get(mappingConfig.get(0));
|
||||
}
|
||||
List<VendorMarkReportDt> vendorMarkReportDtList = vendorMarkReport.getVendorMarkReportDtList();
|
||||
vendorMarkReportDtList = Objects.isNull(vendorMarkReportDtList) ? new ArrayList<>() : vendorMarkReportDtList;
|
||||
vendorMarkReportDtList.add(
|
||||
VendorMarkReportDt.builder()
|
||||
.score(score)
|
||||
.project(configEntity.getChildItem())
|
||||
.weight(configEntity.getWeight())
|
||||
.desc("配送周期评分").build());
|
||||
double totalScore = vendorMarkReport.getTotalScore();
|
||||
vendorMarkReport.setTotalScore(totalScore + score);
|
||||
logger.info(String.format("配送周期评分: 供应商==>[%s],评分==>[%s]",vendorMarkReport.getSupplierCode(),score));
|
||||
VendorUtil.makeReportData(vendorMarkReport,configEntity,score,"配送周期评分");
|
||||
}
|
||||
//让下一个链对象评分
|
||||
if(Objects.nonNull(this.nextAbstractScoreChain)) {
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
package weaver.bokang.xiao.xhny_report.service.chain;
|
||||
|
||||
import weaver.bokang.xiao.xhny_report.entity.SourceTrackingData;
|
||||
import weaver.bokang.xiao.xhny_report.entity.VendorMarkReport;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.*;
|
||||
import weaver.bokang.xiao.xhny_report.service.util.VendorUtil;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @ClassName MoneyAmountChain
|
||||
|
@ -15,11 +17,73 @@ import java.util.Objects;
|
|||
public class MoneyAmountChain extends AbstractScoreChain{
|
||||
@Override
|
||||
public void handle(List<VendorMarkReport> vendorMarkReportList, SourceTrackingData sourceTrackingData) {
|
||||
//TODO 具体评分逻辑
|
||||
logger.info(" MoneyAmountChain deal 金额数评分 ");
|
||||
//具体评分逻辑
|
||||
List<QuotaData> quotaDataList = sourceTrackingData.getQuotaDataList();
|
||||
//按供应商将报价信息分组
|
||||
Map<Integer, List<QuotaData>> vendorQuotaMap = quotaDataList.stream().collect(Collectors.groupingBy(QuotaData::getVendorId));
|
||||
//初始化供应商评分map集合
|
||||
Map<Integer, Integer> vendorScoreMap = vendorMarkReportList.stream().collect(Collectors.toMap(
|
||||
VendorMarkReport::getSupplier,
|
||||
v -> -1
|
||||
));
|
||||
//供应商都进行了报价,取出每个供应商的物料报价组成新的list
|
||||
List<List<QuotaData>> sourceList = new ArrayList<>();
|
||||
if(vendorQuotaMap.size() == vendorMarkReportList.size()){
|
||||
Set<Map.Entry<Integer, List<QuotaData>>> entries = vendorQuotaMap.entrySet();
|
||||
for (Map.Entry<Integer, List<QuotaData>> entry : entries) {
|
||||
sourceList.add(entry.getValue());
|
||||
}
|
||||
}
|
||||
//求出每个供应商都报价的物料(求交集)
|
||||
List<QuotaData> retainQuotaList = VendorUtil.retainElementList(sourceList);
|
||||
if(!retainQuotaList.isEmpty()){
|
||||
//统计报价总和
|
||||
Map<Integer, Double> quotaScoreMap = vendorQuotaMap.entrySet().stream()
|
||||
.collect(Collectors.toMap(
|
||||
Map.Entry::getKey,
|
||||
v -> v.getValue().stream().filter(retainQuotaList::contains).mapToDouble(QuotaData::getQuotaValue).sum())
|
||||
);
|
||||
//统计报价最小值
|
||||
Optional<Map.Entry<Integer, Double>> min = quotaScoreMap.entrySet().stream().min(Map.Entry.comparingByValue());
|
||||
|
||||
if(min.isPresent()){
|
||||
double minValue = min.get().getValue();
|
||||
for (VendorMarkReport vendorMarkReport : vendorMarkReportList) {
|
||||
Integer supplier = vendorMarkReport.getSupplier();
|
||||
double quotaStore = quotaScoreMap.get(supplier);
|
||||
int scoreId;
|
||||
if(new BigDecimal(quotaStore).compareTo(new BigDecimal(minValue)) == 0){
|
||||
//最小值
|
||||
scoreId = 20;
|
||||
}else {
|
||||
//其他
|
||||
scoreId = 21;
|
||||
}
|
||||
|
||||
vendorScoreMap.put(supplier,scoreId);
|
||||
}
|
||||
}
|
||||
}
|
||||
//整理评分数据
|
||||
for (VendorMarkReport vendorMarkReport : vendorMarkReportList) {
|
||||
Integer supplier = vendorMarkReport.getSupplier();
|
||||
double score = 0.0;
|
||||
ConfigEntity configEntity = this.configEntityMap.get(21);
|
||||
int scoreId = vendorScoreMap.get(supplier);
|
||||
if(scoreId > -1){
|
||||
configEntity = this.configEntityMap.get(scoreId);
|
||||
score = VendorUtil.getScoreByConfig(configEntity);
|
||||
}
|
||||
logger.info(String.format("金额数评分: 供应商==>[%s],评分==>[%s]",vendorMarkReport.getSupplierCode(),score));
|
||||
VendorUtil.makeReportData(vendorMarkReport,configEntity,score,"金额数评分");
|
||||
}
|
||||
//让下一个链对象评分
|
||||
if(Objects.nonNull(this.nextAbstractScoreChain)) {
|
||||
this.nextAbstractScoreChain.handle(vendorMarkReportList, sourceTrackingData);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
package weaver.bokang.xiao.xhny_report.service.chain;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import weaver.bokang.xiao.xhny_report.entity.*;
|
||||
import weaver.bokang.xiao.xhny_report.entity.SourceTrackingData;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.*;
|
||||
import weaver.bokang.xiao.xhny_report.service.util.VendorUtil;
|
||||
|
||||
|
||||
import java.util.*;
|
||||
|
@ -18,13 +20,13 @@ public class OrderRequirementChain extends AbstractScoreChain{
|
|||
private final Map<Integer,Integer> mappingConfig = new HashMap<>();
|
||||
|
||||
{
|
||||
mappingConfig.put(0,0);
|
||||
mappingConfig.put(1,0);
|
||||
mappingConfig.put(0,38);
|
||||
mappingConfig.put(1,33);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle(List<VendorMarkReport> vendorMarkReportList, SourceTrackingData sourceTrackingData) {
|
||||
//TODO 具体评分逻辑
|
||||
//具体评分逻辑
|
||||
logger.info(" OrderRequirementChain deal 起订要求评分处理 ");
|
||||
Map<Integer, CompanyEntity> companyMap = vendorStore.getCompanyMap();
|
||||
for (VendorMarkReport vendorMarkReport : vendorMarkReportList) {
|
||||
|
@ -32,20 +34,12 @@ public class OrderRequirementChain extends AbstractScoreChain{
|
|||
CompanyEntity companyEntity = companyMap.get(supplier);
|
||||
int configEntityId = StringUtils.isNotBlank(companyEntity.getOrderRequire()) ? 0 : 1;
|
||||
ConfigEntity configEntity = this.configEntityMap.get(mappingConfig.get(configEntityId));
|
||||
double score = 0.00;
|
||||
if(Objects.nonNull(configEntity)){
|
||||
score = configEntity.getScore();
|
||||
if(Objects.isNull(configEntity)){
|
||||
logger.error("OrderRequirementChain 起订要求评分配置为设置 "+companyEntity);
|
||||
}
|
||||
List<VendorMarkReportDt> vendorMarkReportDtList = vendorMarkReport.getVendorMarkReportDtList();
|
||||
vendorMarkReportDtList = Objects.isNull(vendorMarkReportDtList) ? new ArrayList<>() : vendorMarkReportDtList;
|
||||
vendorMarkReportDtList.add(
|
||||
VendorMarkReportDt.builder()
|
||||
.score(score)
|
||||
.project(configEntity.getChildItem())
|
||||
.weight(configEntity.getWeight())
|
||||
.desc("起订要求评分").build());
|
||||
double totalScore = vendorMarkReport.getTotalScore();
|
||||
vendorMarkReport.setTotalScore(totalScore + score);
|
||||
double score = VendorUtil.getScoreByConfig(configEntity);
|
||||
logger.info(String.format("起订要求评分: 供应商==>[%s],评分==>[%s]",vendorMarkReport.getSupplierCode(),score));
|
||||
VendorUtil.makeReportData(vendorMarkReport,configEntity,score,"起订要求评分");
|
||||
}
|
||||
//让下一个链对象评分
|
||||
if(Objects.nonNull(this.nextAbstractScoreChain)) {
|
||||
|
|
|
@ -1,23 +1,55 @@
|
|||
package weaver.bokang.xiao.xhny_report.service.chain;
|
||||
|
||||
import weaver.bokang.xiao.xhny_report.entity.SourceTrackingData;
|
||||
import weaver.bokang.xiao.xhny_report.entity.VendorMarkReport;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.ConfigEntity;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.QuotaData;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.VendorMarkReport;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.VendorMarkReportDt;
|
||||
import weaver.bokang.xiao.xhny_report.service.util.VendorUtil;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @ClassName QuotationCompleteChain
|
||||
* @Author 肖博亢
|
||||
* @Date 2023/3/17 15:41
|
||||
* @Description <h1>报价完整信评分</h1>
|
||||
* @Description <h1>报价完整性评分</h1>
|
||||
**/
|
||||
public class QuotationCompleteChain extends AbstractScoreChain {
|
||||
|
||||
@Override
|
||||
public void handle(List<VendorMarkReport> vendorMarkReportList, SourceTrackingData sourceTrackingData) {
|
||||
//TODO 具体评分逻辑
|
||||
|
||||
logger.info(" QuotationCompleteChain deal 报价完整性评分 ");
|
||||
//具体评分逻辑
|
||||
List<QuotaData> quotaDataList = sourceTrackingData.getQuotaDataList();
|
||||
//按供应商将报价信息分组
|
||||
Map<Integer, List<QuotaData>> vendorQuotaMap = quotaDataList.stream().collect(Collectors.groupingBy(QuotaData::getVendorId));
|
||||
//整理评分数据
|
||||
for (VendorMarkReport vendorMarkReport : vendorMarkReportList) {
|
||||
Integer supplier = vendorMarkReport.getSupplier();
|
||||
//默认报价回复率<70%
|
||||
int scoreId = 26;
|
||||
if(vendorQuotaMap.containsKey(supplier)){
|
||||
int quotaCount = vendorQuotaMap.get(supplier).size();
|
||||
int sourceMaterialCount = sourceTrackingData.getSourceMaterialList().size();
|
||||
double proportion = quotaCount * 1.0 / sourceMaterialCount;
|
||||
if(proportion >= 0.95){
|
||||
//报价回复率>=95%
|
||||
scoreId = 24;
|
||||
}else if(proportion >= 0.7){
|
||||
//70%=<报价回复率<95%
|
||||
scoreId = 25;
|
||||
}
|
||||
}
|
||||
ConfigEntity configEntity = this.configEntityMap.get(scoreId);
|
||||
double score = VendorUtil.getScoreByConfig(configEntity);
|
||||
logger.info(String.format("报价完整性评分: 供应商==>[%s],评分==>[%s]",vendorMarkReport.getSupplierCode(),score));
|
||||
VendorUtil.makeReportData(vendorMarkReport,configEntity,score,"报价完整性评分");
|
||||
}
|
||||
//让下一个链对象评分
|
||||
if(Objects.nonNull(this.nextAbstractScoreChain)) {
|
||||
this.nextAbstractScoreChain.handle(vendorMarkReportList, sourceTrackingData);
|
||||
|
|
|
@ -1,10 +1,15 @@
|
|||
package weaver.bokang.xiao.xhny_report.service.chain;
|
||||
|
||||
import weaver.bokang.xiao.xhny_report.entity.SourceTrackingData;
|
||||
import weaver.bokang.xiao.xhny_report.entity.VendorMarkReport;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.ConfigEntity;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.QuotaData;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.VendorMarkReport;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.VendorMarkReportDt;
|
||||
import weaver.bokang.xiao.xhny_report.service.util.VendorUtil;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @ClassName QuotationNumberChain
|
||||
|
@ -16,8 +21,72 @@ public class QuotationNumberChain extends AbstractScoreChain{
|
|||
|
||||
@Override
|
||||
public void handle(List<VendorMarkReport> vendorMarkReportList, SourceTrackingData sourceTrackingData) {
|
||||
//TODO 具体评分逻辑
|
||||
|
||||
logger.info(" QuotationNumberChain deal 报价数评分 ");
|
||||
//具体评分逻辑
|
||||
List<QuotaData> quotaDataList = sourceTrackingData.getQuotaDataList();
|
||||
//按供应商将报价信息分组
|
||||
Map<Integer, List<QuotaData>> vendorQuotaMap = quotaDataList.stream().collect(Collectors.groupingBy(QuotaData::getVendorId));
|
||||
//初始化供应商评分map集合
|
||||
Map<Integer, Integer> vendorScoreMap = vendorMarkReportList.stream().collect(Collectors.toMap(
|
||||
VendorMarkReport::getSupplier,
|
||||
v -> -1
|
||||
));
|
||||
//供应商都进行了报价,取出每个供应商的物料报价组成新的list
|
||||
List<List<QuotaData>> sourceList = new ArrayList<>();
|
||||
if(vendorQuotaMap.size() == vendorMarkReportList.size()){
|
||||
Set<Map.Entry<Integer, List<QuotaData>>> entries = vendorQuotaMap.entrySet();
|
||||
for (Map.Entry<Integer, List<QuotaData>> entry : entries) {
|
||||
sourceList.add(entry.getValue());
|
||||
}
|
||||
}
|
||||
//求出每个供应商都报价的物料(求交集)
|
||||
List<QuotaData> retainQuotaList = VendorUtil.retainElementList(sourceList);
|
||||
if(!retainQuotaList.isEmpty()) {
|
||||
//过滤出交集部分的物料报价
|
||||
Map<Integer, List<QuotaData>> materialQuotaMap = quotaDataList.stream()
|
||||
.filter(retainQuotaList::contains)
|
||||
.collect(Collectors.groupingBy(QuotaData::getMaterialId));
|
||||
//统计每个物料报价的最低值
|
||||
Map<Integer, Double> materialMinMap = materialQuotaMap.entrySet().stream().collect(Collectors.toMap(
|
||||
Map.Entry::getKey,
|
||||
v -> v.getValue().stream()
|
||||
.min(Comparator.comparing(QuotaData::getQuotaValue))
|
||||
.get().getQuotaValue()
|
||||
));
|
||||
//统计每个供应商报价最低物料数量
|
||||
Map<Integer, Integer> minQuotaCount = vendorQuotaMap.entrySet().stream().collect(Collectors.toMap(
|
||||
Map.Entry::getKey,
|
||||
v -> (int) v.getValue().stream().filter(item -> {
|
||||
Integer materialId = item.getMaterialId();
|
||||
Double quotaValue = item.getQuotaValue();
|
||||
return materialMinMap.containsKey(materialId) && new BigDecimal(quotaValue).compareTo(BigDecimal.valueOf(materialMinMap.get(materialId))) == 0;
|
||||
}).count()
|
||||
));
|
||||
//统计出报价最低 最多的次数
|
||||
Integer maxCount = minQuotaCount.entrySet().stream().max(Map.Entry.comparingByValue()).get().getValue();
|
||||
for (Map.Entry<Integer, Integer> entry : minQuotaCount.entrySet()) {
|
||||
if(entry.getValue().equals(maxCount)){
|
||||
//报价数最低的最多
|
||||
vendorScoreMap.put(entry.getKey(),18);
|
||||
}else {
|
||||
//其他
|
||||
vendorScoreMap.put(entry.getKey(),19);
|
||||
}
|
||||
}
|
||||
}
|
||||
//整理评分数据
|
||||
for (VendorMarkReport vendorMarkReport : vendorMarkReportList) {
|
||||
Integer supplier = vendorMarkReport.getSupplier();
|
||||
double score = 0.0;
|
||||
ConfigEntity configEntity = this.configEntityMap.get(18);
|
||||
int scoreId = vendorScoreMap.get(supplier);
|
||||
if(scoreId > -1){
|
||||
configEntity = this.configEntityMap.get(scoreId);
|
||||
score = VendorUtil.getScoreByConfig(configEntity);
|
||||
}
|
||||
logger.info(String.format("报价数评分: 供应商==>[%s],评分==>[%s]",vendorMarkReport.getSupplierCode(),score));
|
||||
VendorUtil.makeReportData(vendorMarkReport,configEntity,score,"报价数评分");
|
||||
}
|
||||
//让下一个链对象评分
|
||||
if(Objects.nonNull(this.nextAbstractScoreChain)) {
|
||||
this.nextAbstractScoreChain.handle(vendorMarkReportList, sourceTrackingData);
|
||||
|
|
|
@ -1,10 +1,15 @@
|
|||
package weaver.bokang.xiao.xhny_report.service.chain;
|
||||
|
||||
import weaver.bokang.xiao.xhny_report.entity.SourceTrackingData;
|
||||
import weaver.bokang.xiao.xhny_report.entity.VendorMarkReport;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.ConfigEntity;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.QuotaData;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.VendorMarkReport;
|
||||
import weaver.bokang.xiao.xhny_report.service.util.VendorUtil;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @ClassName QuotationTimeChain
|
||||
|
@ -16,8 +21,20 @@ public class QuotationTimeChain extends AbstractScoreChain{
|
|||
|
||||
@Override
|
||||
public void handle(List<VendorMarkReport> vendorMarkReportList, SourceTrackingData sourceTrackingData) {
|
||||
//TODO 具体评分逻辑
|
||||
|
||||
logger.info(" QuotationTimeChain deal 报价及时率评分 ");
|
||||
//具体评分逻辑
|
||||
List<QuotaData> quotaDataList = sourceTrackingData.getQuotaDataList();
|
||||
//按供应商将报价信息分组
|
||||
Map<Integer, List<QuotaData>> vendorQuotaMap = quotaDataList.stream().collect(Collectors.groupingBy(QuotaData::getVendorId));
|
||||
for (VendorMarkReport vendorMarkReport : vendorMarkReportList) {
|
||||
Integer supplier = vendorMarkReport.getSupplier();
|
||||
//供应商报过价(及时回复)为27;未报价(未及时回复)则为28
|
||||
int configId = vendorQuotaMap.containsKey(supplier) ? 27 : 28;
|
||||
ConfigEntity configEntity = this.configEntityMap.get(configId);
|
||||
double score = VendorUtil.getScoreByConfig(configEntity);
|
||||
logger.info(String.format("报价及时率评分: 供应商==>[%s],评分==>[%s]",vendorMarkReport.getSupplierCode(),score));
|
||||
VendorUtil.makeReportData(vendorMarkReport,configEntity,score,"报价及时率评分");
|
||||
}
|
||||
//让下一个链对象评分
|
||||
if(Objects.nonNull(this.nextAbstractScoreChain)) {
|
||||
this.nextAbstractScoreChain.handle(vendorMarkReportList, sourceTrackingData);
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
package weaver.bokang.xiao.xhny_report.service.chain;
|
||||
|
||||
import weaver.bokang.xiao.xhny_report.entity.*;
|
||||
import weaver.bokang.xiao.xhny_report.entity.SourceTrackingData;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.*;
|
||||
import weaver.bokang.xiao.xhny_report.service.util.VendorUtil;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
|
@ -30,20 +32,14 @@ public class ReturnAndExchangeChain extends AbstractScoreChain{
|
|||
Integer supplier = vendorMarkReport.getSupplier();
|
||||
CompanyEntity companyEntity = companyMap.get(supplier);
|
||||
ConfigEntity configEntity = this.configEntityMap.get(mappingConfig.get(companyEntity.getReturnAndExchange()));
|
||||
double score = 0.00;
|
||||
double score = 0.0;
|
||||
if(Objects.nonNull(configEntity)){
|
||||
score = configEntity.getScore();
|
||||
score = VendorUtil.getScoreByConfig(configEntity);
|
||||
}else {
|
||||
configEntity = this.configEntityMap.get(mappingConfig.get(0));
|
||||
}
|
||||
List<VendorMarkReportDt> vendorMarkReportDtList = vendorMarkReport.getVendorMarkReportDtList();
|
||||
vendorMarkReportDtList = Objects.isNull(vendorMarkReportDtList) ? new ArrayList<>() : vendorMarkReportDtList;
|
||||
vendorMarkReportDtList.add(
|
||||
VendorMarkReportDt.builder()
|
||||
.score(score)
|
||||
.project(configEntity.getChildItem())
|
||||
.weight(configEntity.getWeight())
|
||||
.desc("退换货评分").build());
|
||||
double totalScore = vendorMarkReport.getTotalScore();
|
||||
vendorMarkReport.setTotalScore(totalScore + score);
|
||||
logger.info(String.format("退换货评分: 供应商==>[%s],评分==>[%s]",vendorMarkReport.getSupplierCode(),score));
|
||||
VendorUtil.makeReportData(vendorMarkReport,configEntity,score,"退换货评分");
|
||||
}
|
||||
//让下一个链对象评分
|
||||
if(Objects.nonNull(this.nextAbstractScoreChain)) {
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
package weaver.bokang.xiao.xhny_report.service.chain;
|
||||
|
||||
import weaver.bokang.xiao.xhny_report.entity.*;
|
||||
import weaver.bokang.xiao.xhny_report.entity.SourceTrackingData;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.*;
|
||||
import weaver.bokang.xiao.xhny_report.service.util.VendorUtil;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
|
@ -29,20 +31,14 @@ public class SortingServiceChain extends AbstractScoreChain{
|
|||
Integer supplier = vendorMarkReport.getSupplier();
|
||||
CompanyEntity companyEntity = companyMap.get(supplier);
|
||||
ConfigEntity configEntity = this.configEntityMap.get(mappingConfig.get(companyEntity.getSortingService()));
|
||||
double score = 0.00;
|
||||
double score = 0.0;
|
||||
if(Objects.nonNull(configEntity)){
|
||||
score = configEntity.getScore();
|
||||
score = VendorUtil.getScoreByConfig(configEntity);
|
||||
}else {
|
||||
configEntity = this.configEntityMap.get(mappingConfig.get(0));
|
||||
}
|
||||
List<VendorMarkReportDt> vendorMarkReportDtList = vendorMarkReport.getVendorMarkReportDtList();
|
||||
vendorMarkReportDtList = Objects.isNull(vendorMarkReportDtList) ? new ArrayList<>() : vendorMarkReportDtList;
|
||||
vendorMarkReportDtList.add(
|
||||
VendorMarkReportDt.builder()
|
||||
.score(score)
|
||||
.project(configEntity.getChildItem())
|
||||
.weight(configEntity.getWeight())
|
||||
.desc("分拣服务评分").build());
|
||||
double totalScore = vendorMarkReport.getTotalScore();
|
||||
vendorMarkReport.setTotalScore(totalScore + score);
|
||||
logger.info(String.format("分拣服务评分: 供应商==>[%s],评分==>[%s]",vendorMarkReport.getSupplierCode(),score));
|
||||
VendorUtil.makeReportData(vendorMarkReport,configEntity,score,"分拣服务评分");
|
||||
}
|
||||
//让下一个链对象评分
|
||||
if(Objects.nonNull(this.nextAbstractScoreChain)) {
|
||||
|
|
|
@ -1,10 +1,15 @@
|
|||
package weaver.bokang.xiao.xhny_report.service.chain;
|
||||
|
||||
import weaver.bokang.xiao.xhny_report.entity.SourceTrackingData;
|
||||
import weaver.bokang.xiao.xhny_report.entity.VendorMarkReport;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.ConfigEntity;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.MaterialEntity;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.QuotaData;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.VendorMarkReport;
|
||||
import weaver.bokang.xiao.xhny_report.service.util.VendorUtil;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @ClassName TopThirtyChain
|
||||
|
@ -16,8 +21,77 @@ public class TopThirtyChain extends AbstractScoreChain{
|
|||
|
||||
@Override
|
||||
public void handle(List<VendorMarkReport> vendorMarkReportList, SourceTrackingData sourceTrackingData) {
|
||||
//TODO 具体评分逻辑
|
||||
logger.info(" TopThirtyChain deal top30评分 ");
|
||||
//具体评分逻辑
|
||||
List<QuotaData> quotaDataList = sourceTrackingData.getQuotaDataList();
|
||||
//按供应商将报价信息分组
|
||||
Map<Integer, List<QuotaData>> vendorQuotaMap = quotaDataList.stream().collect(Collectors.groupingBy(QuotaData::getVendorId));
|
||||
//初始化供应商评分map集合
|
||||
Map<Integer, Integer> vendorScoreMap = vendorMarkReportList.stream().collect(Collectors.toMap(
|
||||
VendorMarkReport::getSupplier,
|
||||
v -> -1
|
||||
));
|
||||
//供应商都进行了报价,取出每个供应商的物料报价组成新的list
|
||||
List<List<QuotaData>> sourceList = new ArrayList<>();
|
||||
if(vendorQuotaMap.size() == vendorMarkReportList.size()){
|
||||
Set<Map.Entry<Integer, List<QuotaData>>> entries = vendorQuotaMap.entrySet();
|
||||
for (Map.Entry<Integer, List<QuotaData>> entry : entries) {
|
||||
sourceList.add(entry.getValue());
|
||||
}
|
||||
}
|
||||
//求出每个供应商都报价的物料(求交集)
|
||||
List<QuotaData> retainQuotaList = VendorUtil.retainElementList(sourceList);
|
||||
if(!retainQuotaList.isEmpty()){
|
||||
//过滤top30的物料信息
|
||||
Map<String, Double> topThirtyMaterial = this.vendorStore.getTopThirtyMaterial();
|
||||
Map<Integer, String> mappingMaterial = sourceTrackingData.getSourceMaterialList().stream().collect(Collectors.toMap(MaterialEntity::getMaterialId, MaterialEntity::getMaterialCode));
|
||||
List<QuotaData> collect = retainQuotaList.stream().filter(item -> {
|
||||
Integer materialId = item.getMaterialId();
|
||||
String materialCode = mappingMaterial.get(materialId);
|
||||
return topThirtyMaterial.containsKey(materialCode);
|
||||
}).collect(Collectors.toList());
|
||||
if(!collect.isEmpty()) {
|
||||
//统计报价总和
|
||||
Map<Integer, Double> quotaScoreMap = vendorQuotaMap.entrySet().stream()
|
||||
.collect(Collectors.toMap(
|
||||
Map.Entry::getKey,
|
||||
v -> v.getValue().stream().filter(collect::contains).mapToDouble(QuotaData::getQuotaValue).sum())
|
||||
);
|
||||
//统计报价最小值
|
||||
Optional<Map.Entry<Integer, Double>> min = quotaScoreMap.entrySet().stream().min(Map.Entry.comparingByValue());
|
||||
|
||||
if (min.isPresent()) {
|
||||
double minValue = min.get().getValue();
|
||||
for (VendorMarkReport vendorMarkReport : vendorMarkReportList) {
|
||||
Integer supplier = vendorMarkReport.getSupplier();
|
||||
double quotaStore = quotaScoreMap.get(supplier);
|
||||
int scoreId;
|
||||
if (new BigDecimal(quotaStore).compareTo(new BigDecimal(minValue)) == 0) {
|
||||
//最小值
|
||||
scoreId = 22;
|
||||
} else {
|
||||
//其他
|
||||
scoreId = 23;
|
||||
}
|
||||
|
||||
vendorScoreMap.put(supplier, scoreId);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//整理评分数据
|
||||
for (VendorMarkReport vendorMarkReport : vendorMarkReportList) {
|
||||
Integer supplier = vendorMarkReport.getSupplier();
|
||||
double score = 0.0;
|
||||
ConfigEntity configEntity = this.configEntityMap.get(23);
|
||||
int scoreId = vendorScoreMap.get(supplier);
|
||||
if(scoreId > -1){
|
||||
configEntity = this.configEntityMap.get(scoreId);
|
||||
score = VendorUtil.getScoreByConfig(configEntity);
|
||||
}
|
||||
logger.info(String.format("top30评分: 供应商==>[%s],评分==>[%s]",vendorMarkReport.getSupplierCode(),score));
|
||||
VendorUtil.makeReportData(vendorMarkReport,configEntity,score,"top30评分");
|
||||
}
|
||||
//让下一个链对象评分
|
||||
if(Objects.nonNull(this.nextAbstractScoreChain)) {
|
||||
this.nextAbstractScoreChain.handle(vendorMarkReportList, sourceTrackingData);
|
||||
|
|
|
@ -1,11 +1,17 @@
|
|||
package weaver.bokang.xiao.xhny_report.service.store;
|
||||
|
||||
import aiyh.utils.Util;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import lombok.Getter;
|
||||
import org.apache.log4j.Logger;
|
||||
import weaver.bokang.xiao.xhny_report.entity.CompanyEntity;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.CompanyEntity;
|
||||
import weaver.bokang.xiao.xhny_report.mapper.VendorMapper;
|
||||
import weaver.general.StaticObj;
|
||||
import weaver.interfaces.datasource.DataSource;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.Statement;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
@ -27,25 +33,63 @@ public class VendorStore {
|
|||
|
||||
private Map<Integer,CompanyEntity> companyMap = new HashMap<>();
|
||||
|
||||
/** 数据源名称 */
|
||||
private String dataSource;
|
||||
|
||||
private static final Logger logger = Util.getLogger();
|
||||
|
||||
private static final VendorMapper VENDOR_MAPPER = Util.getMapper(VendorMapper.class);
|
||||
|
||||
private final Map<String,Double> topThirtyMaterial = new HashMap<>();
|
||||
|
||||
private VendorStore(){
|
||||
//this.init();
|
||||
}
|
||||
|
||||
public void init(){
|
||||
public void init(String dataSource){
|
||||
try{
|
||||
this.dataSource = dataSource;
|
||||
this.companyEntityList = VENDOR_MAPPER.queryCompanyList();
|
||||
if(Objects.nonNull(companyEntityList) && !companyEntityList.isEmpty()){
|
||||
companyMap = companyEntityList.stream().collect(Collectors.toMap(CompanyEntity::getId, item -> item));
|
||||
}
|
||||
this.queryTopThirtyMaterial();
|
||||
logger.info(String.format("公共数据初始化成功 VendorStore init success !! [VENDOR_MAPPER:%s \n topThirtyMaterial:%s]", JSON.toJSONString(VENDOR_MAPPER), JSON.toJSONString(topThirtyMaterial)));
|
||||
}catch (Exception exception){
|
||||
logger.error("VendorStore 初始化异常 ==>"+Util.getErrString(exception));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* <h2>从数据源查询出top30的物料信息</h2>
|
||||
*/
|
||||
private void queryTopThirtyMaterial(){
|
||||
DataSource ds = (DataSource) StaticObj.getServiceByFullname(("datasource."+this.dataSource),DataSource.class);
|
||||
Connection conn = null ;
|
||||
Statement statement = null;
|
||||
try {
|
||||
conn = ds.getConnection();
|
||||
statement = conn.createStatement();
|
||||
String querySql = "select top 30 * from kd_po_orderout_b";
|
||||
ResultSet rs = statement.executeQuery(querySql);
|
||||
while (rs.next()) {
|
||||
String materialCode = Util.null2String(rs.getString("materialcode"));
|
||||
double nastorigtaxPrice = Util.getDoubleValue(rs.getString("nastorigtaxprice"));
|
||||
this.topThirtyMaterial.put(materialCode,nastorigtaxPrice);
|
||||
}
|
||||
logger.info("top30 物料信息 topThirtyMaterial ==>"+topThirtyMaterial);
|
||||
}catch (Exception e){
|
||||
logger.error("数据源查询异常 ==>"+Util.getErrString(e));
|
||||
}finally {
|
||||
try{
|
||||
assert conn != null;
|
||||
conn.close();
|
||||
}catch (Exception e){
|
||||
logger.error("关闭连接异常 ==>"+Util.getErrString(e));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static VendorStore getInstance(){
|
||||
return VendorStoreHolder.VENDOR_STORE;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,72 @@
|
|||
package weaver.bokang.xiao.xhny_report.service.util;
|
||||
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.ConfigEntity;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.QuotaData;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.VendorMarkReport;
|
||||
import weaver.bokang.xiao.xhny_report.entity.pojo.VendorMarkReportDt;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* @ClassName VendorUtil
|
||||
* @Author 肖博亢
|
||||
* @Date 2023/3/20 18:37
|
||||
* @Description <h1></h1>
|
||||
**/
|
||||
public class VendorUtil {
|
||||
|
||||
/**
|
||||
* <h2>通过配置信息获取分数</h2>
|
||||
* @param configEntity 配置信息
|
||||
* @return 分数
|
||||
*/
|
||||
public static double getScoreByConfig(ConfigEntity configEntity){
|
||||
double score = 0.00;
|
||||
if(Objects.nonNull(configEntity)){
|
||||
double weight = configEntity.getWeight();
|
||||
double tempScore = configEntity.getScore();
|
||||
score = tempScore * weight;
|
||||
}
|
||||
return score;
|
||||
}
|
||||
|
||||
/**
|
||||
* <h2>报表参数组装</h2>
|
||||
* @param vendorMarkReport 报表信息
|
||||
* @param configEntity 配置信息
|
||||
* @param score 分数
|
||||
* @param desc 描述信息
|
||||
*/
|
||||
public static void makeReportData(VendorMarkReport vendorMarkReport, ConfigEntity configEntity, double score,String desc){
|
||||
List<VendorMarkReportDt> vendorMarkReportDtList = vendorMarkReport.getVendorMarkReportDtList();
|
||||
vendorMarkReportDtList = Objects.isNull(vendorMarkReportDtList) ? new ArrayList<>() : vendorMarkReportDtList;
|
||||
vendorMarkReport.setVendorMarkReportDtList(vendorMarkReportDtList);
|
||||
vendorMarkReportDtList.add(
|
||||
VendorMarkReportDt.builder()
|
||||
.score(score)
|
||||
.project(configEntity.getChildItem())
|
||||
.weight(configEntity.getWeight())
|
||||
.desc(desc).build());
|
||||
double totalScore = vendorMarkReport.getTotalScore();
|
||||
vendorMarkReport.setTotalScore(totalScore + score);
|
||||
}
|
||||
|
||||
/**
|
||||
* <h2>多数组取交集</h2>
|
||||
* @param elementLists 数据集合
|
||||
* @return 交集数据
|
||||
*/
|
||||
public static <T> List<T> retainElementList(List<List<T>> elementLists) {
|
||||
Optional<List<T>> result = elementLists.parallelStream()
|
||||
.filter(elementList -> elementList != null && elementList.size() != 0)
|
||||
.reduce((a, b) -> {
|
||||
a.retainAll(b);
|
||||
return a;
|
||||
});
|
||||
return result.orElse(new ArrayList<>());
|
||||
}
|
||||
|
||||
}
|
|
@ -19,8 +19,11 @@ import org.apache.log4j.Logger;
|
|||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.junit.Test;
|
||||
import weaver.bokang.xiao.xhny_report.entity.SourceTrackingData;
|
||||
import weaver.bokang.xiao.xhny_report.schedule.GenerateReportSchedule;
|
||||
import weaver.bokang.xiao.xhny_report.service.chain.AbstractScoreChain;
|
||||
import weaver.bokang.xiao.xhny_report.service.ScoreChainPattern;
|
||||
import weaver.conn.RecordSet;
|
||||
import weaver.conn.RecordSetDataSource;
|
||||
import weaver.general.StaticObj;
|
||||
import weaver.hrm.User;
|
||||
import weaver.interfaces.datasource.DataSource;
|
||||
|
@ -30,11 +33,9 @@ import weaver.xiao.commons.utils.DocImageFileUtil;
|
|||
import java.io.*;
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.sql.CallableStatement;
|
||||
import java.sql.Connection;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.*;
|
||||
import java.util.*;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @ClassName NormalTest
|
||||
|
@ -46,10 +47,15 @@ public class NormalTest extends BaseTest {
|
|||
|
||||
@Test
|
||||
public void testWord(){
|
||||
String s = "{uf_jxshttz:jxsqszt=1&qsfs=0:cjrq},{uf_htzzzs:dqjd=24&htlb is not null&yylx=0:sqrq}";
|
||||
ReviewServiceImpl reviewService = new ReviewServiceImpl();
|
||||
Map<String, Map<String, String>> modelTableSql = reviewService.getModelTableSql(s);
|
||||
System.out.println(modelTableSql);
|
||||
GenerateFileUtil.createCronJobDocument(GenerateReportSchedule.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testChain(){
|
||||
GenerateReportSchedule generateReportSchedule = new GenerateReportSchedule();
|
||||
generateReportSchedule.setReportModelId("-2915");
|
||||
generateReportSchedule.setDataSource("NCC");
|
||||
generateReportSchedule.runCode();
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -69,19 +75,31 @@ public class NormalTest extends BaseTest {
|
|||
|
||||
@Test
|
||||
public void testDataSource(){
|
||||
DataSource ds = (DataSource) StaticObj.getServiceByFullname(("datasource.a"),DataSource.class);
|
||||
DataSource ds = (DataSource) StaticObj.getServiceByFullname(("datasource.NCC"),DataSource.class);
|
||||
Connection conn = null ;
|
||||
CallableStatement callableStatement = null; // CallableStatement对象
|
||||
ResultSet resultSet = null; // 结果集对象
|
||||
try{
|
||||
conn = ds.getConnection();
|
||||
callableStatement = conn.prepareCall("{CALL proc_search_user(?,?,?,?)}");
|
||||
callableStatement = conn.prepareCall("{CALL kd_po_nastnumAndnassistnum(?,?,?,?,?,?,?,?,?)}");
|
||||
|
||||
callableStatement.setString(1,"GC736");
|
||||
callableStatement.setString(2,"2023-01-01");
|
||||
callableStatement.setString(3,"2023-04-01");
|
||||
|
||||
callableStatement.registerOutParameter(4, Types.INTEGER);
|
||||
callableStatement.registerOutParameter(5, Types.INTEGER);
|
||||
callableStatement.registerOutParameter(6, Types.INTEGER);
|
||||
callableStatement.registerOutParameter(7, Types.VARBINARY);
|
||||
callableStatement.registerOutParameter(8, Types.VARBINARY);
|
||||
callableStatement.registerOutParameter(9, Types.DOUBLE);
|
||||
|
||||
resultSet = callableStatement.executeQuery();
|
||||
if(resultSet.next()){
|
||||
|
||||
System.out.println(resultSet.getString("nassistnum"));
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
throw new RuntimeException(e);
|
||||
} catch (Exception e) {
|
||||
log.error("远程调用存储过程失败 ==>"+Util.getErrString(e));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -94,7 +112,7 @@ public class NormalTest extends BaseTest {
|
|||
param.put("workflowIds","0");
|
||||
//String s1 = reviewMapper.queryCreateTopDate(param, 1);
|
||||
//System.out.println(s1);
|
||||
|
||||
RecordSet recordSet = new RecordSet();
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -115,6 +133,8 @@ public class NormalTest extends BaseTest {
|
|||
AbstractScoreChain scoreChain = ScoreChainPattern.getScoreChain();
|
||||
scoreChain.handle(new ArrayList<>(),new SourceTrackingData());
|
||||
System.out.println(scoreChain);
|
||||
Logger logger = Util.getLogger();
|
||||
//logger.info("message sendData ==>"+);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
Loading…
Reference in New Issue