提交 56148f4b 编写于 作者: L lsh

完成采购库存部分service

上级 707d662e
......@@ -15,8 +15,8 @@ public class InventoryStockLog extends BaseInventoryStockLog<InventoryStockLog>
* 查询商品单品对应的单据库存记录
* @return
*/
public InventoryStockLog findByOrderId(Integer orderId, Integer orderType, Integer spec1Id, Integer specOption1I, Integer spec2Id, Integer specOption2Id, Integer spec3Id, Integer specOption3Id, Integer unitId, Integer warehouseId) {
return InventoryStockLog.dao.findFirst("select * from inventory_stock_log where order_id = ? and order_type = ? and spec_1_id = ? and spec_option_1_id = ? and spec_2_id = ? and spec_option_2_id = ? and spec_3_id = ? and spec_option_3_id = ? and unit_id = ? and inventory_warehouse_id = ? limit 1", orderId, orderType, spec1Id, specOption1I, spec2Id, specOption2Id, spec3Id, specOption3Id, unitId);
public InventoryStockLog findByOrderId(Integer orderId, Integer orderType, Integer spec1Id, Integer specOption1I, Integer spec2Id, Integer specOption2Id, Integer spec3Id, Integer specOption3Id, Integer unitId) {
return InventoryStockLog.dao.findFirst("select * from inventory_stock_log where order_id = ? and order_type = ? and spec_1_id = ? and spec_option_1_id = ? and spec_2_id = ? and spec_option_2_id = ? and spec_3_id = ? and spec_option_3_id = ? and unit_id = ? limit 1", orderId, orderType, spec1Id, specOption1I, spec2Id, specOption2Id, spec3Id, specOption3Id, unitId);
}
public GoodsUnit getUnit() {
......
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.bytechainx.psi</groupId>
<artifactId>psi-opensource</artifactId>
<version>2.1.0</version>
</parent>
<artifactId>psi-purchase</artifactId>
<packaging>jar</packaging>
<name>psi-purchase</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
</properties>
<dependencies>
<dependency>
<groupId>com.bytechainx.psi</groupId>
<artifactId>psi-common</artifactId>
<version>2.1.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<directory>target</directory>
<testOutputDirectory>target/test-classes</testOutputDirectory>
<outputDirectory>target/classes</outputDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
<!-- 不包含使用插件在测试完成后再拷贝资源文件过去防止冲突 -->
<excludes>
<exclude>**/*.java</exclude>
</excludes>
<filtering>true</filtering>
</resource>
</resources>
<testResources>
<testResource>
<directory>src/test/resources</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
<filtering>true</filtering>
</testResource>
</testResources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
<compilerId>csharp</compilerId>
</configuration>
<dependencies>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-compiler-csharp</artifactId>
<version>1.6</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12</version>
<configuration>
<forkMode>once</forkMode>
<argLine>-XX:PermSize=256M</argLine>
<skipTests>true</skipTests>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.5</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-clean-plugin</artifactId>
<version>2.5</version>
<configuration>
<filesets>
<fileset>
<directory>${basedir}/classes/lib</directory>
<includes>
<include>**/*.jar</include>
</includes>
<followSymlinks>false</followSymlinks>
</fileset>
</filesets>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<id>add-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<!-- Source folder -->
</sources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
<defaultGoal>compile</defaultGoal>
</build>
<!-- 使用阿里 maven 库 -->
<repositories>
<repository>
<id>ali-maven</id>
<url>https://maven.aliyun.com/repository/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>fail</checksumPolicy>
</snapshots>
</repository>
</repositories>
</project>
\ No newline at end of file
package com.bytechainx.psi.purchase.service;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import com.bytechainx.psi.common.EnumConstant.AuditStatusEnum;
import com.bytechainx.psi.common.EnumConstant.OrderStatusEnum;
import com.bytechainx.psi.common.dto.ConditionFilter;
import com.bytechainx.psi.common.dto.ConditionFilter.Operator;
import com.bytechainx.psi.common.model.PurchaseOrderGoods;
import com.bytechainx.psi.common.model.PurchaseRejectOrderGoods;
import com.bytechainx.psi.common.service.base.CommonService;
import com.jfinal.kit.Kv;
import com.jfinal.plugin.activerecord.Page;
/**
* 进货商品分析
*/
public class StatPurchaseGoodsService extends CommonService {
/**
* 分页列表
* 按商品统计
*/
public Page<PurchaseOrderGoods> paginate(Integer goodsCategoryId, String startTime, String endTime, Integer pageNumber, int pageSize) {
StringBuffer where = new StringBuffer();
List<Object> params = new ArrayList<Object>();
where.append("where 1 = 1 ");
StringBuffer whereOrder = new StringBuffer();
if(StringUtils.isNotEmpty(startTime)) {
whereOrder.append(" order_time >= '"+startTime+"' and ");
}
if(StringUtils.isNotEmpty(endTime)) {
whereOrder.append(" order_time <= '"+endTime+"' and ");
}
whereOrder.append(" order_status = "+OrderStatusEnum.normal.getValue()+" and audit_status = "+AuditStatusEnum.pass.getValue());
ConditionFilter filter = new ConditionFilter();
filter.setOperator(Operator.in);
filter.setValue("select id from purchase_order where "+whereOrder.toString());
Kv condKv = Kv.create();
condKv.set("purchase_order_id", filter);
if(goodsCategoryId != null && goodsCategoryId > 0) {
StringBuffer whereCategory = new StringBuffer();
whereCategory.append("where 1 = 1 ");
whereCategory.append(" and goods_category_id = "+goodsCategoryId);
ConditionFilter categoryFilter = new ConditionFilter();
categoryFilter.setOperator(Operator.in);
categoryFilter.setValue("select id from goods_info "+whereCategory.toString());
condKv.set("goods_info_id", categoryFilter);
}
conditionFilter(condKv, where, params);
Page<PurchaseOrderGoods> page = PurchaseOrderGoods.dao.paginate(pageNumber, pageSize, "select goods_info_id, sum(buy_number) as buy_number, sum(amount) as amount, sum(reject_number) as reject_number, sum(reject_amount) as reject_amount", "from purchase_order_goods "+where.toString()+" group by goods_info_id order by buy_number desc", params.toArray());
for(PurchaseOrderGoods purchaseOrderGoods : page.getList()) {
StringBuffer rejectWhere = new StringBuffer();
List<Object> rejectParams = new ArrayList<>();
rejectWhere.append("where 1 = 1 ");
rejectWhere.append(" and purchase_reject_order_id in (select id from purchase_reject_order where "+whereOrder.toString()+")");
if(goodsCategoryId != null && goodsCategoryId > 0) {
rejectWhere.append(" and goods_info_id in (select id from goods_info where goods_category_id = ? )");
rejectParams.add(goodsCategoryId);
}
rejectWhere.append(" and goods_info_id = ?");
rejectParams.add(purchaseOrderGoods.getGoodsInfoId());
PurchaseRejectOrderGoods purchaseRejectOrderGoods = PurchaseRejectOrderGoods.dao.findFirst("select sum(buy_number) as buy_number, sum(amount) as amount from purchase_reject_order_goods "+rejectWhere.toString()+" limit 1", rejectParams.toArray());
purchaseOrderGoods.setRejectAmount(purchaseRejectOrderGoods.getAmount());
purchaseOrderGoods.setRejectNumber(purchaseRejectOrderGoods.getBuyNumber());
}
return page;
}
/**
* 分页列表
* 按商品分类统计
*/
public PurchaseOrderGoods sumByCategory(Integer goodsCategoryId, String startTime, String endTime) {
StringBuffer where = new StringBuffer();
List<Object> params = new ArrayList<Object>();
where.append("where 1 = 1 ");
StringBuffer whereOrder = new StringBuffer();
if(StringUtils.isNotEmpty(startTime)) {
whereOrder.append(" order_time >= '"+startTime+"' and ");
}
if(StringUtils.isNotEmpty(endTime)) {
whereOrder.append(" order_time <= '"+endTime+"' and ");
}
whereOrder.append("order_status = "+OrderStatusEnum.normal.getValue()+" and audit_status = "+AuditStatusEnum.pass.getValue());
ConditionFilter filter = new ConditionFilter();
filter.setOperator(Operator.in);
filter.setValue("select id from purchase_order where "+whereOrder.toString());
Kv condKv = Kv.create();
condKv.set("purchase_order_id", filter);
StringBuffer whereCategory = new StringBuffer();
whereCategory.append("where 1 = 1 ");
if(goodsCategoryId != null && goodsCategoryId > 0) {
whereCategory.append(" and goods_category_id = "+goodsCategoryId);
}
ConditionFilter categoryFilter = new ConditionFilter();
categoryFilter.setOperator(Operator.in);
categoryFilter.setValue("select id from goods_info "+whereCategory.toString());
condKv.set("goods_info_id", categoryFilter);
conditionFilter(condKv, where, params);
PurchaseOrderGoods purchaseOrderGoods = PurchaseOrderGoods.dao.findFirst("select sum(buy_number) as buy_number, sum(amount) as amount from purchase_order_goods "+where.toString(), params.toArray());
StringBuffer rejectWhere = new StringBuffer();
List<Object> rejectParams = new ArrayList<>();
rejectWhere.append("where 1 = 1 ");
rejectWhere.append(" and purchase_reject_order_id in (select id from purchase_reject_order where "+whereOrder.toString()+")");
if(goodsCategoryId != null && goodsCategoryId > 0) {
rejectWhere.append(" and goods_info_id in (select id from goods_info where goods_category_id = ? )");
rejectParams.add(goodsCategoryId);
}
PurchaseRejectOrderGoods purchaseRejectOrderGoods = PurchaseRejectOrderGoods.dao.findFirst("select sum(buy_number) as buy_number, sum(amount) as amount from purchase_reject_order_goods "+rejectWhere.toString()+" limit 1", rejectParams.toArray());
purchaseOrderGoods.setRejectAmount(purchaseRejectOrderGoods.getAmount());
purchaseOrderGoods.setRejectNumber(purchaseRejectOrderGoods.getBuyNumber());
return purchaseOrderGoods;
}
/**
* 查询货品的查询明细
* @return
*/
public Page<PurchaseOrderGoods> paginateByGoods(Integer goodsInfoId, String startTime, String endTime, int pageNumber, int pageSize) {
StringBuffer where = new StringBuffer();
List<Object> params = new ArrayList<Object>();
where.append("where 1 = 1 ");
StringBuffer whereOrder = new StringBuffer();
if(StringUtils.isNotEmpty(startTime)) {
whereOrder.append(" order_time >= '"+startTime+"' and ");
}
if(StringUtils.isNotEmpty(endTime)) {
whereOrder.append(" order_time <= '"+endTime+"' and ");
}
whereOrder.append("order_status = "+OrderStatusEnum.normal.getValue()+" and audit_status = "+AuditStatusEnum.pass.getValue());
where.append(" and purchase_order_id in (select id from purchase_order where "+whereOrder.toString()+")");
if(goodsInfoId != null && goodsInfoId > 0) {
where.append(" and goods_info_id = ?");
params.add(goodsInfoId);
}
return PurchaseOrderGoods.dao.paginate(pageNumber, pageSize, "select * ", "from purchase_order_goods "+where.toString()+" order by id", params.toArray());
}
/**
* 分页列表
* 按规格明细统计
*/
public Page<PurchaseOrderGoods> paginateBySpec(String startDay, String endDay, Integer pageNumber, int pageSize) {
StringBuffer where = new StringBuffer();
List<Object> params = new ArrayList<Object>();
where.append("where 1 = 1 ");
where.append(" and order_status = ?");
params.add(OrderStatusEnum.normal.getValue());
where.append(" and audit_status = ?");
params.add(AuditStatusEnum.pass.getValue());
if(StringUtils.isNotEmpty(startDay)) {
where.append(" and order_time >= ?");
params.add(startDay);
}
if(StringUtils.isNotEmpty(endDay)) {
where.append(" and order_time <= ?");
params.add(endDay);
}
return PurchaseOrderGoods.dao.paginate(pageNumber, pageSize, "select goods_info_id,spec_1_id,spec_option_1_id,spec_2_id,spec_option_2_id,spec_3_id,spec_option_3_id,unit_id, sum(buy_number) as sum_buy_number ", "from purchase_order_goods "+where.toString()+" group by goods_info_id,spec_1_id,spec_option_1_id,spec_2_id,spec_option_2_id,spec_3_id,spec_option_3_id,unit_id order by id desc", params.toArray());
}
public Page<PurchaseOrderGoods> paginateBySupplier(Integer goodsInfoId, String startTime, String endTime, int pageNumber, int pageSize) {
StringBuffer where = new StringBuffer();
List<Object> params = new ArrayList<Object>();
where.append("where 1 = 1 ");
StringBuffer whereOrder = new StringBuffer();
if(StringUtils.isNotEmpty(startTime)) {
whereOrder.append(" order_time >= '"+startTime+"' and ");
}
if(StringUtils.isNotEmpty(endTime)) {
whereOrder.append(" order_time <= '"+endTime+"' and ");
}
whereOrder.append("order_status = "+OrderStatusEnum.normal.getValue()+" and audit_status = "+AuditStatusEnum.pass.getValue());
where.append(" and purchase_order_id in (select id from purchase_order where "+whereOrder.toString()+")");
if(goodsInfoId != null && goodsInfoId > 0) {
where.append(" and goods_info_id = ?");
params.add(goodsInfoId);
}
Page<PurchaseOrderGoods> page = PurchaseOrderGoods.dao.paginate(pageNumber, pageSize, "select supplier_info_id, sum(buy_number) as buy_number, sum(amount) as amount ", "from purchase_order_goods "+where.toString()+" group by supplier_info_id order by buy_number desc", params.toArray());
for (PurchaseOrderGoods purchaseOrderGoods : page.getList()) {
StringBuffer rejectWhere = new StringBuffer();
List<Object> rejectParams = new ArrayList<>();
rejectWhere.append("where 1 = 1 ");
rejectWhere.append(" and purchase_reject_order_id in (select id from purchase_reject_order where "+whereOrder.toString()+")");
rejectWhere.append(" and goods_info_id = ?");
rejectParams.add(goodsInfoId);
rejectWhere.append(" and supplier_info_id = ?");
rejectParams.add(purchaseOrderGoods.getSupplierInfoId());
PurchaseRejectOrderGoods purchaseRejectOrderGoods = PurchaseRejectOrderGoods.dao.findFirst("select sum(buy_number) as buy_number, sum(amount) as amount from purchase_reject_order_goods "+rejectWhere.toString()+" limit 1", rejectParams.toArray());
purchaseOrderGoods.setRejectAmount(purchaseRejectOrderGoods.getAmount());
purchaseOrderGoods.setRejectNumber(purchaseRejectOrderGoods.getBuyNumber());
}
return page;
}
public PurchaseOrderGoods sumByGoodsId(Integer goodsInfoId, String startTime, String endTime) {
StringBuffer where = new StringBuffer();
List<Object> params = new ArrayList<Object>();
where.append("where 1 = 1 ");
StringBuffer whereOrder = new StringBuffer();
if(StringUtils.isNotEmpty(startTime)) {
whereOrder.append(" order_time >= '"+startTime+"' and ");
}
if(StringUtils.isNotEmpty(endTime)) {
whereOrder.append(" order_time <= '"+endTime+"' and ");
}
whereOrder.append("order_status = "+OrderStatusEnum.normal.getValue()+" and audit_status = "+AuditStatusEnum.pass.getValue());
ConditionFilter filter = new ConditionFilter();
filter.setOperator(Operator.in);
filter.setValue("select id from purchase_order where "+whereOrder.toString());
Kv condKv = Kv.create();
condKv.set("purchase_order_id", filter);
condKv.set("goods_info_id", goodsInfoId);
conditionFilter(condKv, where, params);
PurchaseOrderGoods purchaseOrderGoods = PurchaseOrderGoods.dao.findFirst("select sum(buy_number) as buy_number, sum(amount) as amount, sum(reject_number) as reject_number, sum(reject_amount) as reject_amount from purchase_order_goods "+where.toString(), params.toArray());
StringBuffer rejectWhere = new StringBuffer();
List<Object> rejectParams = new ArrayList<>();
rejectWhere.append("where 1 = 1 ");
rejectWhere.append(" and purchase_reject_order_id in (select id from purchase_reject_order where "+whereOrder.toString()+")");
rejectWhere.append(" and goods_info_id = ?");
rejectParams.add(goodsInfoId);
PurchaseRejectOrderGoods purchaseRejectOrderGoods = PurchaseRejectOrderGoods.dao.findFirst("select sum(buy_number) as buy_number, sum(amount) as amount from purchase_reject_order_goods "+rejectWhere.toString()+" limit 1", rejectParams.toArray());
purchaseOrderGoods.setRejectAmount(purchaseRejectOrderGoods.getAmount());
purchaseOrderGoods.setRejectNumber(purchaseRejectOrderGoods.getBuyNumber());
return purchaseOrderGoods;
}
}
\ No newline at end of file
package com.bytechainx.psi.purchase.service;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import com.bytechainx.psi.common.EnumConstant.AuditStatusEnum;
import com.bytechainx.psi.common.EnumConstant.DataStatusEnum;
import com.bytechainx.psi.common.EnumConstant.OrderStatusEnum;
import com.bytechainx.psi.common.dto.ConditionFilter;
import com.bytechainx.psi.common.dto.ConditionFilter.Operator;
import com.bytechainx.psi.common.model.PurchaseOrder;
import com.bytechainx.psi.common.model.PurchaseOrderGoods;
import com.bytechainx.psi.common.model.PurchaseRejectOrder;
import com.bytechainx.psi.common.service.base.CommonService;
import com.jfinal.kit.Kv;
import com.jfinal.plugin.activerecord.Page;
/**
* 进货统计
*/
public class StatPurchaseService extends CommonService {
/**
* 分页列表
* 按供应商统计
*/
public Page<PurchaseOrder> paginateBySupplier(Integer supplierCategoryId, Integer supplierInfoId, String startDay, String endDay, Integer pageNumber, int pageSize) {
StringBuffer where = new StringBuffer();
List<Object> params = new ArrayList<Object>();
where.append("where 1 = 1 ");
where.append(" and order_status = ?");
params.add(OrderStatusEnum.normal.getValue());
where.append(" and audit_status = ?");
params.add(AuditStatusEnum.pass.getValue());
if(StringUtils.isNotEmpty(startDay)) {
where.append(" and order_time >= ?");
params.add(startDay);
}
if(StringUtils.isNotEmpty(endDay)) {
where.append(" and order_time <= ?");
params.add(endDay);
}
StringBuffer rejectWhere = new StringBuffer(where);
List<Object> rejectParams = new ArrayList<>();
rejectParams.addAll(params);
if(supplierInfoId != null && supplierInfoId > 0) {
where.append(" and supplier_info_id = ?");
params.add(supplierInfoId);
}
if(supplierCategoryId != null && supplierCategoryId > 0) {
where.append(" and supplier_info_id in (select id from supplier_info where supplier_category_id = ? and data_status = ?)");
params.add(supplierCategoryId);
params.add(DataStatusEnum.enable.getValue());
}
Page<PurchaseOrder> page = PurchaseOrder.dao.paginate(pageNumber, pageSize, "select supplier_info_id, sum(amount) as amount, count(id) as order_count, sum(other_amount) as other_amount", "from purchase_order "+where.toString()+" group by supplier_info_id order by amount desc", params.toArray());
for(PurchaseOrder purchaseOrder : page.getList()) {
StringBuffer _rejectWhere = new StringBuffer(rejectWhere);
List<Object> _rejectParams = new ArrayList<>();
_rejectParams.addAll(rejectParams);
_rejectWhere.append(" and supplier_info_id = ?");
_rejectParams.add(purchaseOrder.getSupplierInfoId());
PurchaseRejectOrder purchaseRejectOrder = PurchaseRejectOrder.dao.findFirst("select sum(amount) as amount, count(id) as order_count from purchase_reject_order "+_rejectWhere+" limit 1", _rejectParams.toArray());
purchaseOrder.setRejectAmount(purchaseRejectOrder.getAmount());
purchaseOrder.put("reject_order_count", purchaseRejectOrder.getInt("order_count"));
}
return page;
}
/**
* 分页列表
* 按供应商统计
*/
public PurchaseOrder sumBySupplier(Integer supplierCategoryId, Integer supplierInfoId, String startDay, String endDay) {
StringBuffer where = new StringBuffer();
List<Object> params = new ArrayList<Object>();
where.append("where 1 = 1 ");
where.append(" and order_status = ?");
params.add(OrderStatusEnum.normal.getValue());
where.append(" and audit_status = ?");
params.add(AuditStatusEnum.pass.getValue());
if(StringUtils.isNotEmpty(startDay)) {
where.append(" and order_time >= ?");
params.add(startDay);
}
if(StringUtils.isNotEmpty(endDay)) {
where.append(" and order_time <= ?");
params.add(endDay);
}
if(supplierInfoId != null && supplierInfoId > 0) {
where.append(" and supplier_info_id = ?");
params.add(supplierInfoId);
}
if(supplierCategoryId != null && supplierCategoryId > 0) {
where.append(" and supplier_info_id in (select id from supplier_info where supplier_category_id = ? and data_status = ?)");
params.add(supplierCategoryId);
params.add(DataStatusEnum.enable.getValue());
}
PurchaseOrder purchaseOrder = PurchaseOrder.dao.findFirst("select sum(amount) as amount, count(id) as order_count, sum(other_amount) as other_amount from purchase_order "+where.toString()+" limit 1", params.toArray());
PurchaseRejectOrder purchaseRejectOrder = PurchaseRejectOrder.dao.findFirst("select sum(amount) as amount, count(id) as order_count from purchase_reject_order "+where.toString()+" limit 1", params.toArray());
purchaseOrder.setRejectAmount(purchaseRejectOrder.getAmount());
purchaseOrder.put("reject_paid_amount", purchaseRejectOrder.getPaidAmount());
purchaseOrder.put("reject_order_count", purchaseRejectOrder.getInt("order_count"));
return purchaseOrder;
}
/**
* 查询供应商的销售明细
* @param tenantOrgId
* @param startTime
* @param endTime
* @param condKv
* @param pageNumber
* @param pageSize
* @return
*/
public Page<PurchaseOrderGoods> paginateBySupplierGoods(Integer supplierInfoId, String startTime, String endTime, int pageNumber, int pageSize) {
StringBuffer where = new StringBuffer();
List<Object> params = new ArrayList<Object>();
where.append("where 1 = 1 ");
StringBuffer whereOrder = new StringBuffer();
if(StringUtils.isNotEmpty(startTime)) {
whereOrder.append(" order_time >= '"+startTime+"' and ");
}
if(StringUtils.isNotEmpty(endTime)) {
whereOrder.append(" order_time <= '"+endTime+"' and ");
}
whereOrder.append("supplier_info_id = "+supplierInfoId+" and order_status = "+OrderStatusEnum.normal.getValue()+" and audit_status = "+AuditStatusEnum.pass.getValue());
ConditionFilter filter = new ConditionFilter();
filter.setOperator(Operator.in);
filter.setValue("select id from purchase_order where "+whereOrder.toString());
Kv condKv = Kv.create();
condKv.set("purchase_order_id", filter);
conditionFilter(condKv, where, params);
return PurchaseOrderGoods.dao.paginate(pageNumber, pageSize, "select goods_info_id, sum(buy_number) as buy_number, sum(amount) as amount, sum(reject_number) as reject_number, sum(reject_amount) as reject_amount", "from purchase_order_goods "+where.toString()+" group by goods_info_id order by buy_number desc", params.toArray());
}
}
\ No newline at end of file
package com.bytechainx.psi.purchase.service;
import java.util.ArrayList;
import java.util.List;
import com.bytechainx.psi.common.model.InventoryStockLog;
import com.bytechainx.psi.common.service.base.CommonService;
import com.jfinal.kit.Kv;
import com.jfinal.kit.Ret;
import com.jfinal.plugin.activerecord.Page;
/**
* 库存统计
*/
public class StatStockService extends CommonService {
/**
* 库存流水
*/
public Page<InventoryStockLog> paginate(Kv conditionColumns, Integer pageNumber, int pageSize) {
StringBuffer where = new StringBuffer();
List<Object> params = new ArrayList<Object>();
where.append("where 1 = 1 ");
conditionFilter(conditionColumns, where, params);
return InventoryStockLog.dao.paginate(pageNumber, pageSize, "select * ", "from inventory_stock_log "+where.toString()+" order by id desc", params.toArray());
}
/**
* 查看
*/
public Ret show() {
return Ret.ok();
}
}
\ No newline at end of file
package com.bytechainx.psi.purchase.service;
import java.util.ArrayList;
import java.util.List;
import com.bytechainx.psi.common.model.InventoryStock;
import com.bytechainx.psi.common.service.base.CommonService;
import com.jfinal.kit.Kv;
import com.jfinal.plugin.activerecord.Page;
/**
* 库存查询
*/
public class StockInfoService extends CommonService {
/**
* 分页列表
* 按商品查询
*/
public Page<InventoryStock> paginate(Kv conditionColumns, Integer pageNumber, int pageSize) {
StringBuffer where = new StringBuffer();
List<Object> params = new ArrayList<Object>();
where.append("where 1 = 1 ");
conditionFilter(conditionColumns, where, params);
return InventoryStock.dao.paginate(pageNumber, pageSize, "select tenant_org_id, goods_info_id, sum(stock) sum_stock, sum(reserve_stock) as sum_reserve_stock, sum(lock_stock) as sum_lock_stock ", "from inventory_stock "+where.toString()+" group by goods_info_id", params.toArray());
}
/**
* 分页列表
* 按规格查询
*/
public Page<InventoryStock> paginateBySpec(Kv conditionColumns, Integer pageNumber, int pageSize) {
StringBuffer where = new StringBuffer();
List<Object> params = new ArrayList<Object>();
where.append("where 1 = 1 ");
conditionFilter(conditionColumns, where, params);
return InventoryStock.dao.paginate(pageNumber, pageSize, "select * ", "from inventory_stock "+where.toString()+" order by id desc", params.toArray());
}
}
\ No newline at end of file
package com.bytechainx.psi.purchase.service;
import java.util.ArrayList;
import java.util.List;
import com.bytechainx.psi.common.model.InventoryStock;
import com.bytechainx.psi.common.service.base.CommonService;
import com.jfinal.kit.Kv;
import com.jfinal.kit.Ret;
import com.jfinal.plugin.activerecord.Page;
/**
* 库存预警
*/
public class StockWarningService extends CommonService {
/**
* 分页列表
*/
public Page<InventoryStock> paginate(Kv conditionColumns, Integer pageNumber, int pageSize) {
StringBuffer where = new StringBuffer();
List<Object> params = new ArrayList<Object>();
where.append("where 1 = 1 ");
conditionFilter(conditionColumns, where, params);
return InventoryStock.dao.paginate(pageNumber, pageSize, "select * ", "from inventory_stock "+where.toString()+" order by id desc", params.toArray());
}
/**
* 查看
*/
public Ret show() {
return Ret.ok();
}
}
\ No newline at end of file
package com.bytechainx.psi.purchase.service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import com.bytechainx.psi.common.model.SupplierCategory;
import com.bytechainx.psi.common.service.base.CommonService;
import com.jfinal.kit.Ret;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Page;
/**
* 供应商分类
*/
public class SupplierCategoryService extends CommonService {
/**
* 分页列表
*/
public Page<SupplierCategory> paginate(Integer pageNumber, int pageSize) {
StringBuffer where = new StringBuffer();
List<Object> params = new ArrayList<Object>();
where.append("where 1 = 1 ");
return SupplierCategory.dao.paginate(pageNumber, pageSize, "select * ", "from supplier_category "+where.toString()+" order by id desc", params.toArray());
}
/**
* 新增
*/
public Ret create(SupplierCategory category) {
if(category == null) {
return Ret.fail("参数错误");
}
if(StringUtils.isEmpty(category.getName())) {
return Ret.fail("分类名称不能为空");
}
SupplierCategory _category = SupplierCategory.dao.findFirst("select * from supplier_category where name = ? limit 1", category.getName());
if(_category != null) {
return Ret.fail("分类名称已存在");
}
category.setCreatedAt(new Date());
category.save();
return Ret.ok("新增供应商分类成功").set("targetId", category.getId());
}
/**
* 修改
*/
public Ret update(SupplierCategory category) {
if(category == null || category.getId() == null || category.getId() <= 0) {
return Ret.fail("参数错误");
}
if(StringUtils.isEmpty(category.getName())) {
return Ret.fail("分类名称不能为空");
}
SupplierCategory _category = SupplierCategory.dao.findFirst("select * from supplier_category where name = ? limit 1", category.getName());
if(_category != null && _category.getId().intValue() != category.getId().intValue()) {
return Ret.fail("分类名称已存在");
}
_category = SupplierCategory.dao.findById(category.getId());
if(_category == null) {
return Ret.fail("供应商分类不存在,无法修改");
}
category.update();
return Ret.ok("修改供应商分类成功");
}
/**
* 删除
*/
public Ret delete(List<Integer> ids) {
if(ids == null || ids.isEmpty()) {
return Ret.fail("参数错误");
}
for (Integer id : ids) {
SupplierCategory.dao.deleteById(id);
Db.update("update supplier_info set supplier_category_id = ? where supplier_category_id = ?", 0, id);
}
return Ret.ok("删除供应商分类成功");
}
}
\ No newline at end of file
package com.bytechainx.psi.purchase.service;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import com.bytechainx.psi.common.EnumConstant.DataStatusEnum;
import com.bytechainx.psi.common.EnumConstant.FundFlowEnum;
import com.bytechainx.psi.common.kit.PinYinUtil;
import com.bytechainx.psi.common.model.SupplierInfo;
import com.bytechainx.psi.common.model.TenantAdmin;
import com.bytechainx.psi.common.model.TraderBookAccount;
import com.bytechainx.psi.common.model.TraderBookAccountLogs;
import com.bytechainx.psi.common.service.base.CommonService;
import com.jfinal.kit.Kv;
import com.jfinal.kit.Ret;
import com.jfinal.plugin.activerecord.Page;
/**
* 供应商管理
*/
public class SupplierInfoService extends CommonService {
/**
* 分页列表
* @param moreCondKv
*/
public Page<SupplierInfo> paginate(Kv conditionColumns, Kv moreCondKv, Integer pageNumber, int pageSize) {
StringBuffer where = new StringBuffer();
List<Object> params = new ArrayList<Object>();
where.append("where 1 = 1 ");
conditionFilter(conditionColumns, where, params);
if(moreCondKv != null) {
if(moreCondKv.getBoolean("hide_debt_flag") != null && moreCondKv.getBoolean("hide_debt_flag")) { // 是否隐藏无欠款客户
where.append(" and trader_book_account_id in (select id from trader_book_account where (in_amount - out_amount) > 0 )");
}
}
if(conditionColumns == null || !conditionColumns.containsKey("data_status")) {
where.append(" and data_status != ?");
params.add(DataStatusEnum.delete.getValue());
}
return SupplierInfo.dao.paginate(pageNumber, pageSize, "select * ", "from supplier_info "+where.toString()+" order by id desc", params.toArray());
}
/**
* 新增
*/
public Ret create(Integer adminId, SupplierInfo supplierInfo) {
if(supplierInfo == null) {
return Ret.fail("参数错误");
}
if(StringUtils.isEmpty(supplierInfo.getName())) {
return Ret.fail("供应商名称不能为空");
}
SupplierInfo _supplierInfo = SupplierInfo.dao.findFirst("select * from supplier_info where name = ? and data_status != ? limit 1", supplierInfo.getName(), DataStatusEnum.delete.getValue());
if(_supplierInfo != null) {
return Ret.fail("供应商名称已存在");
}
// 创建往来帐户
TraderBookAccount traderBookAccount = new TraderBookAccount();
traderBookAccount.setCreatedAt(new Date());
traderBookAccount.setInAmount(BigDecimal.ZERO);
traderBookAccount.setOpenBalance(BigDecimal.ZERO);
traderBookAccount.setOutAmount(BigDecimal.ZERO);
traderBookAccount.setPayAmount(BigDecimal.ZERO);
traderBookAccount.setUpdatedAt(new Date());
traderBookAccount.save();
supplierInfo.setTraderBookAccountId(traderBookAccount.getId());
supplierInfo.setCode(PinYinUtil.getFirstSpell(supplierInfo.getName()));
supplierInfo.setCreatedAt(new Date());
supplierInfo.setUpdatedAt(new Date());
supplierInfo.save();
// 更新往来帐户
BigDecimal openBalance = supplierInfo.getBigDecimal("open_balance"); // 期初欠款
updateTraderBookAccount(adminId, traderBookAccount, openBalance);
return Ret.ok("新增供应商成功").set("targetId", supplierInfo.getId());
}
/**
* 修改
*/
public Ret update(Integer adminId, SupplierInfo supplierInfo) {
if(supplierInfo == null || supplierInfo.getId() == null || supplierInfo.getId() <= 0) {
return Ret.fail("参数错误");
}
if(StringUtils.isEmpty(supplierInfo.getName())) {
return Ret.fail("供应商名称不能为空");
}
SupplierInfo _supplierInfo = SupplierInfo.dao.findFirst("select * from supplier_info where name = ? and data_status != ? limit 1", supplierInfo.getName(), DataStatusEnum.delete.getValue());
if(_supplierInfo != null && _supplierInfo.getId().intValue() != supplierInfo.getId().intValue()) {
return Ret.fail("供应商名称已存在");
}
_supplierInfo = SupplierInfo.dao.findById(supplierInfo.getId());
if(_supplierInfo == null) {
return Ret.fail("供应商不存在,无法修改");
}
supplierInfo.setCode(PinYinUtil.getFirstSpell(supplierInfo.getName()));
supplierInfo.setUpdatedAt(new Date());
supplierInfo.update();
// 更新往来帐户
BigDecimal openBalance = supplierInfo.getBigDecimal("open_balance"); // 期初欠款
updateTraderBookAccount(adminId, _supplierInfo.getTraderBookAccount(), openBalance);
return Ret.ok("修改供应商成功");
}
/**
* 删除
*/
public Ret delete(List<Integer> ids) {
if(ids == null || ids.isEmpty()) {
return Ret.fail("参数错误");
}
for (Integer id : ids) {
SupplierInfo supplierInfo = SupplierInfo.dao.findById(id);
if(supplierInfo == null) {
continue;
}
supplierInfo.setDataStatus(DataStatusEnum.delete.getValue());
supplierInfo.setUpdatedAt(new Date());
supplierInfo.update();
}
return Ret.ok("删除供应商成功");
}
/**
* 停用
*/
public Ret disable(List<Integer> ids) {
if(ids == null || ids.isEmpty()) {
return Ret.fail("参数错误");
}
for (Integer id : ids) {
SupplierInfo supplierInfo = SupplierInfo.dao.findById(id);
if(supplierInfo == null) {
continue;
}
supplierInfo.setDataStatus(DataStatusEnum.disable.getValue());
supplierInfo.setUpdatedAt(new Date());
supplierInfo.update();
}
return Ret.ok("停用供应商成功");
}
/**
* 启用
*/
public Ret enable(List<Integer> ids) {
if(ids == null || ids.isEmpty()) {
return Ret.fail("参数错误");
}
for (Integer id : ids) {
SupplierInfo supplierInfo = SupplierInfo.dao.findById(id);
if(supplierInfo == null) {
continue;
}
supplierInfo.setDataStatus(DataStatusEnum.enable.getValue());
supplierInfo.setUpdatedAt(new Date());
supplierInfo.update();
}
return Ret.ok("启用供应商成功");
}
/**
* 导入
*/
public Ret createImport() {
return Ret.ok("导入供应商成功");
}
/**
* 更新往来帐户资金
* @param tenantOrgId
* @param order
* @param changeAmount
* @return
*/
private Ret updateTraderBookAccount(Integer adminId, TraderBookAccount traderBookAccount , BigDecimal openBalance) {
if(openBalance == null) {
return Ret.fail("期初金额不能为空");
}
BigDecimal oldOpenBalance = traderBookAccount.getOpenBalance();
if(oldOpenBalance.compareTo(openBalance) == 0) {
return Ret.fail("期初金额未发生变化");
}
// 修改往来帐户,客户欠款=支出-收入,欠供应商款=收入-支出。
// 先回退老的期初欠款
if (oldOpenBalance.compareTo(BigDecimal.ZERO) > 0) { // 客户有欠款
BigDecimal inAmount = traderBookAccount.getInAmount().subtract(oldOpenBalance);
traderBookAccount.setInAmount(inAmount);
} else if (oldOpenBalance.compareTo(BigDecimal.ZERO) < 0) { // 负数,客户有预存款
BigDecimal outAmount = traderBookAccount.getOutAmount().subtract(BigDecimal.ZERO.subtract(oldOpenBalance));
traderBookAccount.setOutAmount(outAmount);
}
// 再处理新的期初欠款
if (openBalance.compareTo(BigDecimal.ZERO) > 0) { // 客户有欠款
BigDecimal inAmount = traderBookAccount.getInAmount().add(openBalance);
traderBookAccount.setInAmount(inAmount);
} else if (openBalance.compareTo(BigDecimal.ZERO) < 0) { // 负数,客户有预存款
BigDecimal outAmount = traderBookAccount.getOutAmount().add(BigDecimal.ZERO.subtract(openBalance));
traderBookAccount.setOutAmount(outAmount);
}
traderBookAccount.setOpenBalance(openBalance);
traderBookAccount.setUpdatedAt(new Date());
traderBookAccount.update();
BigDecimal balance = traderBookAccount.getSupplierDebtAmount(); // 欠供应商款=收入-支出
// 记录往来帐户出入金日志表
TraderBookAccountLogs bookAccountLogs = new TraderBookAccountLogs();
bookAccountLogs.setAmount(openBalance);
bookAccountLogs.setBalance(balance);
bookAccountLogs.setCreatedAt(new Date());
bookAccountLogs.setFundFlow(FundFlowEnum.adjust.getValue());
bookAccountLogs.setTraderBookAccountId(traderBookAccount.getId());
TenantAdmin admin = TenantAdmin.dao.findById(adminId);
bookAccountLogs.setRemark(admin.getRealName()+" 调整期初");
bookAccountLogs.save();
return Ret.ok("调整期初金额成功");
}
/**
* 期初调整
* @param tenantOrgId
* @param customerInfoId
* @param customerInfoIdObject
* @param openBalanceObject
* @return
*/
public Ret updateOpenBalance(Integer adminId, Integer supplierInfoId, BigDecimal openBalance) {
if(supplierInfoId == null || supplierInfoId <= 0) {
return Ret.fail("客户不能为空");
}
if(openBalance == null) {
return Ret.fail("期初金额不能为空");
}
SupplierInfo supplierInfo = SupplierInfo.dao.findById(supplierInfoId);
Ret ret = updateTraderBookAccount(adminId, supplierInfo.getTraderBookAccount(), openBalance);
return ret;
}
}
\ No newline at end of file
package com.bytechainx.psi.purchase.service.base;
import com.bytechainx.psi.common.service.base.CommonService;
public class BaseService extends CommonService {
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册