Commit e5ac0b22 by wukaiqiang

销售台账接口-流程

parent cc65f37f
...@@ -8,23 +8,28 @@ import com.xyst.dinas.contract.query.processor.ContractWarnSettingProcessor; ...@@ -8,23 +8,28 @@ import com.xyst.dinas.contract.query.processor.ContractWarnSettingProcessor;
import com.xyst.dinas.sales.dao.InventoryDao; import com.xyst.dinas.sales.dao.InventoryDao;
import com.xyst.dinas.sales.dao.NeedPlanDao; import com.xyst.dinas.sales.dao.NeedPlanDao;
import com.xyst.dinas.sales.dao.SalesPlanDao; import com.xyst.dinas.sales.dao.SalesPlanDao;
import com.xyst.dinas.sales.dao.SalesRecordDao;
import com.xyst.dinas.sales.internal.dao.InventoryDaoImpl; import com.xyst.dinas.sales.internal.dao.InventoryDaoImpl;
import com.xyst.dinas.sales.internal.dao.NeedPlanDaoImpl; import com.xyst.dinas.sales.internal.dao.NeedPlanDaoImpl;
import com.xyst.dinas.sales.internal.dao.SalesRecordDaoImpl;
import com.xyst.dinas.sales.internal.query.processor.SalesPerformWarningProcessor; import com.xyst.dinas.sales.internal.query.processor.SalesPerformWarningProcessor;
import com.xyst.dinas.sales.internal.query.processor.SalesWarnSettingProcessor; import com.xyst.dinas.sales.internal.query.processor.SalesWarnSettingProcessor;
import com.xyst.dinas.sales.internal.service.InventoryServiceImpl; import com.xyst.dinas.sales.internal.service.InventoryServiceImpl;
import com.xyst.dinas.sales.internal.service.NeedPlanServiceImpl; import com.xyst.dinas.sales.internal.service.NeedPlanServiceImpl;
import com.xyst.dinas.sales.internal.service.SalesPlanServiceImpl; import com.xyst.dinas.sales.internal.service.SalesPlanServiceImpl;
import com.xyst.dinas.sales.internal.service.SalesRecordServiceImpl;
import com.xyst.dinas.sales.processor.SalesPlanProcessor; import com.xyst.dinas.sales.processor.SalesPlanProcessor;
import com.xyst.dinas.sales.processor.SalesPlanTempProcessor; import com.xyst.dinas.sales.processor.SalesPlanTempProcessor;
import com.xyst.dinas.sales.processor.StockAmountWarnCalculator; import com.xyst.dinas.sales.processor.StockAmountWarnCalculator;
import com.xyst.dinas.sales.service.InventoryService; import com.xyst.dinas.sales.service.InventoryService;
import com.xyst.dinas.sales.service.NeedPlanService; import com.xyst.dinas.sales.service.NeedPlanService;
import com.xyst.dinas.sales.service.SalesPlanService; import com.xyst.dinas.sales.service.SalesPlanService;
import com.xyst.dinas.sales.service.SalesRecordService;
import com.xyst.dinas.sales.task.SalesPlanAutoCreateTaskRegister; import com.xyst.dinas.sales.task.SalesPlanAutoCreateTaskRegister;
import com.xyst.dinas.sales.web.InventoryController; import com.xyst.dinas.sales.web.InventoryController;
import com.xyst.dinas.sales.web.NeedPlanController; import com.xyst.dinas.sales.web.NeedPlanController;
import com.xyst.dinas.sales.web.SalesPlanController; import com.xyst.dinas.sales.web.SalesPlanController;
import com.xyst.dinas.sales.web.SalesRecordController;
public class SalesConfiguration { public class SalesConfiguration {
...@@ -103,4 +108,21 @@ public class SalesConfiguration { ...@@ -103,4 +108,21 @@ public class SalesConfiguration {
public SalesWarnSettingProcessor salesWarnSettingProcessor() { public SalesWarnSettingProcessor salesWarnSettingProcessor() {
return new SalesWarnSettingProcessor(); return new SalesWarnSettingProcessor();
} }
/***********销售台账******************/
@Bean
public SalesRecordController salesRecordController()
{
return new SalesRecordController();
}
@Bean
public SalesRecordService salesRecordService()
{
return new SalesRecordServiceImpl();
}
@Bean
public SalesRecordDao salesRecordDao()
{
return new SalesRecordDaoImpl();
}
} }
...@@ -4,4 +4,59 @@ public interface SalesRecordConstant { ...@@ -4,4 +4,59 @@ public interface SalesRecordConstant {
public static String ENTITY = "com.xyst.dinas.sales.datamodel.SalesRecord"; public static String ENTITY = "com.xyst.dinas.sales.datamodel.SalesRecord";
//销售台账ID
public static final String ID = "id";
//创建时间
public static final String CREATETIME = "createTime";
//修改时间
public static final String MODIFYTIME = "modifyTime";
//项目
public static final String PROJECT = "project";
//区域公司
public static final String REGIONALCOMPANY = "regionalCompany";
//合同
public static final String CONTRACT = "contract";
//购砂单位
public static final String PURCHASESANDCOMPANY = "purchaseSandCompany";
//场站
public static final String STATION = "station";
//生产线
public static final String PRODUCTIONLINE = "productionLine";
//散户
public static final String RETAILINFO = "retailInfo";
//砂石种类
public static final String DINASTYPE = "dinasType";
//客户类型
public static final String CUSTOMERTYPE = "customerType";
//销售时间
public static final String DEALTIME = "dealTime";
//同步时间
public static final String SYNCTIME = "syncTime";
//车辆信息
public static final String CARINFO = "carInfo";
//销售数量
public static final String DEALAMOUNT = "dealAmount";
//单价
public static final String PRICE = "price";
//总价
public static final String AMOUNT = "amount";
//付款来源
public static final String PAYMENTSOURCE = "paymentSource";
//销售单号
public static final String DEALBILLCODE = "dealBillCode";
/** 审批状态*/
public static final String APPROVE_STATE = "approveState";
/**
* 是否废弃
*/
public static final String DISCARD = "discard";
/**
* 是否删除
*/
public static final String DEL = "del";
/**
* 负责人
*/
public static final String PIC = "pic";
} }
package com.xyst.dinas.sales.dao;
import java.util.UUID;
import com.beecode.bcp.type.KObject;
public interface SalesRecordDao {
KObject load(UUID id);
UUID insert(KObject entity);
}
package com.xyst.dinas.sales.internal.dao;
import java.util.UUID;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate5.HibernateOperations;
import com.beecode.bcp.type.KObject;
import com.xyst.dinas.sales.constant.SalesRecordConstant;
import com.xyst.dinas.sales.dao.SalesRecordDao;
public class SalesRecordDaoImpl implements SalesRecordDao,SalesRecordConstant {
@Autowired
private HibernateOperations template;
@Override
public KObject load(UUID id) {
// TODO Auto-generated method stub
return (KObject) template.load(ENTITY, id);
}
@Override
public UUID insert(KObject entity) {
return (UUID) template.save(entity);
}
}
package com.xyst.dinas.sales.internal.service;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import javax.transaction.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import com.beecode.bcp.type.KClass;
import com.beecode.bcp.type.KObject;
import com.xyst.dinas.biz.dao.DinasOrganizationDao;
import com.xyst.dinas.biz.dao.DinasTypeDao;
import com.xyst.dinas.biz.dao.StationDao;
import com.xyst.dinas.biz.dao.ProductionLineDao;
import com.xyst.dinas.biz.dao.RetailInfoDao;
import com.xyst.dinas.contract.internal.dao.ContractDao;
import com.xyst.dinas.project.dao.ProjectFiledDao;
import com.xyst.dinas.project.dao.PurchaseSandCompanyDao;
import com.xyst.dinas.sales.constant.SalesRecordConstant;
import com.xyst.dinas.sales.dao.SalesRecordDao;
import com.xyst.dinas.sales.service.SalesRecordService;
import com.xyst.dinas.sales.web.info.SalesRecordInfo;
import com.xyst.dinas.sales.web.info.SyncException;
@Transactional
public class SalesRecordServiceImpl implements SalesRecordService {
@Autowired
private SalesRecordDao salesRecordDao;
@Autowired
private ProjectFiledDao projectFiledDao;
@Autowired
DinasOrganizationDao dinasOrganizationDao;
@Autowired
ContractDao contractDao;
@Autowired
PurchaseSandCompanyDao purchaseSandCompanyDao;
@Autowired
StationDao stationDao;
@Autowired
ProductionLineDao ProductionLineDao;
@Autowired
RetailInfoDao retailInfoDao;
@Autowired
DinasTypeDao dinasTypeDao;
@Autowired
@Qualifier(SalesRecordConstant.ENTITY)
private KClass salesRecordClass;
@Transactional
@Override
public String saveSalesRecordService(List<SalesRecordInfo> salesRecordInfoList) {
String state = "success";
try {
Date thentime = new Date();
List<UUID> salesRecordIdList = new ArrayList<UUID>();
for (SalesRecordInfo salesRecordInfo : salesRecordInfoList) {
// 获取项目KObject
KObject project = null;
project = entityExistenceCheck("项目",
projectFiledDao.load(UUID.fromString(dataExistenceCheck("项目", salesRecordInfo.getProject()))));
// 获取区域公司KObject
KObject regionalCompany = null;
regionalCompany = entityExistenceCheck("区域公司", dinasOrganizationDao
.load(UUID.fromString(dataExistenceCheck("区域公司", salesRecordInfo.getRegionalCompany()))));
// 获取合同KObject
KObject contract = null;
contract = entityExistenceCheck("合同",
contractDao.load(UUID.fromString(dataExistenceCheck("合同", salesRecordInfo.getContract()))));
// 获取购砂单位KObject
KObject purchaseSandCompany = null;
// 获取散户KObject
KObject retailInfo = null;
if ("company".equals(salesRecordInfo.getCustomerType())) {
purchaseSandCompany = entityExistenceCheck("购砂单位", purchaseSandCompanyDao.load(
UUID.fromString(dataExistenceCheck("购砂单位", salesRecordInfo.getPurchaseSandCompany()))));
} else {
retailInfo = entityExistenceCheck("散户", retailInfoDao
.load(UUID.fromString(dataExistenceCheck("散户", salesRecordInfo.getRetailInfo()))));
}
// 获取场站KObject
KObject station = null;
station = entityExistenceCheck("场站",
stationDao.load(UUID.fromString(dataExistenceCheck("场站", salesRecordInfo.getStation()))));
// 获取生产线KObject
KObject productionLine = null;
productionLine = entityExistenceCheck("生产线", ProductionLineDao
.load(UUID.fromString(dataExistenceCheck("生产线", salesRecordInfo.getProductionLine()))));
// 获取砂石类型
KObject dinasType = null;
dinasType = entityExistenceCheck("砂石类型",
dinasTypeDao.load(UUID.fromString(dataExistenceCheck("砂石类型", salesRecordInfo.getDinasType()))));
// 获取销售台账Kobject
Date modifyTime = generateDate("修改时间", "yyyy-MM-dd", salesRecordInfo.getModifyTime());
Date dealtime = generateDate("销售时间", "yyyy-MM-dd", salesRecordInfo.getDealTime());
KObject salesRecord = salesRecordClass.newInstance();
salesRecord.set(SalesRecordConstant.ID, UUID.randomUUID());
salesRecord.set(SalesRecordConstant.CREATETIME, thentime);
salesRecord.set(SalesRecordConstant.MODIFYTIME, modifyTime);
salesRecord.set(SalesRecordConstant.PROJECT, project);
salesRecord.set(SalesRecordConstant.REGIONALCOMPANY, regionalCompany);
salesRecord.set(SalesRecordConstant.CONTRACT, contract);
if ("company".equals(salesRecordInfo.getCustomerType())) {
salesRecord.set(SalesRecordConstant.PURCHASESANDCOMPANY, purchaseSandCompany);
// salesRecord.set(SalesRecordConstant.RETAILINFO,null);
} else if (null != salesRecordInfo.getRetailInfo()) {
salesRecord.set(SalesRecordConstant.RETAILINFO, retailInfo);
// salesRecord.set(SalesRecordConstant.PURCHASESANDCOMPANY,null);
}
salesRecord.set(SalesRecordConstant.STATION, station);
salesRecord.set(SalesRecordConstant.PRODUCTIONLINE, productionLine);
salesRecord.set(SalesRecordConstant.DINASTYPE, dinasType);
salesRecord.set(SalesRecordConstant.CUSTOMERTYPE,
dataExistenceCheck("客户类型", salesRecordInfo.getCustomerType()));
salesRecord.set(SalesRecordConstant.DEALTIME, dealtime);
salesRecord.set(SalesRecordConstant.SYNCTIME, thentime);
salesRecord.set(SalesRecordConstant.CARINFO, dataExistenceCheck("车辆信息", salesRecordInfo.getCarInfo()));
salesRecord.set(SalesRecordConstant.DEALAMOUNT,
salesRecordInfo.getDealAmount() == null ? BigDecimal.ZERO
: new BigDecimal(salesRecordInfo.getDealAmount()));
salesRecord.set(SalesRecordConstant.PRICE, salesRecordInfo.getPrice() == null ? BigDecimal.ZERO
: new BigDecimal(salesRecordInfo.getPrice()));
salesRecord.set(SalesRecordConstant.AMOUNT, salesRecordInfo.getAmount() == null ? BigDecimal.ZERO
: new BigDecimal(salesRecordInfo.getAmount()));
salesRecord.set(SalesRecordConstant.PAYMENTSOURCE,
dataExistenceCheck("付款来源", salesRecordInfo.getPaymentSource()));
salesRecord.set(SalesRecordConstant.DEALBILLCODE,
dataExistenceCheck("销售单号", salesRecordInfo.getDealBillCode()));
// salesRecord.set(SalesRecordConstant.APPROVE_STATE,modifyTime);
salesRecord.set(SalesRecordConstant.DISCARD, false);
salesRecord.set(SalesRecordConstant.DEL, false);
// salesRecord.set(SalesRecordConstant.PIC,modifyTime);
UUID salesRecordId = salesRecordDao.insert(salesRecord);
//KObject newSalesRecord = salesRecordDao.load(salesRecordId);
salesRecordIdList.add(salesRecordId);
}
} catch (SyncException e) {
state = "failure";
throw new SyncException("销售台账信息存储报出错:" + e.getMessage());
}
return state;
}
private String dataExistenceCheck(String name, String value) {
String result = null;
if (null != value && "" != value) {
result = value;
} else {
throw new SyncException("[" + name + "]信息为空!请确认");
}
return result;
}
private KObject entityExistenceCheck(String name, KObject daoValue) {
KObject result = null;
if (null != daoValue) {
result = daoValue;
} else {
throw new SyncException("[" + name + "]信息为空!请确认");
}
return result;
}
private Date generateDate(String name, String pattern, String value) {
return generateDate(name, pattern, value, true);
}
private Date generateDate(String name, String pattern, String value, Boolean notNull) {
if ((null == value || value.length() <= 0) && notNull) {
throw new SyncException(name + "不能为空");
}
SimpleDateFormat format = new SimpleDateFormat(pattern);
Date result = null;
try {
result = format.parse(value);
} catch (Exception e) {
throw new SyncException(name + "[" + value + "]不是要求的[" + pattern + "]格式,转换失败");
}
return result;
}
}
package com.xyst.dinas.sales.service;
import java.util.List;
import java.util.UUID;
import com.xyst.dinas.sales.web.info.SalesRecordInfo;
public interface SalesRecordService {
/**
* 通过销售台账List对台账进行存储
* 主要用于外部接口调用
* @param salesRecordList 销售台账List
* @return 返回存储状态 failure/失败 success/成功
*/
String saveSalesRecordService(List<SalesRecordInfo> salesRecordList);
}
package com.xyst.dinas.sales.web;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import com.beecode.inz.basis.team.pojo.ResponseObj;
import com.xyst.dinas.sales.service.SalesRecordService;
import com.xyst.dinas.sales.web.info.SalesRecordInfo;
import com.xyst.dinas.sales.web.info.SyncException;
@RestController
public class SalesRecordController {
@Autowired
SalesRecordService salesRecordService;
/**
* 通过List传递 销售台账数据,进行存储
*
* @param salesRecordList 销售台账队列
* @return
*/
@PostMapping(value = "/salesRecord/save", consumes = "application/json")
public Object saveSalesRecord(@RequestBody List<SalesRecordInfo> salesRecordList) {
if (salesRecordList.isEmpty()) {
return ResponseObj.error("传递的销售台账数据条数为0!请确认!");
} else {
return salesRecordService.saveSalesRecordService(salesRecordList);
}
}
}
package com.xyst.dinas.sales.web.info;
public class SalesRecordInfo {
/**
* 修改时间
*/
private String modifyTime;
/**
* 项目
*/
private String project;
/**
* 区域公司
*/
private String regionalCompany;
/**
* 合同
*/
private String contract;
/**
* 购砂单位
*/
private String purchaseSandCompany;
/**
* 场站
*/
private String station;
/**
* 生产线
*/
private String productionLine;
/**
* 散户
*/
private String retailInfo;
/**
* 砂石种类
*/
private String dinasType;
/**
* 客户类型
*/
private String customerType;
/**
* 销售时间
*/
private String dealTime;
/**
* 车辆信息
*/
private String carInfo;
/**
* 销售数量
*/
private Double dealAmount;
/**
* 单价
*/
private Double price;
/**
* 总价
*/
private Double amount;
/**
* 付款来源
*/
private String paymentSource;
/**
* 销售单号
*/
private String dealBillCode;
public String getModifyTime() {
return modifyTime;
}
public void setModifyTime(String modifyTime) {
this.modifyTime = modifyTime;
}
public String getProject() {
return project;
}
public void setProject(String project) {
this.project = project;
}
public String getRegionalCompany() {
return regionalCompany;
}
public void setRegionalCompany(String regionalCompany) {
this.regionalCompany = regionalCompany;
}
public String getContract() {
return contract;
}
public void setContract(String contract) {
this.contract = contract;
}
public String getPurchaseSandCompany() {
return purchaseSandCompany;
}
public void setPurchaseSandCompany(String purchaseSandCompany) {
this.purchaseSandCompany = purchaseSandCompany;
}
public String getStation() {
return station;
}
public void setStation(String station) {
this.station = station;
}
public String getProductionLine() {
return productionLine;
}
public void setProductionLine(String productionLine) {
this.productionLine = productionLine;
}
public String getRetailInfo() {
return retailInfo;
}
public void setRetailInfo(String retailInfo) {
this.retailInfo = retailInfo;
}
public String getDinasType() {
return dinasType;
}
public void setDinasType(String dinasType) {
this.dinasType = dinasType;
}
public String getCustomerType() {
return customerType;
}
public void setCustomerType(String customerType) {
this.customerType = customerType;
}
public String getDealTime() {
return dealTime;
}
public void setDealTime(String dealTime) {
this.dealTime = dealTime;
}
public String getCarInfo() {
return carInfo;
}
public void setCarInfo(String carInfo) {
this.carInfo = carInfo;
}
public Double getDealAmount() {
return dealAmount;
}
public void setDealAmount(Double dealAmount) {
this.dealAmount = dealAmount;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
public Double getAmount() {
return amount;
}
public void setAmount(Double amount) {
this.amount = amount;
}
public String getPaymentSource() {
return paymentSource;
}
public void setPaymentSource(String paymentSource) {
this.paymentSource = paymentSource;
}
public String getDealBillCode() {
return dealBillCode;
}
public void setDealBillCode(String dealBillCode) {
this.dealBillCode = dealBillCode;
}
}
package com.xyst.dinas.sales.web.info;
public class SyncException extends RuntimeException {
/**
*
*/
private static final long serialVersionUID = 5018927881094038104L;
public SyncException() {
super();
}
public SyncException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
public SyncException(String message, Throwable cause) {
super(message, cause);
}
public SyncException(String message) {
super(message);
}
public SyncException(Throwable cause) {
super(cause);
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment