Browse Source

销售单结算

master
fanzongzhe 5 months ago
parent
commit
bd6714ad4a
  1. 171
      yxt-as/src/main/java/com/yxt/anrui/as/biz/asbillsettelapply/AsBillSettelApplyService.java
  2. 6
      yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusrepairbill/AsBusrepairBillService.java
  3. 14
      yxt-as/src/main/java/com/yxt/anrui/as/biz/asserviceattachitem/AsServiceAttachItemRest.java
  4. 3
      yxt-sms-biz/src/main/java/com/yxt/sms/biz/smssalesbill/SmsAttachitemVo.java
  5. 50
      yxt-sms-biz/src/main/java/com/yxt/sms/biz/smssalesbill/SmsSalesBillService.java
  6. 4
      yxt-sms-biz/src/main/java/com/yxt/sms/biz/smssalesbillaitem/SmsSalesBillAitem.java
  7. 37
      yxt-sms-biz/src/main/java/com/yxt/sms/feign/as/asaitem/AsServiceAttachItem.java
  8. 27
      yxt-sms-biz/src/main/java/com/yxt/sms/feign/as/asaitem/AsServiceAttachItemFeign.java

171
yxt-as/src/main/java/com/yxt/anrui/as/biz/asbillsettelapply/AsBillSettelApplyService.java

@ -2590,6 +2590,175 @@ public class AsBillSettelApplyService extends MybatisBaseService<AsBillSettelApp
}
public AsBillSettelApplyDetailsVo salesbillInit(String sid, String userSid, String orgPath) {
return null;
AsBillSettelApplyDetailsVo vo = new AsBillSettelApplyDetailsVo();
//新增初始化
//维修工单
//销售单
//维修工单
SmsSalesBillDetailsVo data = smsSalesBillFeign.fetchDetailsBySid(sid).getData();
if (null != data) {
vo.setSourceBillDate(data.getCreateTime());
if (StringUtils.isNotBlank(data.getSalesName())) {
vo.setWaitorName(data.getSalesName());
}
vo.setBillType("销售单");
vo.setSubject(data.getSubject());
if (StringUtils.isNotBlank(data.getMobile())) {
vo.setMobile(data.getMobile());
}
if (StringUtils.isNotBlank(data.getVinNo())) {
vo.setVinNo(data.getVinNo());
}
if (StringUtils.isNotBlank(data.getVehMark())) {
vo.setVehMark(data.getVehMark());
}
SalesInvoiceVo invoiceVo = data.getInvoiceVo();
if (null != invoiceVo) {
if (StringUtils.isNotBlank(invoiceVo.getIsInvoicing())) {
vo.setIsInvoicing(invoiceVo.getIsInvoicing());
}
if (StringUtils.isNotBlank(invoiceVo.getTaxRate())) {
vo.setTaxRate(invoiceVo.getTaxRate());
}
}
BigDecimal costAmount = BigDecimal.ZERO;//成本合计
BigDecimal profit = BigDecimal.ZERO;//总利润额
BigDecimal outAmount = BigDecimal.ZERO;//外出费
BigDecimal subsidyAmount = BigDecimal.ZERO;//厂家补助
BigDecimal rescueAmount = BigDecimal.ZERO;//施救费
BigDecimal outKPAmount = BigDecimal.ZERO;//外出费KP
BigDecimal subsidyKPAmount = BigDecimal.ZERO;//厂家补助KP
BigDecimal rescueKPAmount = BigDecimal.ZERO;//施救费KP
// BigDecimal sitemProfit = BigDecimal.ZERO;//维修项目利润
// BigDecimal goodsProfit = BigDecimal.ZERO;//维修用料利润
// BigDecimal otherProfit = BigDecimal.ZERO;//附件项目利润
// BigDecimal addProfit = BigDecimal.ZERO;//其他附加项目利润
if (StringUtils.isNotBlank(data.getGoodsAmount())) {
vo.setGoodsAmount(data.getGoodsAmount());
}
if (StringUtils.isNotBlank(data.getAddAmount())) {
vo.setAddAmount(data.getAddAmount());
}
if (StringUtils.isNotBlank(data.getDiscountAmount())) {
vo.setDiscountAmount(data.getDiscountAmount());
}
List<SalesGoodsVo> goodsDetailsVos = data.getGoodsVos();
if (!goodsDetailsVos.isEmpty()) {
List<SettleGoodsDetailsVo> goodsList = new ArrayList<>();
for (SalesGoodsVo g : goodsDetailsVos) {
SettleGoodsDetailsVo v = new SettleGoodsDetailsVo();
BeanUtil.copyProperties(g, v);
BigDecimal yingshou = BigDecimal.ZERO; //应收
BigDecimal youhui = BigDecimal.ZERO; //优惠
BigDecimal jiesuan = BigDecimal.ZERO; //结算
BigDecimal chengben = BigDecimal.ZERO; //成本
BigDecimal chengbenPrice = BigDecimal.ZERO; //成本单价
BigDecimal lirun = BigDecimal.ZERO; //利润
BigDecimal count = BigDecimal.ZERO; //数量
if (StringUtils.isNotBlank(g.getCount())) {
count = new BigDecimal(g.getCount());
}
if (StringUtils.isNotBlank(g.getPrice())) {
BigDecimal price = new BigDecimal(g.getPrice());
yingshou = price.multiply(count);
v.setGoodsReceivableAmount(yingshou.toString());
}
if (StringUtils.isNotBlank(g.getDiscountAmount())) {
youhui = new BigDecimal(g.getDiscountAmount());
}
jiesuan = yingshou.subtract(youhui);
v.setGoodsSettleAmount(jiesuan.toString());
//求成本
if (StringUtils.isNotBlank(g.getInventorySid())) {
String inventorySid = g.getInventorySid();
WmsInventory inventory = wmsInventoryFeign.fetchEntityBySid(inventorySid).getData();
if (null != inventory) {
if (null != inventory.getCost()) {
chengbenPrice = inventory.getCost();
chengben = chengbenPrice.multiply(count);
}
}
}
v.setGoodsCost(chengben.toString());
lirun = jiesuan.subtract(chengben);
v.setGoodsPrint(lirun.toString());
costAmount = costAmount.add(chengben);
profit = profit.add(lirun);
goodsList.add(v);
}
vo.setGoodsDetailsVos(goodsList);
}
List<SmsAttachitemVo> aitemVos = data.getAitemVos();
if (!aitemVos.isEmpty()) {
List<SettleAitemVo> aitemVoList = new ArrayList<>();
for (SmsAttachitemVo a : aitemVos) {
SettleAitemVo v = new SettleAitemVo();
BeanUtil.copyProperties(a, v);
BigDecimal yingshou = BigDecimal.ZERO; //应收
BigDecimal chengben = BigDecimal.ZERO; //成本
BigDecimal lirun = BigDecimal.ZERO; //利润
if (StringUtils.isNotBlank(a.getPrice())) {
yingshou = new BigDecimal(a.getPrice());
v.setAitemReceivableAmount(yingshou.toString());
}
//求成本
if (StringUtils.isNotBlank(a.getAitemsid())) {
String aitemsid = a.getAitemsid();
AsServiceAttachItem attachItem = asServiceAttachItemService.fetchBySid(aitemsid);
if (null != attachItem) {
if (null != attachItem.getCost()) {
chengben = attachItem.getCost();
}
}
}
v.setAitemCost(chengben.toString());
lirun = yingshou.subtract(chengben);
v.setAitemPrint(lirun.toString());
costAmount = costAmount.add(chengben);
profit = profit.add(lirun);
aitemVoList.add(v);
}
vo.setAitemVos(aitemVoList);
}
vo.setProfit(profit.toString());
vo.setCostAmount(costAmount.toString());
}
//根据用户查询发起人、发起部门、发起日期为当前日期
String deptName = "";
String deptSid = "";
String useOrgSid = "";
if (StringUtils.isNotBlank(orgPath)) {
List<String> split = Arrays.asList(orgPath.split("/"));
if (split.size() > 1) {
//获取本级sid获取本级部门信息
SysOrganizationVo sysOrganization = sysOrganizationFeign.fetchBySid(split.get(split.size() - 2)).getData();
SysOrganizationVo sysOrganization1 = sysOrganizationFeign.fetchBySid(split.get(split.size() - 1)).getData();
deptName = sysOrganization.getName() + "/" + sysOrganization1.getName();
deptName = sysOrganization1.getName();
deptSid = sysOrganization1.getSid();
} else {
SysOrganizationVo sysOrganization = sysOrganizationFeign.fetchBySid(split.get(0)).getData();
deptName = sysOrganization.getName();
deptName = sysOrganization.getName();
deptSid = sysOrganization.getSid();
}
useOrgSid = sysStaffOrgFeign.getOrgSidByPath(orgPath).getData();
}
//创建组织使用组织
ResultBean<SysOrganizationVo> organizationResultBean = sysOrganizationFeign.fetchBySid(useOrgSid);
if (organizationResultBean.getData() != null) {
vo.setUseOrgName(organizationResultBean.getData().getName());
}
//根据用户sid查询人员姓名
ResultBean<SysUserVo> userVoResultBean = sysUserFeign.fetchBySid(userSid);
vo.setDept(deptName);
vo.setDeptSid(deptSid);
vo.setCreateByName(userVoResultBean.getData().getName());
vo.setApplyDate(DateUtil.today());
vo.setOrgPath(orgPath);
vo.setCreateBySid(userSid);
vo.setUseOrgSid(useOrgSid);
vo.setSourceBillType("0");
return vo;
}
}

6
yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusrepairbill/AsBusrepairBillService.java

@ -23,6 +23,7 @@ import com.yxt.anrui.as.api.asbusrepairbillsitemrepairer.AsBusrepairBillSitemRep
import com.yxt.anrui.as.api.asbusrepairbillvech.AsBusrepairBillVech;
import com.yxt.anrui.as.api.asbusrepairinventorybilldetail.AsBusrepairInventorybillDetail;
import com.yxt.anrui.as.api.asbusrepairinventorybilldetail.SitemsVo;
import com.yxt.anrui.as.api.asserviceattachitem.AsServiceAttachItem;
import com.yxt.anrui.as.api.asserviceitem.AsServiceItem;
import com.yxt.anrui.as.api.astrackbill.AsTrackBillDto;
import com.yxt.anrui.as.api.enums.AsBillTypeEnum;
@ -44,6 +45,7 @@ import com.yxt.anrui.as.biz.asbusrepairbillsitem.AsBusrepairBillSitemService;
import com.yxt.anrui.as.biz.asbusrepairbillsitemrepairer.AsBusrepairBillSitemRepairerService;
import com.yxt.anrui.as.biz.asbusrepairbillvech.AsBusrepairBillVechService;
import com.yxt.anrui.as.biz.asbusrepairinventorybilldetail.AsBusrepairInventorybillDetailService;
import com.yxt.anrui.as.biz.asserviceattachitem.AsServiceAttachItemService;
import com.yxt.anrui.as.biz.asserviceitem.AsServiceItemService;
import com.yxt.anrui.as.biz.astechtitledetail.AsTechTitleDetailService;
import com.yxt.anrui.as.biz.astrackbill.AsTrackBillService;
@ -117,6 +119,8 @@ public class AsBusrepairBillService extends MybatisBaseService<AsBusrepairBillMa
@Autowired
private AsBusrepairBillInsuranceService asBusrepairBillInsuranceService;
@Autowired
private AsServiceAttachItemService asServiceAttachItemService;
@Autowired
private AsBusrepairBillInvoiceService asBusrepairBillInvoiceService;
@Autowired
private AsBusrepairBillOtherService asBusrepairBillOtherService;
@ -495,7 +499,7 @@ public class AsBusrepairBillService extends MybatisBaseService<AsBusrepairBillMa
aitem.setRemarks(aitemVo.getRemarks());
}
aitem.setBillSid(sid);
AsBusrepairBillAitem item = asBusrepairBillAitemService.fetchBySid(aitemVo.getAitemSid());
AsServiceAttachItem item = asServiceAttachItemService.fetchBySid(aitemVo.getAitemSid());
if (null != item) {
if (null != item.getCost()) {
aitem.setCost(item.getCost());

14
yxt-as/src/main/java/com/yxt/anrui/as/biz/asserviceattachitem/AsServiceAttachItemRest.java

@ -1,9 +1,6 @@
package com.yxt.anrui.as.biz.asserviceattachitem;
import com.yxt.anrui.as.api.asserviceattachitem.AsServiceAttachItemDetailsVo;
import com.yxt.anrui.as.api.asserviceattachitem.AsServiceAttachItemDto;
import com.yxt.anrui.as.api.asserviceattachitem.AsServiceAttachItemQuery;
import com.yxt.anrui.as.api.asserviceattachitem.AsServiceAttachItemVo;
import com.yxt.anrui.as.api.asserviceattachitem.*;
import com.yxt.anrui.as.api.asserviceitem.AsServiceItemDetailsVo;
import com.yxt.anrui.as.api.asserviceitem.AsServiceItemDto;
import com.yxt.common.core.query.PagerQuery;
@ -28,6 +25,7 @@ public class AsServiceAttachItemRest {
private AsServiceAttachItemService asServiceAttachItemService;
@ApiOperation("根据条件分页查询数据的列表")
@PostMapping("/listPage")
public ResultBean<PagerVo<AsServiceAttachItemVo>> listPage(@RequestBody PagerQuery<AsServiceAttachItemQuery> pq){
@ -44,6 +42,14 @@ public class AsServiceAttachItemRest {
return rb.success().setData(vo);
}
@ApiOperation("详情查看")
@GetMapping("/fetchBySid/{sid}")
public ResultBean<AsServiceAttachItem> fetchBySid(@PathVariable("sid") String sid) {
ResultBean rb = ResultBean.fireFail();
AsServiceAttachItem entity = asServiceAttachItemService.fetchBySid(sid);
return rb.success().setData(entity);
}
@ApiOperation("修改保存")
@PostMapping("/saveAttachItem")
public ResultBean saveAttachItem(@RequestBody AsServiceAttachItemDto dto) {

3
yxt-sms-biz/src/main/java/com/yxt/sms/biz/smssalesbill/SmsAttachitemVo.java

@ -11,7 +11,8 @@ import lombok.Data;
@Data
public class SmsAttachitemVo {
@ApiModelProperty("附加项目sid")
private String aitemsid;
// private String aitemsid;
private String aitemSid;
@ApiModelProperty("附加项目名称")
private String aitemName;
@ApiModelProperty("销售价")

50
yxt-sms-biz/src/main/java/com/yxt/sms/biz/smssalesbill/SmsSalesBillService.java

@ -41,6 +41,8 @@ import com.yxt.sms.biz.smssalesbilldetail.SmsSalesBillDetailService;
import com.yxt.sms.biz.smssalesbillinvoice.SmsSalesBillInvoice;
import com.yxt.sms.biz.smssalesbillinvoice.SmsSalesBillInvoiceService;
import com.yxt.sms.biz.smssalesbillsettle.SmsSalesBillSettleService;
import com.yxt.sms.feign.as.asaitem.AsServiceAttachItem;
import com.yxt.sms.feign.as.asaitem.AsServiceAttachItemFeign;
import com.yxt.sms.feign.fms.fmsreceivesettle.FmsReceivesettle;
import com.yxt.sms.feign.fms.fmsreceivesettle.FmsReceivesettleDto;
import com.yxt.sms.feign.fms.fmsreceivesettle.FmsReceivesettleFeign;
@ -110,7 +112,8 @@ public class SmsSalesBillService extends MybatisBaseService<SmsSalesBillMapper,
private SysOrganizationFeign sysOrganizationFeign;
@Autowired
private DocPdfComponent docPdfComponent;
@Autowired
private AsServiceAttachItemFeign asServiceAttachItemFeign;
private QueryWrapper<SmsSalesBill> createQueryWrapper(SmsSalesBillQuery query) {
// todo: 这里根据具体业务调整查询条件
// 多字段Like示例:qw.and(wrapper -> wrapper.like("name", query.getName()).or().like("remark", query.getName()));
@ -248,6 +251,12 @@ public class SmsSalesBillService extends MybatisBaseService<SmsSalesBillMapper,
if (StringUtils.isNotBlank(goodsVo.getBillObjSid())) {
salesBillDetail.setSupplierSid(goodsVo.getBillObjSid());
}
if (StringUtils.isBlank(goodsVo.getDiscount())) {
salesBillDetail.setDiscount(10);
}
if (StringUtils.isBlank(goodsVo.getDiscountAmount())) {
salesBillDetail.setDiscountAmount(new BigDecimal("0"));
}
WmsInventory inventory = wmsInventoryFeign.fetchEntityBySid(goodsVo.getInventorySid()).getData();
if (null != inventory) {
if (StringUtils.isNotBlank(inventory.getManufacturerName())) {
@ -278,6 +287,16 @@ public class SmsSalesBillService extends MybatisBaseService<SmsSalesBillMapper,
if (StringUtils.isNotBlank(smsAttachitemVo.getAitemName())) {
aitem.setAttachItem(smsAttachitemVo.getAitemName());
}
if (StringUtils.isNotBlank(smsAttachitemVo.getAitemSid())) {
aitem.setAttachItemSid(smsAttachitemVo.getAitemSid());
}
AsServiceAttachItem item = asServiceAttachItemFeign.fetchBySid(smsAttachitemVo.getAitemSid()).getData();
if (null != item) {
if (null != item.getCost()) {
aitem.setCost(item.getCost());
aitem.setCostTotal(item.getCost());
}
}
smsSalesBillAitemService.insert(aitem);
}
}
@ -309,6 +328,22 @@ public class SmsSalesBillService extends MybatisBaseService<SmsSalesBillMapper,
if (StringUtils.isNotBlank(goodsVo.getBillObjSid())) {
salesBillDetail.setSupplierSid(goodsVo.getBillObjSid());
}
WmsInventory inventory = wmsInventoryFeign.fetchEntityBySid(goodsVo.getInventorySid()).getData();
if (null != inventory) {
if (StringUtils.isNotBlank(inventory.getManufacturerName())) {
salesBillDetail.setManufacturerName(inventory.getManufacturerName());
}
if (StringUtils.isNotBlank(inventory.getManufacturerSid())) {
salesBillDetail.setManufacturerSid(inventory.getManufacturerSid());
}
if (null != inventory.getCost()) {
BigDecimal cost = inventory.getCost();
salesBillDetail.setCost(cost);
BigDecimal c = new BigDecimal(goodsVo.getCount());
BigDecimal multiply = c.multiply(cost);
salesBillDetail.setCostTotal(multiply);
}
}
salesBillDetail.setBillBusTypeKey("004");
salesBillDetail.setBillBusTypeValue("配件销售");
smsSalesBillDetailService.insert(salesBillDetail);
@ -323,6 +358,17 @@ public class SmsSalesBillService extends MybatisBaseService<SmsSalesBillMapper,
if (StringUtils.isNotBlank(smsAttachitemVo.getAitemName())) {
aitem.setAttachItem(smsAttachitemVo.getAitemName());
}
if (StringUtils.isNotBlank(smsAttachitemVo.getAitemSid())) {
aitem.setAttachItemSid(smsAttachitemVo.getAitemSid());
}
AsServiceAttachItem item = asServiceAttachItemFeign.fetchBySid(smsAttachitemVo.getAitemSid()).getData();
if (null != item) {
if (null != item.getCost()) {
aitem.setCost(item.getCost());
aitem.setCostTotal(item.getCost());
}
}
smsSalesBillAitemService.insert(aitem);
}
}
@ -380,7 +426,7 @@ public class SmsSalesBillService extends MybatisBaseService<SmsSalesBillMapper,
for (SmsSalesBillAitem aitem : aitems) {
SmsAttachitemVo aitemVo = new SmsAttachitemVo();
if (StringUtils.isNotBlank(aitem.getAttachItemSid())) {
aitemVo.setAitemsid(aitem.getAttachItemSid());
aitemVo.setAitemSid(aitem.getAttachItemSid());
}
if (StringUtils.isNotBlank(aitem.getAttachItem())) {
aitemVo.setAitemName(aitem.getAttachItem());

4
yxt-sms-biz/src/main/java/com/yxt/sms/biz/smssalesbillaitem/SmsSalesBillAitem.java

@ -27,4 +27,8 @@ public class SmsSalesBillAitem extends BaseEntity {
private BigDecimal price;
@ApiModelProperty("销售价常量")
private BigDecimal aitemPrice;
@ApiModelProperty("成本价")
private BigDecimal cost;
@ApiModelProperty("成本合计(成本价*数量)")
private BigDecimal costTotal;
}

37
yxt-sms-biz/src/main/java/com/yxt/sms/feign/as/asaitem/AsServiceAttachItem.java

@ -0,0 +1,37 @@
package com.yxt.sms.feign.as.asaitem;
import com.baomidou.mybatisplus.annotation.TableName;
import com.yxt.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* @author Fan
* @description
* @date 2024/3/6 17:27
*/
@Data
@ApiModel(value = "附加项目", description = "附加项目")
@TableName("as_service_attachitem")
public class AsServiceAttachItem extends BaseEntity {
@ApiModelProperty("项目名称")
private String aitemName;
@ApiModelProperty("项目编码")
private String aitemCode;
@ApiModelProperty("销售价(工时费)=工时单价*工时数")
private BigDecimal price;
@ApiModelProperty("成本")
private BigDecimal cost;
@ApiModelProperty("排序号")
private Integer sortNo;
@ApiModelProperty("使用组织sid")
private String useOrgSid;
@ApiModelProperty("创建组织sid")
private String createOrgSid;
}

27
yxt-sms-biz/src/main/java/com/yxt/sms/feign/as/asaitem/AsServiceAttachItemFeign.java

@ -0,0 +1,27 @@
package com.yxt.sms.feign.as.asaitem;
import com.yxt.common.core.result.ResultBean;
import com.yxt.sms.feign.as.asbusrepairbill.*;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
/**
* @description: 维修单
* @author: fzz
* @date: 2024/3/7
**/
@FeignClient(
contextId = "yxt-as-AsServiceAttachItem",
name = "yxt-as",
path = "v1/AsServiceAttachItem"
)
public interface AsServiceAttachItemFeign {
@ApiOperation("详情查看")
@GetMapping("/fetchBySid/{sid}")
public ResultBean<AsServiceAttachItem> fetchBySid(@PathVariable("sid") String sid);
}
Loading…
Cancel
Save