Commit 1a3ee383 by 王衍超

Merge branch 'develop' of gitlab.beecode.cn:kunlun/xyst_dinas/xyst_dinas_backend into develop

parents a818560b b5ac532b
......@@ -3,4 +3,6 @@ package com.xyst.dinas.sales.constant;
public interface InventoryConstant {
public static String INVENTORY_ENTITY = "com.xyst.dinas.sales.datamodel.Inventory";
public static String LOG_ENTITY = "com.beecode.bap.log.datamodel.Log";
}
......@@ -12,4 +12,8 @@ public interface InventoryDao {
void update(KObject kobj);
void save(KObject kobj);
KObject getItemByStationIdAndDinasTypeId(UUID stationId, UUID dinasTypeId);
List<KObject> queryLog(List<String> businessObjectId);
}
package com.xyst.dinas.sales.entity;
public class InventoryLog {
/*
* 纠正时间
*/
private String time;
/**
* 操作人
*/
private String operator;
/**
* 日志内容
*/
private String content;
public InventoryLog() {
}
public InventoryLog(String time, String operator, String content) {
this.time = time;
this.operator = operator;
this.content = content;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getOperator() {
return operator;
}
public void setOperator(String operator) {
this.operator = operator;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
package com.xyst.dinas.sales.entity;
import java.math.BigDecimal;
import java.util.UUID;
public class StationDinasTypeRelation {
......@@ -9,17 +10,35 @@ public class StationDinasTypeRelation {
*/
private UUID stationId;
/**
* 场站名称
*/
private String stationName;
/*
* 砂石类型id
*/
private UUID dinasTypeId;
/**
* 砂石类型名称
*/
private String dinasTypeName;
/*
* 砂石单价
*/
private double price;
private BigDecimal price;
/**
* 库存量
*/
private BigDecimal amount;
public StationDinasTypeRelation() {
}
public StationDinasTypeRelation(UUID stationId, UUID dinasTypeId, double price) {
public StationDinasTypeRelation(UUID stationId, UUID dinasTypeId, BigDecimal price) {
this.stationId = stationId;
this.dinasTypeId = dinasTypeId;
this.price = price;
......@@ -29,11 +48,47 @@ public class StationDinasTypeRelation {
return stationId;
}
public void setStationId(UUID stationId) {
this.stationId = stationId;
}
public UUID getDinasTypeId() {
return dinasTypeId;
}
public double getPrice() {
public void setDinasTypeId(UUID dinasTypeId) {
this.dinasTypeId = dinasTypeId;
}
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
public BigDecimal getAmount() {
return amount;
}
public void setAmount(BigDecimal amount) {
this.amount = amount;
}
public String getStationName() {
return stationName;
}
public void setStationName(String stationName) {
this.stationName = stationName;
}
public String getDinasTypeName() {
return dinasTypeName;
}
public void setDinasTypeName(String dinasTypeName) {
this.dinasTypeName = dinasTypeName;
}
}
......@@ -47,4 +47,30 @@ public class InventoryDaoImpl implements InventoryDao {
template.save(kobj);
}
@Override
public KObject getItemByStationIdAndDinasTypeId(UUID stationId, UUID dinasTypeId) {
return (KObject)template.execute(new HibernateCallback<KObject>() {
@Override
public KObject doInHibernate(Session session) throws HibernateException {
Query<KObject> query = session.createQuery("from " + InventoryConstant.INVENTORY_ENTITY + " where (discard is null or discard = 0) and station.id =:stationId and dinasType.id =:dinasTypeId", KObject.class);
query.setParameter("stationId", stationId);
query.setParameter("dinasTypeId", dinasTypeId);
return query.getSingleResult();
}
});
}
@Override
public List<KObject> queryLog(List<String> businessObjectId) {
return (List<KObject>)template.execute(new HibernateCallback<List<KObject>>() {
@Override
public List<KObject> doInHibernate(Session session) throws HibernateException {
Query<KObject> query = session.createQuery("from " + InventoryConstant.LOG_ENTITY + " where module = :module and businessObjectId in (:businessObjectId) order by time desc", KObject.class);
query.setParameter("module", InventoryConstant.INVENTORY_ENTITY);
query.setParameter("businessObjectId", businessObjectId);
return query.getResultList();
}
});
}
}
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.json.JSONArray;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import com.beecode.amino.common.ValueConvertException;
import com.beecode.amino.core.Amino;
import com.beecode.bap.log.service.LogService;
import com.beecode.bap.staff.BapContext;
import com.beecode.bap.staff.service.StaffService;
import com.beecode.bcp.type.AttributeNotFoundException;
import com.beecode.bcp.type.KClass;
import com.beecode.bcp.type.KObject;
import com.beecode.inz.basis.team.pojo.ResponseObj;
......@@ -18,6 +27,7 @@ import com.xyst.dinas.biz.service.DinasTypeService;
import com.xyst.dinas.biz.service.StationService;
import com.xyst.dinas.sales.constant.InventoryConstant;
import com.xyst.dinas.sales.dao.InventoryDao;
import com.xyst.dinas.sales.entity.InventoryLog;
import com.xyst.dinas.sales.entity.StationDinasTypeRelation;
import com.xyst.dinas.sales.service.InventoryService;
......@@ -33,29 +43,97 @@ public class InventoryServiceImpl implements InventoryService {
public DinasOrganizationService dinasOrganizationService;
@Autowired
public LogService logService;
@Autowired
public StaffService staffService;
@Autowired
public InventoryDao inventoryDao;
@Autowired
public BapContext bapContext;
@Override
@Transactional
public List<KObject> getInventoryByRegionalCompany(UUID regionalCompany) {
public List<StationDinasTypeRelation> getInventoryByRegionalCompany(UUID regionalCompany) {
updateInventoryBaseInfo(regionalCompany);
List<KObject> inventory = inventoryDao.listAllByRegionalCompany(regionalCompany, false);
return inventory;
List<StationDinasTypeRelation> result = new ArrayList<StationDinasTypeRelation>();
for(KObject item : inventory) {
StationDinasTypeRelation r = new StationDinasTypeRelation();
r.setStationId(item.get("station").getUuid("id"));
r.setStationName(item.get("station").getString("stationName"));
r.setDinasTypeId(item.get("dinasType").getUuid("id"));
r.setDinasTypeName(item.get("dinasType").getString("dinasTypeName"));
r.setAmount(item.getBigDecimal("amount"));
r.setPrice(item.getBigDecimal("price"));
result.add(r);
}
return result;
}
/**
* body json格式数据
* isLog 是否记录修改日志
* autoCalculate 是否是自增或自减
*/
@SuppressWarnings("unchecked")
@Override
@Transactional
public ResponseObj<String> modifyInventory(String body) {
JSONObject param = new JSONObject(body);
String regionalCompany = param.getString("regionalCompany");
if(null != regionalCompany) {
updateInventoryBaseInfo(UUID.fromString(regionalCompany));
//TODO:根据body数据赋值修正后的库存量
return ResponseObj.success("库存更新成功");
} else {
return ResponseObj.error("库存更新失败:区域公司不能为空");
public ResponseObj<String> modifyInventory(String body, boolean isLog, boolean autoCalculate) {
JSONObject params = new JSONObject(body);
JSONArray datas = params.getJSONArray("datas");
for(int j = 0; j < datas.length(); j++) {
JSONObject param = datas.getJSONObject(j);
String regionalCompany = param.getString("regionalCompany");
if(null != regionalCompany) {
updateInventoryBaseInfo(UUID.fromString(regionalCompany));
//根据body数据赋值修正后的库存量
JSONArray data = param.getJSONArray("data");
for(int i = 0; i < data.length(); i++) {
JSONObject item = data.getJSONObject(i);
String stationId = item.getString("stationId");
String stationName = item.getString("stationName");
String dinasTypeId = item.getString("dinasTypeId");
String dinasTypeName = item.getString("dinasTypeName");
double amount = item.getDouble("amount");
KObject kobj = inventoryDao.getItemByStationIdAndDinasTypeId(UUID.fromString(stationId), UUID.fromString(dinasTypeId));
double oldAmount = kobj.getDouble("amount");
if(autoCalculate) {
BigDecimal addParam2 = new BigDecimal(oldAmount);
BigDecimal addParam1 = new BigDecimal(amount);
kobj.set("amount", addParam2.add(addParam1).doubleValue());
} else {
kobj.set("amount", amount);
}
inventoryDao.update(kobj);
if(isLog) {
try {
KObject log = Amino.getApplicationMetadataContext().getBean(InventoryConstant.LOG_ENTITY, KClass.class).newInstance();
log.set("id", UUID.randomUUID());
log.set("module", InventoryConstant.INVENTORY_ENTITY);
log.set("businessObjectId", kobj.getUuid("id").toString());
log.set("logContent", stationName + "的" + dinasTypeName + "库存量由" + oldAmount + "变为" + amount);
log.set("time", new Date());
log.set("loglevel", "INFO");
log.set("staffId", bapContext.getCurrentStaff().getUuid("id"));
log.set("deptId", bapContext.getCurrentStaff().get("department").getUuid("id"));
logService.addLog(log);
} catch (AttributeNotFoundException e) {
e.printStackTrace();
} catch (ValueConvertException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
return ResponseObj.success("库存更新成功");
}
public void updateInventoryBaseInfo(UUID regionalCompany) {
......@@ -65,7 +143,7 @@ public class InventoryServiceImpl implements InventoryService {
for(StationDinasTypeRelation r : relation) {
UUID stationId = r.getStationId();
UUID dinasTypeId = r.getDinasTypeId();
double price = r.getPrice();
BigDecimal price = r.getPrice();
boolean findFlag = false;
for(KObject i : inventory) {
if(i.get("station").getUuid("id").equals(stationId) && i.get("dinasType").getUuid("id").equals(dinasTypeId)) {
......@@ -79,6 +157,7 @@ public class InventoryServiceImpl implements InventoryService {
//未找到,则新增
if(!findFlag) {
KObject item = Amino.getApplicationMetadataContext().getBean(InventoryConstant.INVENTORY_ENTITY, KClass.class).newInstance();
item.set("id", UUID.randomUUID());
item.set("regionalCompany", dinasOrganizationService.load(regionalCompany));
item.set("station", stationService.getById(stationId));
item.set("dinasType", dinasTypeService.getById(dinasTypeId));
......@@ -117,7 +196,7 @@ public class InventoryServiceImpl implements InventoryService {
List<KObject> dinasTypeList = dinasTypeService.getByStation(station.getUuid("id"));
//TODO:带出今日砂价
for(KObject dinasType : dinasTypeList) {
StationDinasTypeRelation item = new StationDinasTypeRelation(station.getUuid("id"), dinasType.getUuid("id"), 0);
StationDinasTypeRelation item = new StationDinasTypeRelation(station.getUuid("id"), dinasType.getUuid("id"), new BigDecimal(0));
relation.add(item);
}
}
......@@ -126,4 +205,25 @@ public class InventoryServiceImpl implements InventoryService {
}
return relation;
}
@Override
public List<InventoryLog> queryLog(UUID regionalCompany) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
List<InventoryLog> result = new ArrayList<InventoryLog>();
List<KObject> inventory = inventoryDao.listAllByRegionalCompany(regionalCompany, false);
List<String> businessObjectId = new ArrayList<String>();
for(KObject i : inventory) {
businessObjectId.add(i.getUuid("id").toString());
}
List<KObject> logList = inventoryDao.queryLog(businessObjectId);
for(KObject log : logList) {
KObject operator = staffService.getById(log.getUuid("staffId"));
InventoryLog item = new InventoryLog();
item.setTime(format.format(log.getDate("time")));
item.setOperator(operator.getString("name"));
item.setContent(log.getString("logContent"));
result.add(item);
}
return result;
}
}
......@@ -3,12 +3,14 @@ package com.xyst.dinas.sales.service;
import java.util.List;
import java.util.UUID;
import com.beecode.bcp.type.KObject;
import com.beecode.inz.basis.team.pojo.ResponseObj;
import com.xyst.dinas.sales.entity.InventoryLog;
import com.xyst.dinas.sales.entity.StationDinasTypeRelation;
public interface InventoryService {
public List<KObject> getInventoryByRegionalCompany(UUID regionalCompany);
public ResponseObj<String> modifyInventory(String body);
public List<StationDinasTypeRelation> getInventoryByRegionalCompany(UUID regionalCompany);
public ResponseObj<String> modifyInventory(String body, boolean isLog, boolean autoCalculate);
public List<InventoryLog> queryLog(UUID regionalCompany);
}
......@@ -11,9 +11,10 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.beecode.bcp.type.KObject;
import com.beecode.inz.basis.team.pojo.ResponseObj;
import com.beecode.xlib.runtime.Assert;
import com.xyst.dinas.sales.entity.InventoryLog;
import com.xyst.dinas.sales.entity.StationDinasTypeRelation;
import com.xyst.dinas.sales.service.InventoryService;
@RestController
......@@ -27,7 +28,7 @@ public class InventoryController {
@RequestMapping(value = "/inventory/query", method = RequestMethod.GET)
public Object query(@RequestParam("regionalCompany") String regionalCompany) {
Assert.notNull(regionalCompany, "The regionalCompany must not be null");
List<KObject> data = inventoryService.getInventoryByRegionalCompany(UUID.fromString(regionalCompany));
List<StationDinasTypeRelation> data = inventoryService.getInventoryByRegionalCompany(UUID.fromString(regionalCompany));
return ResponseObj.success("库存查询成功", data);
}
......@@ -35,7 +36,16 @@ public class InventoryController {
@ResponseBody
@RequestMapping(value = "/inventory/modify", method = RequestMethod.POST)
public Object modify(@RequestBody String body) {
ResponseObj<String> result = inventoryService.modifyInventory(body);
ResponseObj<String> result = inventoryService.modifyInventory(body, true, false);
return result;
}
//查询库存纠正日志
@ResponseBody
@RequestMapping(value = "/inventory/queryLog", method = RequestMethod.GET)
public Object queryLog(@RequestParam("regionalCompany") String regionalCompany) {
Assert.notNull(regionalCompany, "The regionalCompany must not be null");
List<InventoryLog> data = inventoryService.queryLog(UUID.fromString(regionalCompany));
return ResponseObj.success("库存纠正日志查询成功", data);
}
}
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